forked from qt-creator/qt-creator
Some cleanup in the AST nodes.
This commit is contained in:
@@ -356,10 +356,8 @@ unsigned CatchClauseAST::lastToken() const
|
||||
return statement->lastToken();
|
||||
else if (rparen_token)
|
||||
return rparen_token + 1;
|
||||
for (DeclarationAST *it = exception_declaration; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->lastToken();
|
||||
}
|
||||
if (exception_declaration)
|
||||
return exception_declaration->lastToken();
|
||||
if (lparen_token)
|
||||
return lparen_token + 1;
|
||||
|
||||
@@ -377,7 +375,7 @@ unsigned ClassSpecifierAST::lastToken() const
|
||||
if (rbrace_token)
|
||||
return rbrace_token + 1;
|
||||
|
||||
for (DeclarationAST *it = member_specifiers; it; it = it->next) {
|
||||
for (DeclarationListAST *it = member_specifiers; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->lastToken();
|
||||
}
|
||||
@@ -405,6 +403,21 @@ unsigned ClassSpecifierAST::lastToken() const
|
||||
}
|
||||
|
||||
|
||||
unsigned StatementListAST::firstToken() const
|
||||
{
|
||||
return statement->firstToken();
|
||||
}
|
||||
|
||||
unsigned StatementListAST::lastToken() const
|
||||
{
|
||||
for (const StatementListAST *it = this; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->statement->lastToken();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned CompoundStatementAST::firstToken() const
|
||||
{
|
||||
return lbrace_token;
|
||||
@@ -415,9 +428,9 @@ unsigned CompoundStatementAST::lastToken() const
|
||||
if (rbrace_token)
|
||||
return rbrace_token + 1;
|
||||
|
||||
for (StatementAST *it = statements; it ; it = it->next) {
|
||||
for (StatementListAST *it = statements; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->lastToken();
|
||||
return it->statement->lastToken();
|
||||
}
|
||||
|
||||
return lbrace_token + 1;
|
||||
@@ -540,6 +553,20 @@ unsigned CtorInitializerAST::lastToken() const
|
||||
return colon_token + 1;
|
||||
}
|
||||
|
||||
unsigned DeclarationListAST::firstToken() const
|
||||
{
|
||||
return declaration->firstToken();
|
||||
}
|
||||
|
||||
unsigned DeclarationListAST::lastToken() const
|
||||
{
|
||||
for (const DeclarationListAST *it = this; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->declaration->lastToken();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned DeclaratorAST::firstToken() const
|
||||
{
|
||||
@@ -986,7 +1013,7 @@ unsigned LinkageBodyAST::lastToken() const
|
||||
if (rbrace_token)
|
||||
return rbrace_token + 1;
|
||||
|
||||
for (DeclarationAST *it = declarations; it; it = it->next) {
|
||||
for (DeclarationListAST *it = declarations; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->lastToken();
|
||||
}
|
||||
@@ -1006,6 +1033,7 @@ unsigned LinkageSpecificationAST::lastToken() const
|
||||
return declaration->lastToken();
|
||||
else if (extern_type_token)
|
||||
return extern_type_token + 1;
|
||||
|
||||
return extern_token + 1;
|
||||
}
|
||||
|
||||
@@ -1553,7 +1581,7 @@ unsigned TemplateDeclarationAST::lastToken() const
|
||||
else if (greater_token)
|
||||
return greater_token + 1;
|
||||
|
||||
for (DeclarationAST *it = template_parameters; it; it = it->next) {
|
||||
for (DeclarationListAST *it = template_parameters; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->lastToken();
|
||||
}
|
||||
@@ -1609,9 +1637,9 @@ unsigned TemplateTypeParameterAST::lastToken() const
|
||||
else if (greater_token)
|
||||
return greater_token + 1;
|
||||
|
||||
for (DeclarationAST *it = template_parameters; it; it = it->next) {
|
||||
for (DeclarationListAST *it = template_parameters; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->lastToken();
|
||||
return it->declaration->lastToken();
|
||||
}
|
||||
|
||||
if (less_token)
|
||||
@@ -1652,7 +1680,7 @@ unsigned TranslationUnitAST::firstToken() const
|
||||
|
||||
unsigned TranslationUnitAST::lastToken() const
|
||||
{
|
||||
for (DeclarationAST *it = declarations; it; it = it->next) {
|
||||
for (DeclarationListAST *it = declarations; it; it = it->next) {
|
||||
if (! it->next)
|
||||
return it->lastToken();
|
||||
}
|
||||
|
||||
@@ -303,9 +303,6 @@ protected:
|
||||
|
||||
class CPLUSPLUS_EXPORT StatementAST: public AST
|
||||
{
|
||||
public:
|
||||
StatementAST *next;
|
||||
|
||||
public:
|
||||
virtual StatementAST *asStatement()
|
||||
{ return this; }
|
||||
@@ -324,9 +321,6 @@ public:
|
||||
|
||||
class CPLUSPLUS_EXPORT DeclarationAST: public AST
|
||||
{
|
||||
public:
|
||||
DeclarationAST *next;
|
||||
|
||||
public:
|
||||
virtual DeclarationAST *asDeclaration()
|
||||
{ return this; }
|
||||
@@ -334,6 +328,25 @@ public:
|
||||
virtual DeclarationAST *clone(MemoryPool *pool) const = 0;
|
||||
};
|
||||
|
||||
class CPLUSPLUS_EXPORT DeclarationListAST: public AST
|
||||
{
|
||||
public:
|
||||
DeclarationAST *declaration;
|
||||
DeclarationListAST *next;
|
||||
|
||||
public:
|
||||
virtual DeclarationListAST *asDeclarationList()
|
||||
{ return this; }
|
||||
|
||||
virtual unsigned firstToken() const;
|
||||
virtual unsigned lastToken() const;
|
||||
|
||||
virtual DeclarationListAST *clone(MemoryPool *pool) const;
|
||||
|
||||
protected:
|
||||
virtual void accept0(ASTVisitor *visitor);
|
||||
};
|
||||
|
||||
class CPLUSPLUS_EXPORT CoreDeclaratorAST: public AST
|
||||
{
|
||||
public:
|
||||
@@ -378,7 +391,7 @@ protected:
|
||||
virtual void accept0(ASTVisitor *visitor);
|
||||
};
|
||||
|
||||
class CPLUSPLUS_EXPORT ExpressionListAST: public ExpressionAST
|
||||
class CPLUSPLUS_EXPORT ExpressionListAST: public AST
|
||||
{
|
||||
public:
|
||||
unsigned comma_token;
|
||||
@@ -601,7 +614,7 @@ public:
|
||||
unsigned colon_token;
|
||||
BaseSpecifierAST *base_clause;
|
||||
unsigned lbrace_token;
|
||||
DeclarationAST *member_specifiers;
|
||||
DeclarationListAST *member_specifiers;
|
||||
unsigned rbrace_token;
|
||||
|
||||
public: // annotations
|
||||
@@ -641,11 +654,30 @@ protected:
|
||||
virtual void accept0(ASTVisitor *visitor);
|
||||
};
|
||||
|
||||
class CPLUSPLUS_EXPORT StatementListAST: public AST
|
||||
{
|
||||
public:
|
||||
StatementAST *statement;
|
||||
StatementListAST *next;
|
||||
|
||||
public:
|
||||
virtual StatementListAST *asStatementList()
|
||||
{ return this; }
|
||||
|
||||
virtual unsigned firstToken() const;
|
||||
virtual unsigned lastToken() const;
|
||||
|
||||
virtual StatementListAST *clone(MemoryPool *pool) const;
|
||||
|
||||
protected:
|
||||
virtual void accept0(ASTVisitor *visitor);
|
||||
};
|
||||
|
||||
class CPLUSPLUS_EXPORT CompoundStatementAST: public StatementAST
|
||||
{
|
||||
public:
|
||||
unsigned lbrace_token;
|
||||
StatementAST *statements;
|
||||
StatementListAST *statements;
|
||||
unsigned rbrace_token;
|
||||
|
||||
public: // annotations
|
||||
@@ -1201,7 +1233,7 @@ class CPLUSPLUS_EXPORT LinkageBodyAST: public DeclarationAST
|
||||
{
|
||||
public:
|
||||
unsigned lbrace_token;
|
||||
DeclarationAST *declarations;
|
||||
DeclarationListAST *declarations;
|
||||
unsigned rbrace_token;
|
||||
|
||||
public:
|
||||
@@ -1607,7 +1639,7 @@ protected:
|
||||
class CPLUSPLUS_EXPORT ParameterDeclarationClauseAST: public AST
|
||||
{
|
||||
public:
|
||||
DeclarationAST *parameter_declarations;
|
||||
DeclarationListAST *parameter_declarations;
|
||||
unsigned dot_dot_dot_token;
|
||||
|
||||
public:
|
||||
@@ -2107,7 +2139,7 @@ public:
|
||||
unsigned export_token;
|
||||
unsigned template_token;
|
||||
unsigned less_token;
|
||||
DeclarationAST *template_parameters;
|
||||
DeclarationListAST *template_parameters;
|
||||
unsigned greater_token;
|
||||
DeclarationAST *declaration;
|
||||
|
||||
@@ -2146,7 +2178,7 @@ protected:
|
||||
class CPLUSPLUS_EXPORT TranslationUnitAST: public AST
|
||||
{
|
||||
public:
|
||||
DeclarationAST *declarations;
|
||||
DeclarationListAST *declarations;
|
||||
|
||||
public:
|
||||
virtual TranslationUnitAST *asTranslationUnit()
|
||||
@@ -2255,7 +2287,7 @@ class CPLUSPLUS_EXPORT TemplateTypeParameterAST: public DeclarationAST
|
||||
public:
|
||||
unsigned template_token;
|
||||
unsigned less_token;
|
||||
DeclarationAST *template_parameters;
|
||||
DeclarationListAST *template_parameters;
|
||||
unsigned greater_token;
|
||||
unsigned class_token;
|
||||
NameAST *name;
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
**************************************************************************/
|
||||
|
||||
#include "AST.h"
|
||||
#include "ASTVisitor.h"
|
||||
|
||||
CPLUSPLUS_BEGIN_NAMESPACE
|
||||
|
||||
@@ -83,6 +84,15 @@ TypeofSpecifierAST *TypeofSpecifierAST::clone(MemoryPool *pool) const
|
||||
return ast;
|
||||
}
|
||||
|
||||
DeclarationListAST *DeclarationListAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
DeclarationListAST *ast = new (pool) DeclarationListAST;
|
||||
// copy DeclarationListAST
|
||||
if (declaration) ast->declaration = declaration->clone(pool);
|
||||
if (next) ast->next = next->clone(pool);
|
||||
return ast;
|
||||
}
|
||||
|
||||
DeclaratorAST *DeclaratorAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
DeclaratorAST *ast = new (pool) DeclaratorAST;
|
||||
@@ -99,7 +109,6 @@ DeclaratorAST *DeclaratorAST::clone(MemoryPool *pool) const
|
||||
ExpressionListAST *ExpressionListAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ExpressionListAST *ast = new (pool) ExpressionListAST;
|
||||
// copy ExpressionAST
|
||||
// copy ExpressionListAST
|
||||
ast->comma_token = comma_token;
|
||||
if (expression) ast->expression = expression->clone(pool);
|
||||
@@ -111,7 +120,6 @@ SimpleDeclarationAST *SimpleDeclarationAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
SimpleDeclarationAST *ast = new (pool) SimpleDeclarationAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy SimpleDeclarationAST
|
||||
ast->qt_invokable_token = qt_invokable_token;
|
||||
if (decl_specifier_seq) ast->decl_specifier_seq = decl_specifier_seq->clone(pool);
|
||||
@@ -124,7 +132,6 @@ EmptyDeclarationAST *EmptyDeclarationAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
EmptyDeclarationAST *ast = new (pool) EmptyDeclarationAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy EmptyDeclarationAST
|
||||
ast->semicolon_token = semicolon_token;
|
||||
return ast;
|
||||
@@ -134,7 +141,6 @@ AccessDeclarationAST *AccessDeclarationAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
AccessDeclarationAST *ast = new (pool) AccessDeclarationAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy AccessDeclarationAST
|
||||
ast->access_specifier_token = access_specifier_token;
|
||||
ast->slots_token = slots_token;
|
||||
@@ -146,7 +152,6 @@ AsmDefinitionAST *AsmDefinitionAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
AsmDefinitionAST *ast = new (pool) AsmDefinitionAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy AsmDefinitionAST
|
||||
ast->asm_token = asm_token;
|
||||
ast->volatile_token = volatile_token;
|
||||
@@ -236,7 +241,6 @@ CaseStatementAST *CaseStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
CaseStatementAST *ast = new (pool) CaseStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy CaseStatementAST
|
||||
ast->case_token = case_token;
|
||||
if (expression) ast->expression = expression->clone(pool);
|
||||
@@ -245,11 +249,19 @@ CaseStatementAST *CaseStatementAST::clone(MemoryPool *pool) const
|
||||
return ast;
|
||||
}
|
||||
|
||||
StatementListAST *StatementListAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
StatementListAST *ast = new (pool) StatementListAST;
|
||||
// copy StatementListAST
|
||||
if (statement) ast->statement = statement->clone(pool);
|
||||
if (next) ast->next = next->clone(pool);
|
||||
return ast;
|
||||
}
|
||||
|
||||
CompoundStatementAST *CompoundStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
CompoundStatementAST *ast = new (pool) CompoundStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy CompoundStatementAST
|
||||
ast->lbrace_token = lbrace_token;
|
||||
if (statements) ast->statements = statements->clone(pool);
|
||||
@@ -308,7 +320,6 @@ DeclarationStatementAST *DeclarationStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
DeclarationStatementAST *ast = new (pool) DeclarationStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy DeclarationStatementAST
|
||||
if (declaration) ast->declaration = declaration->clone(pool);
|
||||
return ast;
|
||||
@@ -388,7 +399,6 @@ DoStatementAST *DoStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
DoStatementAST *ast = new (pool) DoStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy DoStatementAST
|
||||
ast->do_token = do_token;
|
||||
if (statement) ast->statement = statement->clone(pool);
|
||||
@@ -451,7 +461,6 @@ ExceptionDeclarationAST *ExceptionDeclarationAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ExceptionDeclarationAST *ast = new (pool) ExceptionDeclarationAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy ExceptionDeclarationAST
|
||||
if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
|
||||
if (declarator) ast->declarator = declarator->clone(pool);
|
||||
@@ -475,7 +484,6 @@ ExpressionOrDeclarationStatementAST *ExpressionOrDeclarationStatementAST::clone(
|
||||
{
|
||||
ExpressionOrDeclarationStatementAST *ast = new (pool) ExpressionOrDeclarationStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy ExpressionOrDeclarationStatementAST
|
||||
if (expression) ast->expression = expression->clone(pool);
|
||||
if (declaration) ast->declaration = declaration->clone(pool);
|
||||
@@ -486,7 +494,6 @@ ExpressionStatementAST *ExpressionStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ExpressionStatementAST *ast = new (pool) ExpressionStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy ExpressionStatementAST
|
||||
if (expression) ast->expression = expression->clone(pool);
|
||||
ast->semicolon_token = semicolon_token;
|
||||
@@ -497,7 +504,6 @@ FunctionDefinitionAST *FunctionDefinitionAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
FunctionDefinitionAST *ast = new (pool) FunctionDefinitionAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy FunctionDefinitionAST
|
||||
ast->qt_invokable_token = qt_invokable_token;
|
||||
if (decl_specifier_seq) ast->decl_specifier_seq = decl_specifier_seq->clone(pool);
|
||||
@@ -511,7 +517,6 @@ ForStatementAST *ForStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ForStatementAST *ast = new (pool) ForStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy ForStatementAST
|
||||
ast->for_token = for_token;
|
||||
ast->lparen_token = lparen_token;
|
||||
@@ -528,7 +533,6 @@ IfStatementAST *IfStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
IfStatementAST *ast = new (pool) IfStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy IfStatementAST
|
||||
ast->if_token = if_token;
|
||||
ast->lparen_token = lparen_token;
|
||||
@@ -555,7 +559,6 @@ LabeledStatementAST *LabeledStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
LabeledStatementAST *ast = new (pool) LabeledStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy LabeledStatementAST
|
||||
ast->label_token = label_token;
|
||||
ast->colon_token = colon_token;
|
||||
@@ -567,7 +570,6 @@ LinkageBodyAST *LinkageBodyAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
LinkageBodyAST *ast = new (pool) LinkageBodyAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy LinkageBodyAST
|
||||
ast->lbrace_token = lbrace_token;
|
||||
if (declarations) ast->declarations = declarations->clone(pool);
|
||||
@@ -579,7 +581,6 @@ LinkageSpecificationAST *LinkageSpecificationAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
LinkageSpecificationAST *ast = new (pool) LinkageSpecificationAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy LinkageSpecificationAST
|
||||
ast->extern_token = extern_token;
|
||||
ast->extern_type_token = extern_type_token;
|
||||
@@ -683,7 +684,6 @@ NamespaceAST *NamespaceAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
NamespaceAST *ast = new (pool) NamespaceAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy NamespaceAST
|
||||
ast->namespace_token = namespace_token;
|
||||
ast->identifier_token = identifier_token;
|
||||
@@ -696,7 +696,6 @@ NamespaceAliasDefinitionAST *NamespaceAliasDefinitionAST::clone(MemoryPool *pool
|
||||
{
|
||||
NamespaceAliasDefinitionAST *ast = new (pool) NamespaceAliasDefinitionAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy NamespaceAliasDefinitionAST
|
||||
ast->namespace_token = namespace_token;
|
||||
ast->namespace_name_token = namespace_name_token;
|
||||
@@ -777,7 +776,6 @@ ParameterDeclarationAST *ParameterDeclarationAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ParameterDeclarationAST *ast = new (pool) ParameterDeclarationAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy ParameterDeclarationAST
|
||||
if (type_specifier) ast->type_specifier = type_specifier->clone(pool);
|
||||
if (declarator) ast->declarator = declarator->clone(pool);
|
||||
@@ -926,7 +924,6 @@ BreakStatementAST *BreakStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
BreakStatementAST *ast = new (pool) BreakStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy BreakStatementAST
|
||||
ast->break_token = break_token;
|
||||
ast->semicolon_token = semicolon_token;
|
||||
@@ -937,7 +934,6 @@ ContinueStatementAST *ContinueStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ContinueStatementAST *ast = new (pool) ContinueStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy ContinueStatementAST
|
||||
ast->continue_token = continue_token;
|
||||
ast->semicolon_token = semicolon_token;
|
||||
@@ -948,7 +944,6 @@ GotoStatementAST *GotoStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
GotoStatementAST *ast = new (pool) GotoStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy GotoStatementAST
|
||||
ast->goto_token = goto_token;
|
||||
ast->identifier_token = identifier_token;
|
||||
@@ -960,7 +955,6 @@ ReturnStatementAST *ReturnStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ReturnStatementAST *ast = new (pool) ReturnStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy ReturnStatementAST
|
||||
ast->return_token = return_token;
|
||||
if (expression) ast->expression = expression->clone(pool);
|
||||
@@ -1030,7 +1024,6 @@ SwitchStatementAST *SwitchStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
SwitchStatementAST *ast = new (pool) SwitchStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy SwitchStatementAST
|
||||
ast->switch_token = switch_token;
|
||||
ast->lparen_token = lparen_token;
|
||||
@@ -1054,7 +1047,6 @@ TemplateDeclarationAST *TemplateDeclarationAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
TemplateDeclarationAST *ast = new (pool) TemplateDeclarationAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy TemplateDeclarationAST
|
||||
ast->export_token = export_token;
|
||||
ast->template_token = template_token;
|
||||
@@ -1087,7 +1079,6 @@ TryBlockStatementAST *TryBlockStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
TryBlockStatementAST *ast = new (pool) TryBlockStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy TryBlockStatementAST
|
||||
ast->try_token = try_token;
|
||||
if (statement) ast->statement = statement->clone(pool);
|
||||
@@ -1099,7 +1090,6 @@ CatchClauseAST *CatchClauseAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
CatchClauseAST *ast = new (pool) CatchClauseAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy CatchClauseAST
|
||||
ast->catch_token = catch_token;
|
||||
ast->lparen_token = lparen_token;
|
||||
@@ -1124,7 +1114,6 @@ TypenameTypeParameterAST *TypenameTypeParameterAST::clone(MemoryPool *pool) cons
|
||||
{
|
||||
TypenameTypeParameterAST *ast = new (pool) TypenameTypeParameterAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy TypenameTypeParameterAST
|
||||
ast->classkey_token = classkey_token;
|
||||
if (name) ast->name = name->clone(pool);
|
||||
@@ -1137,7 +1126,6 @@ TemplateTypeParameterAST *TemplateTypeParameterAST::clone(MemoryPool *pool) cons
|
||||
{
|
||||
TemplateTypeParameterAST *ast = new (pool) TemplateTypeParameterAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy TemplateTypeParameterAST
|
||||
ast->template_token = template_token;
|
||||
ast->less_token = less_token;
|
||||
@@ -1164,7 +1152,6 @@ UsingAST *UsingAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
UsingAST *ast = new (pool) UsingAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy UsingAST
|
||||
ast->using_token = using_token;
|
||||
ast->typename_token = typename_token;
|
||||
@@ -1177,7 +1164,6 @@ UsingDirectiveAST *UsingDirectiveAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
UsingDirectiveAST *ast = new (pool) UsingDirectiveAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy UsingDirectiveAST
|
||||
ast->using_token = using_token;
|
||||
ast->namespace_token = namespace_token;
|
||||
@@ -1190,7 +1176,6 @@ WhileStatementAST *WhileStatementAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
WhileStatementAST *ast = new (pool) WhileStatementAST;
|
||||
// copy StatementAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy WhileStatementAST
|
||||
ast->while_token = while_token;
|
||||
ast->lparen_token = lparen_token;
|
||||
@@ -1213,7 +1198,6 @@ ObjCClassDeclarationAST *ObjCClassDeclarationAST::clone(MemoryPool *pool) const
|
||||
{
|
||||
ObjCClassDeclarationAST *ast = new (pool) ObjCClassDeclarationAST;
|
||||
// copy DeclarationAST
|
||||
if (next) ast->next = next->clone(pool);
|
||||
// copy ObjCClassDeclarationAST
|
||||
if (attributes) ast->attributes = attributes->clone(pool);
|
||||
ast->class_token = class_token;
|
||||
|
||||
@@ -37,7 +37,6 @@ void SimpleSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit SimpleSpecifierAST
|
||||
// visit SpecifierAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -46,9 +45,9 @@ void AttributeSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit AttributeSpecifierAST
|
||||
accept(attributes, visitor);
|
||||
for (AttributeAST *it = attributes; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit SpecifierAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -57,8 +56,8 @@ void AttributeAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit AttributeAST
|
||||
accept(expression_list, visitor);
|
||||
accept(next, visitor);
|
||||
for (ExpressionListAST *it = expression_list; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -69,7 +68,15 @@ void TypeofSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
// visit TypeofSpecifierAST
|
||||
accept(expression, visitor);
|
||||
// visit SpecifierAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
void DeclarationListAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit DeclarationListAST
|
||||
accept(declaration, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -78,10 +85,13 @@ void DeclaratorAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit DeclaratorAST
|
||||
accept(ptr_operators, visitor);
|
||||
for (PtrOperatorAST *it = ptr_operators; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(core_declarator, visitor);
|
||||
accept(postfix_declarators, visitor);
|
||||
accept(attributes, visitor);
|
||||
for (PostfixDeclaratorAST *it = postfix_declarators; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (SpecifierAST *it = attributes; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(initializer, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
@@ -92,8 +102,6 @@ void ExpressionListAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit ExpressionListAST
|
||||
accept(expression, visitor);
|
||||
accept(next, visitor);
|
||||
// visit ExpressionAST
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -102,10 +110,11 @@ void SimpleDeclarationAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit SimpleDeclarationAST
|
||||
accept(decl_specifier_seq, visitor);
|
||||
accept(declarators, visitor);
|
||||
for (SpecifierAST *it = decl_specifier_seq; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (DeclaratorListAST *it = declarators; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -115,7 +124,6 @@ void EmptyDeclarationAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit EmptyDeclarationAST
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -125,7 +133,6 @@ void AccessDeclarationAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit AccessDeclarationAST
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -135,7 +142,6 @@ void AsmDefinitionAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit AsmDefinitionAST
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -145,7 +151,6 @@ void BaseSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit BaseSpecifierAST
|
||||
accept(name, visitor);
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -197,12 +202,14 @@ void ClassSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ClassSpecifierAST
|
||||
accept(attributes, visitor);
|
||||
for (SpecifierAST *it = attributes; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(name, visitor);
|
||||
accept(base_clause, visitor);
|
||||
accept(member_specifiers, visitor);
|
||||
for (BaseSpecifierAST *it = base_clause; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (DeclarationListAST *it = member_specifiers; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit SpecifierAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -214,7 +221,15 @@ void CaseStatementAST::accept0(ASTVisitor *visitor)
|
||||
accept(expression, visitor);
|
||||
accept(statement, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
void StatementListAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit StatementListAST
|
||||
accept(statement, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -223,9 +238,9 @@ void CompoundStatementAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit CompoundStatementAST
|
||||
accept(statements, visitor);
|
||||
for (StatementListAST *it = statements; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -234,7 +249,8 @@ void ConditionAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ConditionAST
|
||||
accept(type_specifier, visitor);
|
||||
for (SpecifierAST *it = type_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(declarator, visitor);
|
||||
// visit ExpressionAST
|
||||
}
|
||||
@@ -268,7 +284,8 @@ void CtorInitializerAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit CtorInitializerAST
|
||||
accept(member_initializers, visitor);
|
||||
for (MemInitializerAST *it = member_initializers; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -279,7 +296,6 @@ void DeclarationStatementAST::accept0(ASTVisitor *visitor)
|
||||
// visit DeclarationStatementAST
|
||||
accept(declaration, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -309,11 +325,11 @@ void FunctionDeclaratorAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit FunctionDeclaratorAST
|
||||
accept(parameters, visitor);
|
||||
accept(cv_qualifier_seq, visitor);
|
||||
for (SpecifierAST *it = cv_qualifier_seq; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(exception_specification, visitor);
|
||||
accept(as_cpp_initializer, visitor);
|
||||
// visit PostfixDeclaratorAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -324,7 +340,6 @@ void ArrayDeclaratorAST::accept0(ASTVisitor *visitor)
|
||||
// visit ArrayDeclaratorAST
|
||||
accept(expression, visitor);
|
||||
// visit PostfixDeclaratorAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -334,7 +349,6 @@ void DeclaratorListAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit DeclaratorListAST
|
||||
accept(declarator, visitor);
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -356,7 +370,6 @@ void DoStatementAST::accept0(ASTVisitor *visitor)
|
||||
accept(statement, visitor);
|
||||
accept(expression, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -367,7 +380,6 @@ void NamedTypeSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
// visit NamedTypeSpecifierAST
|
||||
accept(name, visitor);
|
||||
// visit SpecifierAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -378,7 +390,6 @@ void ElaboratedTypeSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
// visit ElaboratedTypeSpecifierAST
|
||||
accept(name, visitor);
|
||||
// visit SpecifierAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -388,9 +399,9 @@ void EnumSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit EnumSpecifierAST
|
||||
accept(name, visitor);
|
||||
accept(enumerators, visitor);
|
||||
for (EnumeratorAST *it = enumerators; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit SpecifierAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -400,7 +411,6 @@ void EnumeratorAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit EnumeratorAST
|
||||
accept(expression, visitor);
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -409,10 +419,10 @@ void ExceptionDeclarationAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ExceptionDeclarationAST
|
||||
accept(type_specifier, visitor);
|
||||
for (SpecifierAST *it = type_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(declarator, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -421,7 +431,8 @@ void ExceptionSpecificationAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ExceptionSpecificationAST
|
||||
accept(type_ids, visitor);
|
||||
for (ExpressionListAST *it = type_ids; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -433,7 +444,6 @@ void ExpressionOrDeclarationStatementAST::accept0(ASTVisitor *visitor)
|
||||
accept(expression, visitor);
|
||||
accept(declaration, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -444,7 +454,6 @@ void ExpressionStatementAST::accept0(ASTVisitor *visitor)
|
||||
// visit ExpressionStatementAST
|
||||
accept(expression, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -453,12 +462,12 @@ void FunctionDefinitionAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit FunctionDefinitionAST
|
||||
accept(decl_specifier_seq, visitor);
|
||||
for (SpecifierAST *it = decl_specifier_seq; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(declarator, visitor);
|
||||
accept(ctor_initializer, visitor);
|
||||
accept(function_body, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -472,7 +481,6 @@ void ForStatementAST::accept0(ASTVisitor *visitor)
|
||||
accept(expression, visitor);
|
||||
accept(statement, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -485,7 +493,6 @@ void IfStatementAST::accept0(ASTVisitor *visitor)
|
||||
accept(statement, visitor);
|
||||
accept(else_statement, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -494,7 +501,8 @@ void ArrayInitializerAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ArrayInitializerAST
|
||||
accept(expression_list, visitor);
|
||||
for (ExpressionListAST *it = expression_list; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit ExpressionAST
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
@@ -506,7 +514,6 @@ void LabeledStatementAST::accept0(ASTVisitor *visitor)
|
||||
// visit LabeledStatementAST
|
||||
accept(statement, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -515,9 +522,9 @@ void LinkageBodyAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit LinkageBodyAST
|
||||
accept(declarations, visitor);
|
||||
for (DeclarationListAST *it = declarations; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -528,7 +535,6 @@ void LinkageSpecificationAST::accept0(ASTVisitor *visitor)
|
||||
// visit LinkageSpecificationAST
|
||||
accept(declaration, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -539,7 +545,6 @@ void MemInitializerAST::accept0(ASTVisitor *visitor)
|
||||
// visit MemInitializerAST
|
||||
accept(name, visitor);
|
||||
accept(expression, visitor);
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -549,7 +554,6 @@ void NestedNameSpecifierAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit NestedNameSpecifierAST
|
||||
accept(class_or_namespace_name, visitor);
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -558,7 +562,8 @@ void QualifiedNameAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit QualifiedNameAST
|
||||
accept(nested_name_specifier, visitor);
|
||||
for (NestedNameSpecifierAST *it = nested_name_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(unqualified_name, visitor);
|
||||
// visit NameAST
|
||||
// visit ExpressionAST
|
||||
@@ -581,8 +586,10 @@ void ConversionFunctionIdAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ConversionFunctionIdAST
|
||||
accept(type_specifier, visitor);
|
||||
accept(ptr_operators, visitor);
|
||||
for (SpecifierAST *it = type_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (PtrOperatorAST *it = ptr_operators; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit NameAST
|
||||
// visit ExpressionAST
|
||||
}
|
||||
@@ -613,7 +620,8 @@ void TemplateIdAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit TemplateIdAST
|
||||
accept(template_arguments, visitor);
|
||||
for (TemplateArgumentListAST *it = template_arguments; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit NameAST
|
||||
// visit ExpressionAST
|
||||
}
|
||||
@@ -624,10 +632,10 @@ void NamespaceAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit NamespaceAST
|
||||
accept(attributes, visitor);
|
||||
for (SpecifierAST *it = attributes; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(linkage_body, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -638,7 +646,6 @@ void NamespaceAliasDefinitionAST::accept0(ASTVisitor *visitor)
|
||||
// visit NamespaceAliasDefinitionAST
|
||||
accept(name, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -647,7 +654,8 @@ void NewPlacementAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit NewPlacementAST
|
||||
accept(expression_list, visitor);
|
||||
for (ExpressionListAST *it = expression_list; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -657,7 +665,6 @@ void NewArrayDeclaratorAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit NewArrayDeclaratorAST
|
||||
accept(expression, visitor);
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -688,9 +695,12 @@ void NewTypeIdAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit NewTypeIdAST
|
||||
accept(type_specifier, visitor);
|
||||
accept(ptr_operators, visitor);
|
||||
accept(new_array_declarators, visitor);
|
||||
for (SpecifierAST *it = type_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (PtrOperatorAST *it = ptr_operators; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (NewArrayDeclaratorAST *it = new_array_declarators; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -707,11 +717,11 @@ void ParameterDeclarationAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ParameterDeclarationAST
|
||||
accept(type_specifier, visitor);
|
||||
for (SpecifierAST *it = type_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(declarator, visitor);
|
||||
accept(expression, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -720,7 +730,8 @@ void ParameterDeclarationClauseAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ParameterDeclarationClauseAST
|
||||
accept(parameter_declarations, visitor);
|
||||
for (DeclarationListAST *it = parameter_declarations; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -729,9 +740,9 @@ void CallAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit CallAST
|
||||
accept(expression_list, visitor);
|
||||
for (ExpressionListAST *it = expression_list; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit PostfixAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -742,7 +753,6 @@ void ArrayAccessAST::accept0(ASTVisitor *visitor)
|
||||
// visit ArrayAccessAST
|
||||
accept(expression, visitor);
|
||||
// visit PostfixAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -752,7 +762,6 @@ void PostIncrDecrAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit PostIncrDecrAST
|
||||
// visit PostfixAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -763,7 +772,6 @@ void MemberAccessAST::accept0(ASTVisitor *visitor)
|
||||
// visit MemberAccessAST
|
||||
accept(member_name, visitor);
|
||||
// visit PostfixAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -783,7 +791,8 @@ void TypenameCallExpressionAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit TypenameCallExpressionAST
|
||||
accept(name, visitor);
|
||||
accept(expression_list, visitor);
|
||||
for (ExpressionListAST *it = expression_list; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit ExpressionAST
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
@@ -793,8 +802,10 @@ void TypeConstructorCallAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit TypeConstructorCallAST
|
||||
accept(type_specifier, visitor);
|
||||
accept(expression_list, visitor);
|
||||
for (SpecifierAST *it = type_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (ExpressionListAST *it = expression_list; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit ExpressionAST
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
@@ -805,7 +816,8 @@ void PostfixExpressionAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit PostfixExpressionAST
|
||||
accept(base_expression, visitor);
|
||||
accept(postfix_expressions, visitor);
|
||||
for (PostfixAST *it = postfix_expressions; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit ExpressionAST
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
@@ -815,10 +827,11 @@ void PointerToMemberAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit PointerToMemberAST
|
||||
accept(nested_name_specifier, visitor);
|
||||
accept(cv_qualifier_seq, visitor);
|
||||
for (NestedNameSpecifierAST *it = nested_name_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (SpecifierAST *it = cv_qualifier_seq; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit PtrOperatorAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -827,9 +840,9 @@ void PointerAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit PointerAST
|
||||
accept(cv_qualifier_seq, visitor);
|
||||
for (SpecifierAST *it = cv_qualifier_seq; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit PtrOperatorAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -839,7 +852,6 @@ void ReferenceAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit ReferenceAST
|
||||
// visit PtrOperatorAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -849,7 +861,6 @@ void BreakStatementAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit BreakStatementAST
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -859,7 +870,6 @@ void ContinueStatementAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit ContinueStatementAST
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -869,7 +879,6 @@ void GotoStatementAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit GotoStatementAST
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -880,7 +889,6 @@ void ReturnStatementAST::accept0(ASTVisitor *visitor)
|
||||
// visit ReturnStatementAST
|
||||
accept(expression, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -936,7 +944,6 @@ void StringLiteralAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit StringLiteralAST
|
||||
accept(next, visitor);
|
||||
// visit ExpressionAST
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
@@ -949,7 +956,6 @@ void SwitchStatementAST::accept0(ASTVisitor *visitor)
|
||||
accept(condition, visitor);
|
||||
accept(statement, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -959,7 +965,6 @@ void TemplateArgumentListAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit TemplateArgumentListAST
|
||||
accept(template_argument, visitor);
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -968,10 +973,10 @@ void TemplateDeclarationAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit TemplateDeclarationAST
|
||||
accept(template_parameters, visitor);
|
||||
for (DeclarationListAST *it = template_parameters; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(declaration, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -990,7 +995,8 @@ void TranslationUnitAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit TranslationUnitAST
|
||||
accept(declarations, visitor);
|
||||
for (DeclarationListAST *it = declarations; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1000,9 +1006,9 @@ void TryBlockStatementAST::accept0(ASTVisitor *visitor)
|
||||
if (visitor->visit(this)) {
|
||||
// visit TryBlockStatementAST
|
||||
accept(statement, visitor);
|
||||
accept(catch_clause_seq, visitor);
|
||||
for (CatchClauseAST *it = catch_clause_seq; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1013,9 +1019,7 @@ void CatchClauseAST::accept0(ASTVisitor *visitor)
|
||||
// visit CatchClauseAST
|
||||
accept(exception_declaration, visitor);
|
||||
accept(statement, visitor);
|
||||
accept(next, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1024,7 +1028,8 @@ void TypeIdAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit TypeIdAST
|
||||
accept(type_specifier, visitor);
|
||||
for (SpecifierAST *it = type_specifier; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(declarator, visitor);
|
||||
// visit ExpressionAST
|
||||
}
|
||||
@@ -1038,7 +1043,6 @@ void TypenameTypeParameterAST::accept0(ASTVisitor *visitor)
|
||||
accept(name, visitor);
|
||||
accept(type_id, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1047,11 +1051,11 @@ void TemplateTypeParameterAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit TemplateTypeParameterAST
|
||||
accept(template_parameters, visitor);
|
||||
for (DeclarationListAST *it = template_parameters; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
accept(name, visitor);
|
||||
accept(type_id, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1072,7 +1076,6 @@ void UsingAST::accept0(ASTVisitor *visitor)
|
||||
// visit UsingAST
|
||||
accept(name, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1083,7 +1086,6 @@ void UsingDirectiveAST::accept0(ASTVisitor *visitor)
|
||||
// visit UsingDirectiveAST
|
||||
accept(name, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1095,7 +1097,6 @@ void WhileStatementAST::accept0(ASTVisitor *visitor)
|
||||
accept(condition, visitor);
|
||||
accept(statement, visitor);
|
||||
// visit StatementAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1104,7 +1105,6 @@ void IdentifierListAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit IdentifierListAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
@@ -1113,10 +1113,11 @@ void ObjCClassDeclarationAST::accept0(ASTVisitor *visitor)
|
||||
{
|
||||
if (visitor->visit(this)) {
|
||||
// visit ObjCClassDeclarationAST
|
||||
accept(attributes, visitor);
|
||||
accept(identifier_list, visitor);
|
||||
for (SpecifierAST *it = attributes; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
for (IdentifierListAST *it = identifier_list; it; it = it->next)
|
||||
accept(it, visitor);
|
||||
// visit DeclarationAST
|
||||
accept(next, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
}
|
||||
|
||||
@@ -171,6 +171,7 @@ public:
|
||||
virtual bool visit(SimpleNameAST *) { return true; }
|
||||
virtual bool visit(SimpleSpecifierAST *) { return true; }
|
||||
virtual bool visit(SizeofExpressionAST *) { return true; }
|
||||
virtual bool visit(StatementListAST *) { return true; }
|
||||
virtual bool visit(StringLiteralAST *) { return true; }
|
||||
virtual bool visit(SwitchStatementAST *) { return true; }
|
||||
virtual bool visit(TemplateArgumentListAST *) { return true; }
|
||||
@@ -197,6 +198,8 @@ public:
|
||||
virtual bool visit(IdentifierListAST *) { return true; }
|
||||
virtual bool visit(ObjCClassDeclarationAST *) { return true; }
|
||||
|
||||
virtual bool visit(DeclarationListAST *) { return true; }
|
||||
virtual void endVisit(DeclarationListAST *) { }
|
||||
|
||||
|
||||
virtual void endVisit(AccessDeclarationAST *) { }
|
||||
@@ -276,6 +279,7 @@ public:
|
||||
virtual void endVisit(SimpleNameAST *) { }
|
||||
virtual void endVisit(SimpleSpecifierAST *) { }
|
||||
virtual void endVisit(SizeofExpressionAST *) { }
|
||||
virtual void endVisit(StatementListAST *) { }
|
||||
virtual void endVisit(StringLiteralAST *) { }
|
||||
virtual void endVisit(SwitchStatementAST *) { }
|
||||
virtual void endVisit(TemplateArgumentListAST *) { }
|
||||
|
||||
@@ -83,6 +83,7 @@ class CoreDeclaratorAST;
|
||||
class CppCastExpressionAST;
|
||||
class CtorInitializerAST;
|
||||
class DeclarationAST;
|
||||
class DeclarationListAST;
|
||||
class DeclarationStatementAST;
|
||||
class DeclaratorAST;
|
||||
class DeclaratorIdAST;
|
||||
@@ -143,6 +144,7 @@ class SimpleSpecifierAST;
|
||||
class SizeofExpressionAST;
|
||||
class SpecifierAST;
|
||||
class StatementAST;
|
||||
class StatementListAST;
|
||||
class StringLiteralAST;
|
||||
class SwitchStatementAST;
|
||||
class TemplateArgumentListAST;
|
||||
|
||||
@@ -311,27 +311,20 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
|
||||
semantic()->switchMethodKey(previousMethodKey);
|
||||
semantic()->switchVisibility(previousVisibility);
|
||||
|
||||
if (ast->next && ast->next->asEmptyDeclaration()) {
|
||||
translationUnit()->warning(ast->next->firstToken(),
|
||||
"unnecessary semicolon after function block");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CheckDeclaration::visit(LinkageBodyAST *ast)
|
||||
{
|
||||
for (DeclarationAST *decl = ast->declarations; decl; decl = decl->next) {
|
||||
semantic()->check(decl, _scope);
|
||||
for (DeclarationListAST *decl = ast->declarations; decl; decl = decl->next) {
|
||||
semantic()->check(decl->declaration, _scope);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CheckDeclaration::visit(LinkageSpecificationAST *ast)
|
||||
{
|
||||
for (DeclarationAST *decl = ast->declaration; decl; decl = decl->next) {
|
||||
semantic()->check(decl, _scope);
|
||||
}
|
||||
semantic()->check(ast->declaration, _scope);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -352,11 +345,6 @@ bool CheckDeclaration::visit(NamespaceAST *ast)
|
||||
_scope->enterSymbol(ns);
|
||||
semantic()->check(ast->linkage_body, ns->members()); // ### we'll do the merge later.
|
||||
|
||||
if (ast->next && ast->next->asEmptyDeclaration()) {
|
||||
translationUnit()->warning(ast->next->firstToken(),
|
||||
"unnecessary semicolon after namespace");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -389,9 +377,8 @@ bool CheckDeclaration::visit(ParameterDeclarationAST *ast)
|
||||
bool CheckDeclaration::visit(TemplateDeclarationAST *ast)
|
||||
{
|
||||
Scope *previousScope = switchScope(new Scope(_scope->owner()));
|
||||
for (DeclarationAST *param = ast->template_parameters; param;
|
||||
param = param->next) {
|
||||
semantic()->check(param, _scope);
|
||||
for (DeclarationListAST *param = ast->template_parameters; param; param = param->next) {
|
||||
semantic()->check(param->declaration, _scope);
|
||||
}
|
||||
|
||||
Scope *templateParameters = switchScope(previousScope);
|
||||
|
||||
@@ -162,9 +162,9 @@ bool CheckDeclarator::visit(FunctionDeclaratorAST *ast)
|
||||
fun->setReturnType(_fullySpecifiedType);
|
||||
|
||||
if (ast->parameters) {
|
||||
DeclarationAST *parameter_declarations = ast->parameters->parameter_declarations;
|
||||
for (DeclarationAST *decl = parameter_declarations; decl; decl = decl->next) {
|
||||
semantic()->check(decl, fun->arguments());
|
||||
DeclarationListAST *parameter_declarations = ast->parameters->parameter_declarations;
|
||||
for (DeclarationListAST *decl = parameter_declarations; decl; decl = decl->next) {
|
||||
semantic()->check(decl->declaration, fun->arguments());
|
||||
}
|
||||
|
||||
if (ast->parameters->dot_dot_dot_token)
|
||||
|
||||
@@ -335,9 +335,8 @@ bool CheckSpecifier::visit(ClassSpecifierAST *ast)
|
||||
int previousVisibility = semantic()->switchVisibility(visibility);
|
||||
int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
|
||||
|
||||
for (DeclarationAST *member = ast->member_specifiers;
|
||||
member; member = member->next) {
|
||||
semantic()->check(member, klass->members());
|
||||
for (DeclarationListAST *member = ast->member_specifiers; member; member = member->next) {
|
||||
semantic()->check(member->declaration, klass->members());
|
||||
}
|
||||
|
||||
(void) semantic()->switchMethodKey(previousMethodKey);
|
||||
|
||||
@@ -104,8 +104,8 @@ bool CheckStatement::visit(CompoundStatementAST *ast)
|
||||
ast->symbol = block;
|
||||
_scope->enterSymbol(block);
|
||||
Scope *previousScope = switchScope(block->members());
|
||||
for (StatementAST *it = ast->statements; it; it = it->next) {
|
||||
semantic()->check(it, _scope);
|
||||
for (StatementListAST *it = ast->statements; it; it = it->next) {
|
||||
semantic()->check(it->statement, _scope);
|
||||
}
|
||||
(void) switchScope(previousScope);
|
||||
return false;
|
||||
|
||||
@@ -353,14 +353,17 @@ bool Parser::parseName(NameAST *&node, bool acceptTemplateId)
|
||||
bool Parser::parseTranslationUnit(TranslationUnitAST *&node)
|
||||
{
|
||||
TranslationUnitAST *ast = new (_pool) TranslationUnitAST;
|
||||
DeclarationAST **decl = &ast->declarations;
|
||||
DeclarationListAST **decl = &ast->declarations;
|
||||
|
||||
while (LA()) {
|
||||
unsigned start_declaration = cursor();
|
||||
|
||||
if (parseDeclaration(*decl)) {
|
||||
if (*decl)
|
||||
decl = &(*decl)->next;
|
||||
DeclarationAST *declaration = 0;
|
||||
|
||||
if (parseDeclaration(declaration)) {
|
||||
*decl = new (_pool) DeclarationListAST;
|
||||
(*decl)->declaration = declaration;
|
||||
decl = &(*decl)->next;
|
||||
} else {
|
||||
rewind(start_declaration + 1);
|
||||
skipUntilDeclaration();
|
||||
@@ -469,16 +472,18 @@ bool Parser::parseLinkageBody(DeclarationAST *&node)
|
||||
if (LA() == T_LBRACE) {
|
||||
LinkageBodyAST *ast = new (_pool) LinkageBodyAST;
|
||||
ast->lbrace_token = consumeToken();
|
||||
DeclarationAST **declaration_ptr = &ast->declarations;
|
||||
DeclarationListAST **declaration_ptr = &ast->declarations;
|
||||
|
||||
while (int tk = LA()) {
|
||||
if (tk == T_RBRACE)
|
||||
break;
|
||||
|
||||
unsigned start_declaration = cursor();
|
||||
if (parseDeclaration(*declaration_ptr)) {
|
||||
if (*declaration_ptr) // ### remove me
|
||||
declaration_ptr = &(*declaration_ptr)->next;
|
||||
DeclarationAST *declaration = 0;
|
||||
if (parseDeclaration(declaration)) {
|
||||
*declaration_ptr = new (_pool) DeclarationListAST;
|
||||
(*declaration_ptr)->declaration = declaration;
|
||||
declaration_ptr = &(*declaration_ptr)->next;
|
||||
} else {
|
||||
rewind(start_declaration + 1);
|
||||
skipUntilDeclaration();
|
||||
@@ -1179,16 +1184,24 @@ bool Parser::parseEnumSpecifier(SpecifierAST *&node)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Parser::parseTemplateParameterList(DeclarationAST *&node)
|
||||
bool Parser::parseTemplateParameterList(DeclarationListAST *&node)
|
||||
{
|
||||
DeclarationAST **template_parameter_ptr = &node;
|
||||
if (parseTemplateParameter(*template_parameter_ptr)) {
|
||||
DeclarationListAST **template_parameter_ptr = &node;
|
||||
DeclarationAST *declaration = 0;
|
||||
if (parseTemplateParameter(declaration)) {
|
||||
*template_parameter_ptr = new (_pool) DeclarationListAST;
|
||||
(*template_parameter_ptr)->declaration = declaration;
|
||||
template_parameter_ptr = &(*template_parameter_ptr)->next;
|
||||
|
||||
while (LA() == T_COMMA) {
|
||||
consumeToken(); // XXX Store this token somewhere
|
||||
|
||||
if (parseTemplateParameter(*template_parameter_ptr))
|
||||
declaration = 0;
|
||||
if (parseTemplateParameter(declaration)) {
|
||||
*template_parameter_ptr = new (_pool) DeclarationListAST;
|
||||
(*template_parameter_ptr)->declaration = declaration;
|
||||
template_parameter_ptr = &(*template_parameter_ptr)->next;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1272,7 +1285,7 @@ bool Parser::parseTypeId(ExpressionAST *&node)
|
||||
|
||||
bool Parser::parseParameterDeclarationClause(ParameterDeclarationClauseAST *&node)
|
||||
{
|
||||
DeclarationAST *parameter_declarations = 0;
|
||||
DeclarationListAST *parameter_declarations = 0;
|
||||
if (LA() != T_DOT_DOT_DOT)
|
||||
parseParameterDeclarationList(parameter_declarations);
|
||||
unsigned dot_dot_dot_token = 0;
|
||||
@@ -1288,10 +1301,13 @@ bool Parser::parseParameterDeclarationClause(ParameterDeclarationClauseAST *&nod
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Parser::parseParameterDeclarationList(DeclarationAST *&node)
|
||||
bool Parser::parseParameterDeclarationList(DeclarationListAST *&node)
|
||||
{
|
||||
DeclarationAST **parameter_declaration_ptr = &node;
|
||||
if (parseParameterDeclaration(*parameter_declaration_ptr)) {
|
||||
DeclarationListAST **parameter_declaration_ptr = &node;
|
||||
DeclarationAST *declaration = 0;
|
||||
if (parseParameterDeclaration(declaration)) {
|
||||
*parameter_declaration_ptr = new (_pool) DeclarationListAST;
|
||||
(*parameter_declaration_ptr)->declaration = declaration;
|
||||
parameter_declaration_ptr = &(*parameter_declaration_ptr)->next;
|
||||
while (LA() == T_COMMA) {
|
||||
consumeToken();
|
||||
@@ -1299,8 +1315,12 @@ bool Parser::parseParameterDeclarationList(DeclarationAST *&node)
|
||||
if (LA() == T_DOT_DOT_DOT)
|
||||
break;
|
||||
|
||||
if (parseParameterDeclaration(*parameter_declaration_ptr))
|
||||
declaration = 0;
|
||||
if (parseParameterDeclaration(declaration)) {
|
||||
*parameter_declaration_ptr = new (_pool) DeclarationListAST;
|
||||
(*parameter_declaration_ptr)->declaration = declaration;
|
||||
parameter_declaration_ptr = &(*parameter_declaration_ptr)->next;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1381,7 +1401,7 @@ bool Parser::parseClassSpecifier(SpecifierAST *&node)
|
||||
if (LA() == T_LBRACE)
|
||||
ast->lbrace_token = consumeToken();
|
||||
|
||||
DeclarationAST **declaration_ptr = &ast->member_specifiers;
|
||||
DeclarationListAST **declaration_ptr = &ast->member_specifiers;
|
||||
while (int tk = LA()) {
|
||||
if (tk == T_RBRACE) {
|
||||
ast->rbrace_token = consumeToken();
|
||||
@@ -1389,9 +1409,11 @@ bool Parser::parseClassSpecifier(SpecifierAST *&node)
|
||||
}
|
||||
|
||||
unsigned start_declaration = cursor();
|
||||
if (parseMemberSpecification(*declaration_ptr)) {
|
||||
if (*declaration_ptr)
|
||||
declaration_ptr = &(*declaration_ptr)->next;
|
||||
DeclarationAST *declaration = 0;
|
||||
if (parseMemberSpecification(declaration)) {
|
||||
*declaration_ptr = new (_pool) DeclarationListAST;
|
||||
(*declaration_ptr)->declaration = declaration;
|
||||
declaration_ptr = &(*declaration_ptr)->next;
|
||||
} else {
|
||||
rewind(start_declaration + 1);
|
||||
skipUntilDeclaration();
|
||||
@@ -2097,16 +2119,19 @@ bool Parser::parseCompoundStatement(StatementAST *&node)
|
||||
if (LA() == T_LBRACE) {
|
||||
CompoundStatementAST *ast = new (_pool) CompoundStatementAST;
|
||||
ast->lbrace_token = consumeToken();
|
||||
StatementAST **statement_ptr = &ast->statements;
|
||||
StatementListAST **statement_ptr = &ast->statements;
|
||||
while (int tk = LA()) {
|
||||
if (tk == T_RBRACE)
|
||||
break;
|
||||
|
||||
unsigned start_statement = cursor();
|
||||
if (! parseStatement(*statement_ptr)) {
|
||||
StatementAST *statement = 0;
|
||||
if (! parseStatement(statement)) {
|
||||
rewind(start_statement + 1);
|
||||
skipUntilStatement();
|
||||
} else {
|
||||
*statement_ptr = new (_pool) StatementListAST;
|
||||
(*statement_ptr)->statement = statement;
|
||||
statement_ptr = &(*statement_ptr)->next;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,7 +156,7 @@ public:
|
||||
bool parseOperatorFunctionId(NameAST *&node);
|
||||
bool parseParameterDeclaration(DeclarationAST *&node);
|
||||
bool parseParameterDeclarationClause(ParameterDeclarationClauseAST *&node);
|
||||
bool parseParameterDeclarationList(DeclarationAST *&node);
|
||||
bool parseParameterDeclarationList(DeclarationListAST *&node);
|
||||
bool parsePmExpression(ExpressionAST *&node);
|
||||
bool parseTypeidExpression(ExpressionAST *&node);
|
||||
bool parseTypenameCallExpression(ExpressionAST *&node);
|
||||
@@ -178,7 +178,7 @@ public:
|
||||
bool parseTemplateArgumentList(TemplateArgumentListAST *&node);
|
||||
bool parseTemplateDeclaration(DeclarationAST *&node);
|
||||
bool parseTemplateParameter(DeclarationAST *&node);
|
||||
bool parseTemplateParameterList(DeclarationAST *&node);
|
||||
bool parseTemplateParameterList(DeclarationListAST *&node);
|
||||
bool parseThrowExpression(ExpressionAST *&node);
|
||||
bool parseTryBlockStatement(StatementAST *&node);
|
||||
bool parseCatchClause(CatchClauseAST *&node);
|
||||
|
||||
@@ -286,10 +286,8 @@ bool PrettyPrinter::visit(ClassSpecifierAST *ast)
|
||||
outToken(ast->lbrace_token);
|
||||
if (ast->member_specifiers) {
|
||||
indent();
|
||||
if (ast->member_specifiers) {
|
||||
for (DeclarationAST *it = ast->member_specifiers; it; it = it->next) {
|
||||
accept(it);
|
||||
}
|
||||
for (DeclarationListAST *it = ast->member_specifiers; it; it = it->next) {
|
||||
accept(it->declaration);
|
||||
}
|
||||
deindent();
|
||||
}
|
||||
@@ -302,7 +300,7 @@ bool PrettyPrinter::visit(CompoundStatementAST *ast)
|
||||
outToken(ast->lbrace_token);
|
||||
if (ast->statements) {
|
||||
indent();
|
||||
for (StatementAST *it = ast->statements; it; it = it->next) {
|
||||
for (StatementListAST *it = ast->statements; it; it = it->next) {
|
||||
accept(it);
|
||||
}
|
||||
deindent();
|
||||
@@ -624,8 +622,8 @@ bool PrettyPrinter::visit(LinkageBodyAST *ast)
|
||||
outToken(ast->lbrace_token);
|
||||
if (ast->declarations) {
|
||||
indent();
|
||||
for (DeclarationAST *it = ast->declarations; it; it = it->next) {
|
||||
accept(it);
|
||||
for (DeclarationListAST *it = ast->declarations; it; it = it->next) {
|
||||
accept(it->declaration);
|
||||
}
|
||||
deindent();
|
||||
}
|
||||
@@ -806,9 +804,9 @@ bool PrettyPrinter::visit(ParameterDeclarationAST *ast)
|
||||
|
||||
bool PrettyPrinter::visit(ParameterDeclarationClauseAST *ast)
|
||||
{
|
||||
for (DeclarationAST *it = ast->parameter_declarations; it; it = it->next) {
|
||||
for (DeclarationListAST *it = ast->parameter_declarations; it; it = it->next) {
|
||||
// XXX handle the comma tokens correctly
|
||||
accept(it);
|
||||
accept(it->declaration);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -943,9 +941,9 @@ bool PrettyPrinter::visit(TemplateDeclarationAST *ast)
|
||||
outToken(ast->template_token);
|
||||
outToken(ast->less_token);
|
||||
if (ast->template_parameters) {
|
||||
for (DeclarationAST *it = ast->template_parameters; it; it = it->next) {
|
||||
for (DeclarationListAST *it = ast->template_parameters; it; it = it->next) {
|
||||
// XXX handle the comma tokens correctly
|
||||
accept(it);
|
||||
accept(it->declaration);
|
||||
}
|
||||
}
|
||||
outToken(ast->greater_token);
|
||||
@@ -972,9 +970,9 @@ bool PrettyPrinter::visit(TemplateTypeParameterAST *ast)
|
||||
outToken(ast->template_token);
|
||||
outToken(ast->less_token);
|
||||
if (ast->template_parameters) {
|
||||
for (DeclarationAST *it = ast->template_parameters; it; it = it->next) {
|
||||
for (DeclarationListAST *it = ast->template_parameters; it; it = it->next) {
|
||||
// XXX handle the comma tokens correctly
|
||||
accept(it);
|
||||
accept(it->declaration);
|
||||
}
|
||||
}
|
||||
outToken(ast->greater_token);
|
||||
@@ -1002,8 +1000,8 @@ bool PrettyPrinter::visit(ThrowExpressionAST *ast)
|
||||
|
||||
bool PrettyPrinter::visit(TranslationUnitAST *ast)
|
||||
{
|
||||
for (DeclarationAST *it = ast->declarations; it; it = it->next) {
|
||||
accept(it);
|
||||
for (DeclarationListAST *it = ast->declarations; it; it = it->next) {
|
||||
accept(it->declaration);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user