@Override public boolean accept(ASTVisitor action) { N stack = null; ICPPASTIfStatement stmt = this; loop: for (; ; ) { if (action.shouldVisitStatements) { switch (action.visit(stmt)) { case ASTVisitor.PROCESS_ABORT: return false; case ASTVisitor.PROCESS_SKIP: stmt = null; break loop; default: break; } } if (!((CPPASTIfStatement) stmt).acceptByAttributeSpecifiers(action)) return false; IASTNode child = stmt.getConditionExpression(); if (child != null && !child.accept(action)) return false; child = stmt.getConditionDeclaration(); if (child != null && !child.accept(action)) return false; child = stmt.getThenClause(); if (child != null && !child.accept(action)) return false; child = stmt.getElseClause(); if (child instanceof ICPPASTIfStatement) { if (action.shouldVisitStatements) { N n = new N(stmt); n.fNext = stack; stack = n; } stmt = (ICPPASTIfStatement) child; } else { if (child != null && !child.accept(action)) return false; break loop; } } if (action.shouldVisitStatements) { if (stmt != null && action.leave(stmt) == ASTVisitor.PROCESS_ABORT) return false; while (stack != null) { if (action.leave(stack.fIfStatement) == ASTVisitor.PROCESS_ABORT) return false; stack = stack.fNext; } } return true; }