From f329ee2b4cfdde656d2fe30f2a2789d8a3774203 Mon Sep 17 00:00:00 2001 From: Tuowen Zhao Date: Thu, 6 Oct 2016 16:07:35 -0600 Subject: cleanup --- src/ast/node.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/ast/node.cpp') 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; +} + -- cgit v1.2.3-70-g09d2