diff --git a/shared/cplusplus/AST.cpp b/shared/cplusplus/AST.cpp index b6ddde0c0ebfc6d740a8a3c7c2ccf5dd371de4d1..434230153987a4255f7005ed1aa3e75db964e74a 100644 --- a/shared/cplusplus/AST.cpp +++ b/shared/cplusplus/AST.cpp @@ -2184,7 +2184,6 @@ unsigned ReferenceAST::firstToken() const unsigned ReferenceAST::lastToken() const { - assert(0 && "review me"); return amp_token + 1; } @@ -2202,8 +2201,11 @@ unsigned ReturnStatementAST::firstToken() const unsigned ReturnStatementAST::lastToken() const { - assert(0 && "review me"); - return semicolon_token + 1; + if (semicolon_token) + return semicolon_token + 1; + else if (expression) + return expression->lastToken(); + return return_token + 1; } void SimpleDeclarationAST::accept0(ASTVisitor *visitor) @@ -2222,23 +2224,24 @@ unsigned SimpleDeclarationAST::firstToken() const return decl_specifier_seq->firstToken(); else if (declarators) return declarators->firstToken(); - else - return semicolon_token; + return semicolon_token; } unsigned SimpleDeclarationAST::lastToken() const { - assert(0 && "review me"); if (semicolon_token) return semicolon_token + 1; + for (DeclaratorListAST *it = declarators; it; it = it->next) { if (! it->next) return it->lastToken(); } + for (SpecifierAST *it = decl_specifier_seq; it; it = it->next) { if (! it->next) return it->lastToken(); } + return 0; }