Introduced ASTVisitor::endVisit(ast node)

This commit is contained in:
Roberto Raggi
2009-02-09 14:58:13 +01:00
parent 7e5bb9cd36
commit cd9e752ae4
4 changed files with 231 additions and 2 deletions

View File

@@ -430,6 +430,7 @@ void AttributeSpecifierAST::accept0(ASTVisitor *visitor)
for (AttributeAST *attr = attributes; attr; attr = attr->next) for (AttributeAST *attr = attributes; attr; attr = attr->next)
accept(attr, visitor); accept(attr, visitor);
} }
visitor->endVisit(this);
} }
unsigned AttributeAST::firstToken() const unsigned AttributeAST::firstToken() const
@@ -478,6 +479,7 @@ void AttributeAST::accept0(ASTVisitor *visitor)
for (ExpressionListAST *it = expression_list; it; it = it->next) for (ExpressionListAST *it = expression_list; it; it = it->next)
accept(it->expression, visitor); accept(it->expression, visitor);
} }
visitor->endVisit(this);
} }
AccessDeclarationAST *AccessDeclarationAST::clone(MemoryPool *pool) const AccessDeclarationAST *AccessDeclarationAST::clone(MemoryPool *pool) const
@@ -493,6 +495,7 @@ void AccessDeclarationAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned AccessDeclarationAST::firstToken() const unsigned AccessDeclarationAST::firstToken() const
@@ -524,6 +527,7 @@ void ArrayAccessAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ArrayAccessAST::firstToken() const unsigned ArrayAccessAST::firstToken() const
@@ -555,6 +559,7 @@ void ArrayDeclaratorAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(this->expression, visitor); accept(this->expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ArrayDeclaratorAST::firstToken() const unsigned ArrayDeclaratorAST::firstToken() const
@@ -587,6 +592,7 @@ void ArrayInitializerAST::accept0(ASTVisitor *visitor)
for (ExpressionListAST *expr = expression_list; expr; expr = expr->next) for (ExpressionListAST *expr = expression_list; expr; expr = expr->next)
accept(expr->expression, visitor); accept(expr->expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ArrayInitializerAST::firstToken() const unsigned ArrayInitializerAST::firstToken() const
@@ -623,6 +629,7 @@ void AsmDefinitionAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
// ### accept the asm operand list. // ### accept the asm operand list.
} }
visitor->endVisit(this);
} }
unsigned AsmDefinitionAST::firstToken() const unsigned AsmDefinitionAST::firstToken() const
@@ -660,6 +667,7 @@ void BaseSpecifierAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(name, visitor); accept(name, visitor);
} }
visitor->endVisit(this);
} }
unsigned BaseSpecifierAST::firstToken() const unsigned BaseSpecifierAST::firstToken() const
@@ -713,6 +721,7 @@ void QtMethodAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(declarator, visitor); accept(declarator, visitor);
} }
visitor->endVisit(this);
} }
BinaryExpressionAST *BinaryExpressionAST::clone(MemoryPool *pool) const BinaryExpressionAST *BinaryExpressionAST::clone(MemoryPool *pool) const
@@ -732,6 +741,7 @@ void BinaryExpressionAST::accept0(ASTVisitor *visitor)
accept(left_expression, visitor); accept(left_expression, visitor);
accept(right_expression, visitor); accept(right_expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned BinaryExpressionAST::firstToken() const unsigned BinaryExpressionAST::firstToken() const
@@ -759,6 +769,7 @@ void BoolLiteralAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned BoolLiteralAST::firstToken() const unsigned BoolLiteralAST::firstToken() const
@@ -789,6 +800,7 @@ void CompoundLiteralAST::accept0(ASTVisitor *visitor)
accept(type_id, visitor); accept(type_id, visitor);
accept(initializer, visitor); accept(initializer, visitor);
} }
visitor->endVisit(this);
} }
unsigned CompoundLiteralAST::firstToken() const unsigned CompoundLiteralAST::firstToken() const
@@ -819,6 +831,7 @@ void BreakStatementAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned BreakStatementAST::firstToken() const unsigned BreakStatementAST::firstToken() const
@@ -850,6 +863,7 @@ void CallAST::accept0(ASTVisitor *visitor)
expr; expr = expr->next) expr; expr = expr->next)
accept(expr->expression, visitor); accept(expr->expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned CallAST::firstToken() const unsigned CallAST::firstToken() const
@@ -884,6 +898,7 @@ void CaseStatementAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned CaseStatementAST::firstToken() const unsigned CaseStatementAST::firstToken() const
@@ -918,6 +933,7 @@ void CastExpressionAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned CastExpressionAST::firstToken() const unsigned CastExpressionAST::firstToken() const
@@ -957,6 +973,7 @@ void CatchClauseAST::accept0(ASTVisitor *visitor)
accept(exception_declaration, visitor); accept(exception_declaration, visitor);
accept(statement, visitor); accept(statement, visitor);
} }
visitor->endVisit(this);
} }
unsigned CatchClauseAST::firstToken() const unsigned CatchClauseAST::firstToken() const
@@ -1009,6 +1026,7 @@ void ClassSpecifierAST::accept0(ASTVisitor *visitor)
for (DeclarationAST *decl = member_specifiers; decl; decl = decl->next) for (DeclarationAST *decl = member_specifiers; decl; decl = decl->next)
accept(decl, visitor); accept(decl, visitor);
} }
visitor->endVisit(this);
} }
unsigned ClassSpecifierAST::firstToken() const unsigned ClassSpecifierAST::firstToken() const
@@ -1064,6 +1082,7 @@ void CompoundStatementAST::accept0(ASTVisitor *visitor)
for (StatementAST *stmt = statements; stmt; stmt = stmt->next) for (StatementAST *stmt = statements; stmt; stmt = stmt->next)
accept(stmt, visitor); accept(stmt, visitor);
} }
visitor->endVisit(this);
} }
unsigned CompoundStatementAST::firstToken() const unsigned CompoundStatementAST::firstToken() const
@@ -1101,6 +1120,7 @@ void ConditionAST::accept0(ASTVisitor *visitor)
accept(spec, visitor); accept(spec, visitor);
accept(declarator, visitor); accept(declarator, visitor);
} }
visitor->endVisit(this);
} }
unsigned ConditionAST::firstToken() const unsigned ConditionAST::firstToken() const
@@ -1146,6 +1166,7 @@ void ConditionalExpressionAST::accept0(ASTVisitor *visitor)
accept(left_expression, visitor); accept(left_expression, visitor);
accept(right_expression, visitor); accept(right_expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ConditionalExpressionAST::firstToken() const unsigned ConditionalExpressionAST::firstToken() const
@@ -1181,6 +1202,7 @@ void ContinueStatementAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned ContinueStatementAST::firstToken() const unsigned ContinueStatementAST::firstToken() const
@@ -1215,6 +1237,7 @@ void ConversionFunctionIdAST::accept0(ASTVisitor *visitor)
ptr_op = static_cast<PtrOperatorAST *>(ptr_op->next)) ptr_op = static_cast<PtrOperatorAST *>(ptr_op->next))
accept(ptr_op, visitor); accept(ptr_op, visitor);
} }
visitor->endVisit(this);
} }
unsigned ConversionFunctionIdAST::firstToken() const unsigned ConversionFunctionIdAST::firstToken() const
@@ -1258,6 +1281,7 @@ void CppCastExpressionAST::accept0(ASTVisitor *visitor)
accept(type_id, visitor); accept(type_id, visitor);
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned CppCastExpressionAST::firstToken() const unsigned CppCastExpressionAST::firstToken() const
@@ -1298,6 +1322,7 @@ void CtorInitializerAST::accept0(ASTVisitor *visitor)
mem_init; mem_init = mem_init->next) mem_init; mem_init = mem_init->next)
accept(mem_init, visitor); accept(mem_init, visitor);
} }
visitor->endVisit(this);
} }
unsigned CtorInitializerAST::firstToken() const unsigned CtorInitializerAST::firstToken() const
@@ -1343,6 +1368,7 @@ void DeclaratorAST::accept0(ASTVisitor *visitor)
accept(attributes, visitor); accept(attributes, visitor);
accept(initializer, visitor); accept(initializer, visitor);
} }
visitor->endVisit(this);
} }
unsigned DeclaratorAST::firstToken() const unsigned DeclaratorAST::firstToken() const
@@ -1401,6 +1427,7 @@ void DeclarationStatementAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(declaration, visitor); accept(declaration, visitor);
} }
visitor->endVisit(this);
} }
unsigned DeclarationStatementAST::firstToken() const unsigned DeclarationStatementAST::firstToken() const
@@ -1426,6 +1453,7 @@ void DeclaratorIdAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(name, visitor); accept(name, visitor);
} }
visitor->endVisit(this);
} }
unsigned DeclaratorIdAST::firstToken() const unsigned DeclaratorIdAST::firstToken() const
@@ -1454,6 +1482,7 @@ void DeclaratorListAST::accept0(ASTVisitor *visitor)
for (DeclaratorListAST *it = this; it; it = it->next) for (DeclaratorListAST *it = this; it; it = it->next)
accept(it->declarator, visitor); accept(it->declarator, visitor);
} }
visitor->endVisit(this);
} }
unsigned DeclaratorListAST::firstToken() const unsigned DeclaratorListAST::firstToken() const
@@ -1487,6 +1516,7 @@ void DeleteExpressionAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned DeleteExpressionAST::firstToken() const unsigned DeleteExpressionAST::firstToken() const
@@ -1521,6 +1551,7 @@ void DestructorNameAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned DestructorNameAST::firstToken() const unsigned DestructorNameAST::firstToken() const
@@ -1556,6 +1587,7 @@ void DoStatementAST::accept0(ASTVisitor *visitor)
accept(statement, visitor); accept(statement, visitor);
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned DoStatementAST::firstToken() const unsigned DoStatementAST::firstToken() const
@@ -1594,6 +1626,7 @@ void ElaboratedTypeSpecifierAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(name, visitor); accept(name, visitor);
} }
visitor->endVisit(this);
} }
unsigned ElaboratedTypeSpecifierAST::firstToken() const unsigned ElaboratedTypeSpecifierAST::firstToken() const
@@ -1619,6 +1652,7 @@ void EmptyDeclarationAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned EmptyDeclarationAST::firstToken() const unsigned EmptyDeclarationAST::firstToken() const
@@ -1652,6 +1686,7 @@ void EnumSpecifierAST::accept0(ASTVisitor *visitor)
enumerator = enumerator->next) enumerator = enumerator->next)
accept(enumerator, visitor); accept(enumerator, visitor);
} }
visitor->endVisit(this);
} }
unsigned EnumSpecifierAST::firstToken() const unsigned EnumSpecifierAST::firstToken() const
@@ -1694,6 +1729,7 @@ void EnumeratorAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned EnumeratorAST::firstToken() const unsigned EnumeratorAST::firstToken() const
@@ -1728,6 +1764,7 @@ void ExceptionDeclarationAST::accept0(ASTVisitor *visitor)
accept(spec, visitor); accept(spec, visitor);
accept(declarator, visitor); accept(declarator, visitor);
} }
visitor->endVisit(this);
} }
unsigned ExceptionDeclarationAST::firstToken() const unsigned ExceptionDeclarationAST::firstToken() const
@@ -1771,6 +1808,7 @@ void ExceptionSpecificationAST::accept0(ASTVisitor *visitor)
type_id = type_id->next) type_id = type_id->next)
accept(type_id->expression, visitor); accept(type_id->expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ExceptionSpecificationAST::firstToken() const unsigned ExceptionSpecificationAST::firstToken() const
@@ -1808,9 +1846,12 @@ ExpressionListAST *ExpressionListAST::clone(MemoryPool *pool) const
void ExpressionListAST::accept0(ASTVisitor *visitor) void ExpressionListAST::accept0(ASTVisitor *visitor)
{ {
for (const ExpressionListAST *it = this; it; it = it->next) { if (visitor->visit(this)) {
accept(it->expression, visitor); for (const ExpressionListAST *it = this; it; it = it->next) {
accept(it->expression, visitor);
}
} }
visitor->endVisit(this);
} }
unsigned ExpressionListAST::firstToken() const unsigned ExpressionListAST::firstToken() const
@@ -1843,6 +1884,7 @@ void ExpressionOrDeclarationStatementAST::accept0(ASTVisitor *visitor)
accept(declaration, visitor); accept(declaration, visitor);
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ExpressionOrDeclarationStatementAST::firstToken() const unsigned ExpressionOrDeclarationStatementAST::firstToken() const
@@ -1869,6 +1911,7 @@ void ExpressionStatementAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ExpressionStatementAST::firstToken() const unsigned ExpressionStatementAST::firstToken() const
@@ -1914,6 +1957,7 @@ void ForStatementAST::accept0(ASTVisitor *visitor)
accept(expression, visitor); accept(expression, visitor);
accept(statement, visitor); accept(statement, visitor);
} }
visitor->endVisit(this);
} }
unsigned ForStatementAST::firstToken() const unsigned ForStatementAST::firstToken() const
@@ -1959,6 +2003,7 @@ void FunctionDeclaratorAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned FunctionDeclaratorAST::firstToken() const unsigned FunctionDeclaratorAST::firstToken() const
@@ -2008,6 +2053,7 @@ void FunctionDefinitionAST::accept0(ASTVisitor *visitor)
accept(ctor_initializer, visitor); accept(ctor_initializer, visitor);
accept(function_body, visitor); accept(function_body, visitor);
} }
visitor->endVisit(this);
} }
unsigned FunctionDefinitionAST::firstToken() const unsigned FunctionDefinitionAST::firstToken() const
@@ -2052,6 +2098,7 @@ void GotoStatementAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned GotoStatementAST::firstToken() const unsigned GotoStatementAST::firstToken() const
@@ -2093,6 +2140,7 @@ void IfStatementAST::accept0(ASTVisitor *visitor)
accept(statement, visitor); accept(statement, visitor);
accept(else_statement, visitor); accept(else_statement, visitor);
} }
visitor->endVisit(this);
} }
unsigned IfStatementAST::firstToken() const unsigned IfStatementAST::firstToken() const
@@ -2132,6 +2180,7 @@ void LabeledStatementAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(statement, visitor); accept(statement, visitor);
} }
visitor->endVisit(this);
} }
unsigned LabeledStatementAST::firstToken() const unsigned LabeledStatementAST::firstToken() const
@@ -2165,6 +2214,7 @@ void LinkageBodyAST::accept0(ASTVisitor *visitor)
decl = decl->next) decl = decl->next)
accept(decl, visitor); accept(decl, visitor);
} }
visitor->endVisit(this);
} }
unsigned LinkageBodyAST::firstToken() const unsigned LinkageBodyAST::firstToken() const
@@ -2200,6 +2250,7 @@ void LinkageSpecificationAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(declaration, visitor); accept(declaration, visitor);
} }
visitor->endVisit(this);
} }
unsigned LinkageSpecificationAST::firstToken() const unsigned LinkageSpecificationAST::firstToken() const
@@ -2235,6 +2286,7 @@ void MemInitializerAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned MemInitializerAST::firstToken() const unsigned MemInitializerAST::firstToken() const
@@ -2268,6 +2320,7 @@ void MemberAccessAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(member_name, visitor); accept(member_name, visitor);
} }
visitor->endVisit(this);
} }
unsigned MemberAccessAST::firstToken() const unsigned MemberAccessAST::firstToken() const
@@ -2297,6 +2350,7 @@ void NamedTypeSpecifierAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(name, visitor); accept(name, visitor);
} }
visitor->endVisit(this);
} }
unsigned NamedTypeSpecifierAST::firstToken() const unsigned NamedTypeSpecifierAST::firstToken() const
@@ -2329,6 +2383,7 @@ void NamespaceAST::accept0(ASTVisitor *visitor)
} }
accept(linkage_body, visitor); accept(linkage_body, visitor);
} }
visitor->endVisit(this);
} }
unsigned NamespaceAST::firstToken() const unsigned NamespaceAST::firstToken() const
@@ -2369,6 +2424,7 @@ void NamespaceAliasDefinitionAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(name, visitor); accept(name, visitor);
} }
visitor->endVisit(this);
} }
unsigned NamespaceAliasDefinitionAST::firstToken() const unsigned NamespaceAliasDefinitionAST::firstToken() const
@@ -2404,6 +2460,7 @@ void NestedDeclaratorAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(declarator, visitor); accept(declarator, visitor);
} }
visitor->endVisit(this);
} }
unsigned NestedDeclaratorAST::firstToken() const unsigned NestedDeclaratorAST::firstToken() const
@@ -2435,6 +2492,7 @@ void NestedExpressionAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned NestedExpressionAST::firstToken() const unsigned NestedExpressionAST::firstToken() const
@@ -2468,6 +2526,7 @@ void NestedNameSpecifierAST::accept0(ASTVisitor *visitor)
accept(class_or_namespace_name, visitor); accept(class_or_namespace_name, visitor);
accept(next, visitor); // ### I'm not 100% sure about this. accept(next, visitor); // ### I'm not 100% sure about this.
} }
visitor->endVisit(this);
} }
unsigned NestedNameSpecifierAST::firstToken() const unsigned NestedNameSpecifierAST::firstToken() const
@@ -2502,6 +2561,7 @@ void NewDeclaratorAST::accept0(ASTVisitor *visitor)
accept(declarator, visitor); accept(declarator, visitor);
} }
visitor->endVisit(this);
} }
unsigned NewDeclaratorAST::firstToken() const unsigned NewDeclaratorAST::firstToken() const
@@ -2546,6 +2606,7 @@ void NewExpressionAST::accept0(ASTVisitor *visitor)
accept(new_type_id, visitor); accept(new_type_id, visitor);
accept(new_initializer, visitor); accept(new_initializer, visitor);
} }
visitor->endVisit(this);
} }
unsigned NewExpressionAST::firstToken() const unsigned NewExpressionAST::firstToken() const
@@ -2588,6 +2649,7 @@ void NewInitializerAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned NewInitializerAST::firstToken() const unsigned NewInitializerAST::firstToken() const
@@ -2634,6 +2696,7 @@ void NewTypeIdAST::accept0(ASTVisitor *visitor)
accept(new_initializer, visitor); accept(new_initializer, visitor);
accept(new_declarator, visitor); accept(new_declarator, visitor);
} }
visitor->endVisit(this);
} }
unsigned NewTypeIdAST::firstToken() const unsigned NewTypeIdAST::firstToken() const
@@ -2667,6 +2730,7 @@ void NumericLiteralAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned NumericLiteralAST::firstToken() const unsigned NumericLiteralAST::firstToken() const
@@ -2692,6 +2756,7 @@ void OperatorAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned OperatorAST::firstToken() const unsigned OperatorAST::firstToken() const
@@ -2722,6 +2787,7 @@ void OperatorFunctionIdAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(op, visitor); accept(op, visitor);
} }
visitor->endVisit(this);
} }
unsigned OperatorFunctionIdAST::firstToken() const unsigned OperatorFunctionIdAST::firstToken() const
@@ -2757,6 +2823,7 @@ void ParameterDeclarationAST::accept0(ASTVisitor *visitor)
accept(declarator, visitor); accept(declarator, visitor);
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ParameterDeclarationAST::firstToken() const unsigned ParameterDeclarationAST::firstToken() const
@@ -2796,6 +2863,7 @@ void ParameterDeclarationClauseAST::accept0(ASTVisitor *visitor)
param = param->next) param = param->next)
accept(param, visitor); accept(param, visitor);
} }
visitor->endVisit(this);
} }
unsigned ParameterDeclarationClauseAST::firstToken() const unsigned ParameterDeclarationClauseAST::firstToken() const
@@ -2828,6 +2896,7 @@ void PointerAST::accept0(ASTVisitor *visitor)
spec = spec->next) spec = spec->next)
accept(spec, visitor); accept(spec, visitor);
} }
visitor->endVisit(this);
} }
unsigned PointerAST::firstToken() const unsigned PointerAST::firstToken() const
@@ -2864,6 +2933,7 @@ void PointerToMemberAST::accept0(ASTVisitor *visitor)
spec = spec->next) spec = spec->next)
accept(spec, visitor); accept(spec, visitor);
} }
visitor->endVisit(this);
} }
unsigned PointerToMemberAST::firstToken() const unsigned PointerToMemberAST::firstToken() const
@@ -2907,6 +2977,7 @@ void PostIncrDecrAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned PostIncrDecrAST::firstToken() const unsigned PostIncrDecrAST::firstToken() const
@@ -2936,6 +3007,7 @@ void PostfixExpressionAST::accept0(ASTVisitor *visitor)
for (PostfixAST *fx = postfix_expressions; fx; fx = fx->next) for (PostfixAST *fx = postfix_expressions; fx; fx = fx->next)
accept(fx, visitor); accept(fx, visitor);
} }
visitor->endVisit(this);
} }
unsigned PostfixExpressionAST::firstToken() const unsigned PostfixExpressionAST::firstToken() const
@@ -2969,6 +3041,7 @@ void QualifiedNameAST::accept0(ASTVisitor *visitor)
accept(nested_name_specifier, visitor); accept(nested_name_specifier, visitor);
accept(unqualified_name, visitor); accept(unqualified_name, visitor);
} }
visitor->endVisit(this);
} }
unsigned QualifiedNameAST::firstToken() const unsigned QualifiedNameAST::firstToken() const
@@ -3007,6 +3080,7 @@ void ReferenceAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned ReferenceAST::firstToken() const unsigned ReferenceAST::firstToken() const
@@ -3034,6 +3108,7 @@ void ReturnStatementAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ReturnStatementAST::firstToken() const unsigned ReturnStatementAST::firstToken() const
@@ -3069,6 +3144,7 @@ void SimpleDeclarationAST::accept0(ASTVisitor *visitor)
accept(spec, visitor); accept(spec, visitor);
accept(declarators, visitor); accept(declarators, visitor);
} }
visitor->endVisit(this);
} }
unsigned SimpleDeclarationAST::firstToken() const unsigned SimpleDeclarationAST::firstToken() const
@@ -3109,6 +3185,7 @@ void SimpleNameAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned SimpleNameAST::firstToken() const unsigned SimpleNameAST::firstToken() const
@@ -3125,6 +3202,7 @@ void SimpleSpecifierAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
SimpleSpecifierAST *SimpleSpecifierAST::clone(MemoryPool *pool) const SimpleSpecifierAST *SimpleSpecifierAST::clone(MemoryPool *pool) const
@@ -3162,6 +3240,7 @@ void TypeofSpecifierAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned TypeofSpecifierAST::firstToken() const unsigned TypeofSpecifierAST::firstToken() const
@@ -3190,6 +3269,7 @@ void SizeofExpressionAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned SizeofExpressionAST::firstToken() const unsigned SizeofExpressionAST::firstToken() const
@@ -3218,6 +3298,7 @@ void StringLiteralAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(next, visitor); accept(next, visitor);
} }
visitor->endVisit(this);
} }
unsigned StringLiteralAST::firstToken() const unsigned StringLiteralAST::firstToken() const
@@ -3251,6 +3332,7 @@ void SwitchStatementAST::accept0(ASTVisitor *visitor)
accept(condition, visitor); accept(condition, visitor);
accept(statement, visitor); accept(statement, visitor);
} }
visitor->endVisit(this);
} }
unsigned SwitchStatementAST::firstToken() const unsigned SwitchStatementAST::firstToken() const
@@ -3287,6 +3369,7 @@ void TemplateArgumentListAST::accept0(ASTVisitor *visitor)
accept(template_argument, visitor); accept(template_argument, visitor);
accept(next, visitor); accept(next, visitor);
} }
visitor->endVisit(this);
} }
unsigned TemplateArgumentListAST::firstToken() const unsigned TemplateArgumentListAST::firstToken() const
@@ -3325,6 +3408,7 @@ void TemplateDeclarationAST::accept0(ASTVisitor *visitor)
accept(param, visitor); accept(param, visitor);
accept(declaration, visitor); accept(declaration, visitor);
} }
visitor->endVisit(this);
} }
unsigned TemplateDeclarationAST::firstToken() const unsigned TemplateDeclarationAST::firstToken() const
@@ -3374,6 +3458,7 @@ void TemplateIdAST::accept0(ASTVisitor *visitor)
accept(it, visitor); accept(it, visitor);
} }
} }
visitor->endVisit(this);
} }
unsigned TemplateIdAST::firstToken() const unsigned TemplateIdAST::firstToken() const
@@ -3418,6 +3503,7 @@ void TemplateTypeParameterAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned TemplateTypeParameterAST::firstToken() const unsigned TemplateTypeParameterAST::firstToken() const
@@ -3460,6 +3546,7 @@ void ThisExpressionAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned ThisExpressionAST::firstToken() const unsigned ThisExpressionAST::firstToken() const
@@ -3486,6 +3573,7 @@ void ThrowExpressionAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned ThrowExpressionAST::firstToken() const unsigned ThrowExpressionAST::firstToken() const
@@ -3515,6 +3603,7 @@ void TranslationUnitAST::accept0(ASTVisitor *visitor)
decl = decl->next) decl = decl->next)
accept(decl, visitor); accept(decl, visitor);
} }
visitor->endVisit(this);
} }
unsigned TranslationUnitAST::firstToken() const unsigned TranslationUnitAST::firstToken() const
@@ -3548,6 +3637,7 @@ void TryBlockStatementAST::accept0(ASTVisitor *visitor)
accept(statement, visitor); accept(statement, visitor);
accept(catch_clause_seq, visitor); accept(catch_clause_seq, visitor);
} }
visitor->endVisit(this);
} }
unsigned TryBlockStatementAST::firstToken() const unsigned TryBlockStatementAST::firstToken() const
@@ -3589,6 +3679,7 @@ void TypeConstructorCallAST::accept0(ASTVisitor *visitor)
expr = expr->next) expr = expr->next)
accept(expr->expression, visitor); accept(expr->expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned TypeConstructorCallAST::firstToken() const unsigned TypeConstructorCallAST::firstToken() const
@@ -3625,6 +3716,7 @@ void TypeIdAST::accept0(ASTVisitor *visitor)
accept(spec, visitor); accept(spec, visitor);
accept(declarator, visitor); accept(declarator, visitor);
} }
visitor->endVisit(this);
} }
unsigned TypeIdAST::firstToken() const unsigned TypeIdAST::firstToken() const
@@ -3661,6 +3753,7 @@ void TypeidExpressionAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned TypeidExpressionAST::firstToken() const unsigned TypeidExpressionAST::firstToken() const
@@ -3701,6 +3794,7 @@ void TypenameCallExpressionAST::accept0(ASTVisitor *visitor)
expr = expr->next) expr = expr->next)
accept(expr->expression, visitor); accept(expr->expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned TypenameCallExpressionAST::firstToken() const unsigned TypenameCallExpressionAST::firstToken() const
@@ -3744,6 +3838,7 @@ void TypenameTypeParameterAST::accept0(ASTVisitor *visitor)
accept(name, visitor); accept(name, visitor);
accept(type_id, visitor); accept(type_id, visitor);
} }
visitor->endVisit(this);
} }
unsigned TypenameTypeParameterAST::firstToken() const unsigned TypenameTypeParameterAST::firstToken() const
@@ -3776,6 +3871,7 @@ void UnaryExpressionAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(expression, visitor); accept(expression, visitor);
} }
visitor->endVisit(this);
} }
unsigned UnaryExpressionAST::firstToken() const unsigned UnaryExpressionAST::firstToken() const
@@ -3806,6 +3902,7 @@ void UsingAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(name, visitor); accept(name, visitor);
} }
visitor->endVisit(this);
} }
unsigned UsingAST::firstToken() const unsigned UsingAST::firstToken() const
@@ -3840,6 +3937,7 @@ void UsingDirectiveAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) { if (visitor->visit(this)) {
accept(name, visitor); accept(name, visitor);
} }
visitor->endVisit(this);
} }
unsigned UsingDirectiveAST::firstToken() const unsigned UsingDirectiveAST::firstToken() const
@@ -3877,6 +3975,7 @@ void WhileStatementAST::accept0(ASTVisitor *visitor)
accept(condition, visitor); accept(condition, visitor);
accept(statement, visitor); accept(statement, visitor);
} }
visitor->endVisit(this);
} }
unsigned WhileStatementAST::firstToken() const unsigned WhileStatementAST::firstToken() const
@@ -3927,6 +4026,7 @@ void IdentifierListAST::accept0(ASTVisitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {
} }
visitor->endVisit(this);
} }
unsigned ObjCClassDeclarationAST::firstToken() const unsigned ObjCClassDeclarationAST::firstToken() const
@@ -3973,6 +4073,7 @@ void ObjCClassDeclarationAST::accept0(ASTVisitor *visitor)
accept(it, visitor); accept(it, visitor);
} }
} }
visitor->endVisit(this);
} }

View File

@@ -573,6 +573,9 @@ public:
StatementAST *statements; StatementAST *statements;
unsigned rbrace_token; unsigned rbrace_token;
public: // annotations
Block *symbol;
public: public:
virtual unsigned firstToken() const; virtual unsigned firstToken() const;
virtual unsigned lastToken() const; virtual unsigned lastToken() const;
@@ -966,6 +969,9 @@ public:
unsigned rparen_token; unsigned rparen_token;
StatementAST *statement; StatementAST *statement;
public: // annotations
Block *symbol;
public: public:
virtual unsigned firstToken() const; virtual unsigned firstToken() const;
virtual unsigned lastToken() const; virtual unsigned lastToken() const;
@@ -987,6 +993,9 @@ public:
unsigned else_token; unsigned else_token;
StatementAST *else_statement; StatementAST *else_statement;
public: // annotations
Block *symbol;
public: public:
virtual unsigned firstToken() const; virtual unsigned firstToken() const;
virtual unsigned lastToken() const; virtual unsigned lastToken() const;
@@ -1746,6 +1755,9 @@ public:
unsigned rparen_token; unsigned rparen_token;
StatementAST *statement; StatementAST *statement;
public: // annotations
Block *symbol;
public: public:
virtual unsigned firstToken() const; virtual unsigned firstToken() const;
virtual unsigned lastToken() const; virtual unsigned lastToken() const;
@@ -1850,6 +1862,9 @@ public:
StatementAST *statement; StatementAST *statement;
CatchClauseAST *next; CatchClauseAST *next;
public: // annotations
Block *symbol;
public: public:
virtual unsigned firstToken() const; virtual unsigned firstToken() const;
virtual unsigned lastToken() const; virtual unsigned lastToken() const;
@@ -1989,6 +2004,9 @@ public:
unsigned rparen_token; unsigned rparen_token;
StatementAST *statement; StatementAST *statement;
public: // annotations
Block *symbol;
public: public:
virtual unsigned firstToken() const; virtual unsigned firstToken() const;
virtual unsigned lastToken() const; virtual unsigned lastToken() const;

View File

@@ -190,6 +190,110 @@ public:
virtual bool visit(IdentifierListAST *) { return true; } virtual bool visit(IdentifierListAST *) { return true; }
virtual bool visit(ObjCClassDeclarationAST *) { return true; } virtual bool visit(ObjCClassDeclarationAST *) { return true; }
virtual void endVisit(AccessDeclarationAST *) { }
virtual void endVisit(ArrayAccessAST *) { }
virtual void endVisit(ArrayDeclaratorAST *) { }
virtual void endVisit(ArrayInitializerAST *) { }
virtual void endVisit(AsmDefinitionAST *) { }
virtual void endVisit(AttributeSpecifierAST *) { }
virtual void endVisit(AttributeAST *) { }
virtual void endVisit(BaseSpecifierAST *) { }
virtual void endVisit(BinaryExpressionAST *) { }
virtual void endVisit(BoolLiteralAST *) { }
virtual void endVisit(BreakStatementAST *) { }
virtual void endVisit(CallAST *) { }
virtual void endVisit(CaseStatementAST *) { }
virtual void endVisit(CastExpressionAST *) { }
virtual void endVisit(CatchClauseAST *) { }
virtual void endVisit(ClassSpecifierAST *) { }
virtual void endVisit(CompoundLiteralAST *) { }
virtual void endVisit(CompoundStatementAST *) { }
virtual void endVisit(ConditionAST *) { }
virtual void endVisit(ConditionalExpressionAST *) { }
virtual void endVisit(ContinueStatementAST *) { }
virtual void endVisit(ConversionFunctionIdAST *) { }
virtual void endVisit(CppCastExpressionAST *) { }
virtual void endVisit(CtorInitializerAST *) { }
virtual void endVisit(DeclaratorAST *) { }
virtual void endVisit(DeclarationStatementAST *) { }
virtual void endVisit(DeclaratorIdAST *) { }
virtual void endVisit(DeclaratorListAST *) { }
virtual void endVisit(DeleteExpressionAST *) { }
virtual void endVisit(DestructorNameAST *) { }
virtual void endVisit(DoStatementAST *) { }
virtual void endVisit(ElaboratedTypeSpecifierAST *) { }
virtual void endVisit(EmptyDeclarationAST *) { }
virtual void endVisit(EnumSpecifierAST *) { }
virtual void endVisit(EnumeratorAST *) { }
virtual void endVisit(ExceptionDeclarationAST *) { }
virtual void endVisit(ExceptionSpecificationAST *) { }
virtual void endVisit(ExpressionListAST *) { }
virtual void endVisit(ExpressionOrDeclarationStatementAST *) { }
virtual void endVisit(ExpressionStatementAST *) { }
virtual void endVisit(ForStatementAST *) { }
virtual void endVisit(FunctionDeclaratorAST *) { }
virtual void endVisit(FunctionDefinitionAST *) { }
virtual void endVisit(GotoStatementAST *) { }
virtual void endVisit(IfStatementAST *) { }
virtual void endVisit(LabeledStatementAST *) { }
virtual void endVisit(LinkageBodyAST *) { }
virtual void endVisit(LinkageSpecificationAST *) { }
virtual void endVisit(MemInitializerAST *) { }
virtual void endVisit(MemberAccessAST *) { }
virtual void endVisit(NamedTypeSpecifierAST *) { }
virtual void endVisit(NamespaceAST *) { }
virtual void endVisit(NamespaceAliasDefinitionAST *) { }
virtual void endVisit(NestedDeclaratorAST *) { }
virtual void endVisit(NestedExpressionAST *) { }
virtual void endVisit(NestedNameSpecifierAST *) { }
virtual void endVisit(NewDeclaratorAST *) { }
virtual void endVisit(NewExpressionAST *) { }
virtual void endVisit(NewInitializerAST *) { }
virtual void endVisit(NewTypeIdAST *) { }
virtual void endVisit(NumericLiteralAST *) { }
virtual void endVisit(OperatorAST *) { }
virtual void endVisit(OperatorFunctionIdAST *) { }
virtual void endVisit(ParameterDeclarationAST *) { }
virtual void endVisit(ParameterDeclarationClauseAST *) { }
virtual void endVisit(PointerAST *) { }
virtual void endVisit(PointerToMemberAST *) { }
virtual void endVisit(PostIncrDecrAST *) { }
virtual void endVisit(PostfixExpressionAST *) { }
virtual void endVisit(QualifiedNameAST *) { }
virtual void endVisit(ReferenceAST *) { }
virtual void endVisit(ReturnStatementAST *) { }
virtual void endVisit(SimpleDeclarationAST *) { }
virtual void endVisit(SimpleNameAST *) { }
virtual void endVisit(SimpleSpecifierAST *) { }
virtual void endVisit(SizeofExpressionAST *) { }
virtual void endVisit(StringLiteralAST *) { }
virtual void endVisit(SwitchStatementAST *) { }
virtual void endVisit(TemplateArgumentListAST *) { }
virtual void endVisit(TemplateDeclarationAST *) { }
virtual void endVisit(TemplateIdAST *) { }
virtual void endVisit(TemplateTypeParameterAST *) { }
virtual void endVisit(ThisExpressionAST *) { }
virtual void endVisit(ThrowExpressionAST *) { }
virtual void endVisit(TranslationUnitAST *) { }
virtual void endVisit(TryBlockStatementAST *) { }
virtual void endVisit(TypeConstructorCallAST *) { }
virtual void endVisit(TypeIdAST *) { }
virtual void endVisit(TypeidExpressionAST *) { }
virtual void endVisit(TypeofSpecifierAST *) { }
virtual void endVisit(TypenameCallExpressionAST *) { }
virtual void endVisit(TypenameTypeParameterAST *) { }
virtual void endVisit(UnaryExpressionAST *) { }
virtual void endVisit(UsingAST *) { }
virtual void endVisit(UsingDirectiveAST *) { }
virtual void endVisit(WhileStatementAST *) { }
virtual void endVisit(QtMethodAST *) { }
// ObjC++
virtual void endVisit(IdentifierListAST *) { }
virtual void endVisit(ObjCClassDeclarationAST *) { }
private: private:
Control *_control; Control *_control;
}; };

View File

@@ -103,6 +103,7 @@ bool CheckStatement::visit(CaseStatementAST *ast)
bool CheckStatement::visit(CompoundStatementAST *ast) bool CheckStatement::visit(CompoundStatementAST *ast)
{ {
Block *block = control()->newBlock(ast->lbrace_token); Block *block = control()->newBlock(ast->lbrace_token);
ast->symbol = block;
_scope->enterSymbol(block); _scope->enterSymbol(block);
Scope *previousScope = switchScope(block->members()); Scope *previousScope = switchScope(block->members());
for (StatementAST *it = ast->statements; it; it = it->next) { for (StatementAST *it = ast->statements; it; it = it->next) {
@@ -145,6 +146,7 @@ bool CheckStatement::visit(ExpressionStatementAST *ast)
bool CheckStatement::visit(ForStatementAST *ast) bool CheckStatement::visit(ForStatementAST *ast)
{ {
Block *block = control()->newBlock(ast->for_token); Block *block = control()->newBlock(ast->for_token);
ast->symbol = block;
_scope->enterSymbol(block); _scope->enterSymbol(block);
Scope *previousScope = switchScope(block->members()); Scope *previousScope = switchScope(block->members());
semantic()->check(ast->initializer, _scope); semantic()->check(ast->initializer, _scope);
@@ -158,6 +160,7 @@ bool CheckStatement::visit(ForStatementAST *ast)
bool CheckStatement::visit(IfStatementAST *ast) bool CheckStatement::visit(IfStatementAST *ast)
{ {
Block *block = control()->newBlock(ast->if_token); Block *block = control()->newBlock(ast->if_token);
ast->symbol = block;
_scope->enterSymbol(block); _scope->enterSymbol(block);
Scope *previousScope = switchScope(block->members()); Scope *previousScope = switchScope(block->members());
FullySpecifiedType exprTy = semantic()->check(ast->condition, _scope); FullySpecifiedType exprTy = semantic()->check(ast->condition, _scope);
@@ -197,6 +200,7 @@ bool CheckStatement::visit(ReturnStatementAST *ast)
bool CheckStatement::visit(SwitchStatementAST *ast) bool CheckStatement::visit(SwitchStatementAST *ast)
{ {
Block *block = control()->newBlock(ast->switch_token); Block *block = control()->newBlock(ast->switch_token);
ast->symbol = block;
_scope->enterSymbol(block); _scope->enterSymbol(block);
Scope *previousScope = switchScope(block->members()); Scope *previousScope = switchScope(block->members());
FullySpecifiedType condTy = semantic()->check(ast->condition, _scope); FullySpecifiedType condTy = semantic()->check(ast->condition, _scope);
@@ -217,6 +221,7 @@ bool CheckStatement::visit(TryBlockStatementAST *ast)
bool CheckStatement::visit(CatchClauseAST *ast) bool CheckStatement::visit(CatchClauseAST *ast)
{ {
Block *block = control()->newBlock(ast->catch_token); Block *block = control()->newBlock(ast->catch_token);
ast->symbol = block;
_scope->enterSymbol(block); _scope->enterSymbol(block);
Scope *previousScope = switchScope(block->members()); Scope *previousScope = switchScope(block->members());
semantic()->check(ast->exception_declaration, _scope); semantic()->check(ast->exception_declaration, _scope);
@@ -228,6 +233,7 @@ bool CheckStatement::visit(CatchClauseAST *ast)
bool CheckStatement::visit(WhileStatementAST *ast) bool CheckStatement::visit(WhileStatementAST *ast)
{ {
Block *block = control()->newBlock(ast->while_token); Block *block = control()->newBlock(ast->while_token);
ast->symbol = block;
_scope->enterSymbol(block); _scope->enterSymbol(block);
Scope *previousScope = switchScope(block->members()); Scope *previousScope = switchScope(block->members());
FullySpecifiedType condTy = semantic()->check(ast->condition, _scope); FullySpecifiedType condTy = semantic()->check(ast->condition, _scope);