Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Prigogin2012-03-08 04:09:39 +0000
committerSergey Prigogin2012-03-08 04:12:52 +0000
commite799de15a0119d7b810899143a2ceb38c0804ef1 (patch)
tree94ed4d42ad2bb6323f22344512b465037f5413e7 /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom
parent8153aff8ffd67ddd427a6aa564485b703d1ddb0e (diff)
downloadorg.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.java41
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;
+ }
}

Back to the top