diff options
author | Tuowen Zhao <ztuowen@gmail.com> | 2016-10-06 16:07:35 -0600 |
---|---|---|
committer | Tuowen Zhao <ztuowen@gmail.com> | 2016-10-06 16:07:35 -0600 |
commit | f329ee2b4cfdde656d2fe30f2a2789d8a3774203 (patch) | |
tree | ea000895ad943188ebdded11f4311b4e1cf011bb /src/ast | |
parent | b7a50e256d0ac6ec120050173b37f34d434ef325 (diff) | |
download | chill-f329ee2b4cfdde656d2fe30f2a2789d8a3774203.tar.gz chill-f329ee2b4cfdde656d2fe30f2a2789d8a3774203.tar.bz2 chill-f329ee2b4cfdde656d2fe30f2a2789d8a3774203.zip |
cleanup
Diffstat (limited to 'src/ast')
-rw-r--r-- | src/ast/node.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/ast/node.cpp b/src/ast/node.cpp index c8a3c08..6117f91 100644 --- a/src/ast/node.cpp +++ b/src/ast/node.cpp @@ -364,3 +364,26 @@ chillAST_Node* chillAST_Node::findContainingStmt() { return p->findContainingStmt(); } +chillAST_Node *chillAST_Node::getEnclosingStatement(int level) { // TODO do for subclasses? + if (isArraySubscriptExpr()) return parent->getEnclosingStatement(level + 1); + + if (level != 0) { + if (isBinaryOperator() || + isUnaryOperator() || + isTernaryOperator() || + isReturnStmt() || + isCallExpr() + ) + return this; + // things that are not endpoints. recurse through parent + if (isMemberExpr()) return parent->getEnclosingStatement(level + 1); + if (isImplicitCastExpr()) return parent->getEnclosingStatement(level + 1); + if (isSizeof()) return parent->getEnclosingStatement(level + 1); + if (isCStyleCastExpr()) return parent->getEnclosingStatement(level + 1); + return NULL; + } + CHILL_ERROR("level %d type %s, returning NULL\n", level, getTypeString()); + exit(-1); + return NULL; +} + |