summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/AST.cpp3
-rw-r--r--src/shared/cplusplus/AST.h2
-rw-r--r--src/shared/cplusplus/ASTClone.cpp2
-rw-r--r--src/shared/cplusplus/ASTMatcher.cpp4
-rw-r--r--src/shared/cplusplus/Parser.cpp5
5 files changed, 16 insertions, 0 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 9238e8d41b..c419ef8438 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -559,6 +559,9 @@ unsigned ClassSpecifierAST::lastToken() const
else if (lbrace_token)
return lbrace_token + 1;
+ else if (dot_dot_dot_token)
+ return dot_dot_dot_token + 1;
+
else if (base_clause_list)
return base_clause_list->lastToken();
diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index c022d6287b..2bcb33add1 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -1131,6 +1131,7 @@ public:
NameAST *name;
unsigned colon_token;
BaseSpecifierListAST *base_clause_list;
+ unsigned dot_dot_dot_token;
unsigned lbrace_token;
DeclarationListAST *member_specifier_list;
unsigned rbrace_token;
@@ -1145,6 +1146,7 @@ public:
, name(0)
, colon_token(0)
, base_clause_list(0)
+ , dot_dot_dot_token(0)
, lbrace_token(0)
, member_specifier_list(0)
, rbrace_token(0)
diff --git a/src/shared/cplusplus/ASTClone.cpp b/src/shared/cplusplus/ASTClone.cpp
index 738d02684d..f33524e364 100644
--- a/src/shared/cplusplus/ASTClone.cpp
+++ b/src/shared/cplusplus/ASTClone.cpp
@@ -353,6 +353,7 @@ ClassSpecifierAST *ClassSpecifierAST::clone(MemoryPool *pool) const
for (BaseSpecifierListAST *iter = base_clause_list, **ast_iter = &ast->base_clause_list;
iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
*ast_iter = new (pool) BaseSpecifierListAST((iter->value) ? iter->value->clone(pool) : 0);
+ ast->dot_dot_dot_token = dot_dot_dot_token;
ast->lbrace_token = lbrace_token;
for (DeclarationListAST *iter = member_specifier_list, **ast_iter = &ast->member_specifier_list;
iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
@@ -431,6 +432,7 @@ CtorInitializerAST *CtorInitializerAST::clone(MemoryPool *pool) const
for (MemInitializerListAST *iter = member_initializer_list, **ast_iter = &ast->member_initializer_list;
iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
*ast_iter = new (pool) MemInitializerListAST((iter->value) ? iter->value->clone(pool) : 0);
+ ast->dot_dot_dot_token = dot_dot_dot_token;
return ast;
}
diff --git a/src/shared/cplusplus/ASTMatcher.cpp b/src/shared/cplusplus/ASTMatcher.cpp
index 31024bd05f..84623bb610 100644
--- a/src/shared/cplusplus/ASTMatcher.cpp
+++ b/src/shared/cplusplus/ASTMatcher.cpp
@@ -570,6 +570,8 @@ bool ASTMatcher::match(ClassSpecifierAST *node, ClassSpecifierAST *pattern)
else if (! AST::match(node->base_clause_list, pattern->base_clause_list, this))
return false;
+ pattern->dot_dot_dot_token = node->dot_dot_dot_token;
+
pattern->lbrace_token = node->lbrace_token;
if (! pattern->member_specifier_list)
@@ -706,6 +708,8 @@ bool ASTMatcher::match(CtorInitializerAST *node, CtorInitializerAST *pattern)
else if (! AST::match(node->member_initializer_list, pattern->member_initializer_list, this))
return false;
+ pattern->dot_dot_dot_token = node->dot_dot_dot_token;
+
return true;
}
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 5e86a4cc02..e08fce0416 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1667,6 +1667,7 @@ bool Parser::parseClassSpecifier(SpecifierListAST *&node)
_inFunctionBody = false;
unsigned colon_token = 0;
+ unsigned dot_dot_dot_token = 0;
if (LA() == T_COLON || LA() == T_LBRACE) {
BaseSpecifierListAST *base_clause_list = 0;
@@ -1676,6 +1677,9 @@ bool Parser::parseClassSpecifier(SpecifierListAST *&node)
parseBaseClause(base_clause_list);
+ if (_cxx0xEnabled && LA() == T_DOT_DOT_DOT)
+ dot_dot_dot_token = consumeToken();
+
if (LA() != T_LBRACE) {
_translationUnit->error(cursor(), "expected `{' before `%s'", tok().spell());
@@ -1697,6 +1701,7 @@ bool Parser::parseClassSpecifier(SpecifierListAST *&node)
ast->name = name;
ast->colon_token = colon_token;
ast->base_clause_list = base_clause_list;
+ ast->dot_dot_dot_token = dot_dot_dot_token;
if (LA() == T_LBRACE)
ast->lbrace_token = consumeToken();