diff options
author | Sergey Prigogin | 2012-03-08 04:09:39 +0000 |
---|---|---|
committer | Sergey Prigogin | 2012-03-08 04:12:52 +0000 |
commit | e799de15a0119d7b810899143a2ceb38c0804ef1 (patch) | |
tree | 94ed4d42ad2bb6323f22344512b465037f5413e7 /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom | |
parent | 8153aff8ffd67ddd427a6aa564485b703d1ddb0e (diff) | |
download | org.eclipse.cdt-e799de15a0119d7b810899143a2ceb38c0804ef1.tar.gz org.eclipse.cdt-e799de15a0119d7b810899143a2ceb38c0804ef1.tar.xz org.eclipse.cdt-e799de15a0119d7b810899143a2ceb38c0804ef1.zip |
Moved getOperandsOfMultiExpression method to CPPVisitor.
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom')
-rw-r--r-- | core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index c878789dff1..956fbad6d43 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -19,6 +19,13 @@ import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUti import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getNestedType; import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.getUltimateTypeUptoPointers; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + import org.eclipse.cdt.core.dom.ast.ASTGenericVisitor; import org.eclipse.cdt.core.dom.ast.ASTNodeProperty; import org.eclipse.cdt.core.dom.ast.ASTVisitor; @@ -192,13 +199,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; import org.eclipse.cdt.internal.core.index.IIndexScope; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - /** * Collection of methods to extract information from a C++ translation unit. */ @@ -2524,4 +2524,31 @@ public class CPPVisitor extends ASTQueries { } while ((node = node.getParent()) != null); return null; } + + /** + * Traverses a chain of nested homogeneous left-to-right-associative binary expressions and + * returns a list of their operands in left-to-right order. For example, for the expression + * a + b * c + d, it will return a list containing expressions: a, b * c, and d. + * + * @param binaryExpression the top-level binary expression + * @return a list of expression operands from left to right + */ + public static IASTExpression[] getOperandsOfMultiExpression(IASTBinaryExpression binaryExpression) { + int operator = binaryExpression.getOperator(); + IASTExpression[] operands = new IASTExpression[2]; + IASTExpression node; + int len = 0; + do { + operands = ArrayUtil.appendAt(operands, len++, binaryExpression.getOperand2()); + node = binaryExpression.getOperand1(); + if (!(node instanceof IASTBinaryExpression)) { + break; + } + binaryExpression = (IASTBinaryExpression) node; + } while (binaryExpression.getOperator() == operator); + operands = ArrayUtil.appendAt(operands, len++, node); + operands = ArrayUtil.trim(operands, len); + ArrayUtil.reverse(operands); + return operands; + } } |