diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-03-23 14:03:05 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-03-23 14:13:22 +0100 |
commit | eebf498aaef5551b1863d61ffb5f46507093339b (patch) | |
tree | 5ba4f8e3040bfdec464a1c70bef13cfae5feb551 /src/shared/cplusplus | |
parent | ae715143606c1c432aa6f934578c10c3eee69f76 (diff) | |
download | qt-creator-eebf498aaef5551b1863d61ffb5f46507093339b.tar.gz |
Parse C++0x type-parameters.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/AST.cpp | 5 | ||||
-rw-r--r-- | src/shared/cplusplus/AST.h | 4 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTClone.cpp | 2 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTMatcher.cpp | 4 | ||||
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 4 |
5 files changed, 19 insertions, 0 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp index c419ef8438..d5b605116d 100644 --- a/src/shared/cplusplus/AST.cpp +++ b/src/shared/cplusplus/AST.cpp @@ -1727,6 +1727,9 @@ unsigned TemplateTypeParameterAST::lastToken() const else if (name) return name->lastToken(); + else if (dot_dot_dot_token) + return dot_dot_dot_token + 1; + else if (class_token) return class_token + 1; @@ -1895,6 +1898,8 @@ unsigned TypenameTypeParameterAST::lastToken() const return equal_token + 1; else if (name) return name->lastToken(); + else if (dot_dot_dot_token) + return dot_dot_dot_token + 1; return classkey_token + 1; } diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h index 2bcb33add1..f0bbb04314 100644 --- a/src/shared/cplusplus/AST.h +++ b/src/shared/cplusplus/AST.h @@ -3215,6 +3215,7 @@ class CPLUSPLUS_EXPORT TypenameTypeParameterAST: public DeclarationAST { public: unsigned classkey_token; + unsigned dot_dot_dot_token; NameAST *name; unsigned equal_token; ExpressionAST *type_id; @@ -3225,6 +3226,7 @@ public: // annotations public: TypenameTypeParameterAST() : classkey_token(0) + , dot_dot_dot_token(0) , name(0) , equal_token(0) , type_id(0) @@ -3251,6 +3253,7 @@ public: DeclarationListAST *template_parameter_list; unsigned greater_token; unsigned class_token; + unsigned dot_dot_dot_token; NameAST *name; unsigned equal_token; ExpressionAST *type_id; @@ -3265,6 +3268,7 @@ public: , template_parameter_list(0) , greater_token(0) , class_token(0) + , dot_dot_dot_token(0) , name(0) , equal_token(0) , type_id(0) diff --git a/src/shared/cplusplus/ASTClone.cpp b/src/shared/cplusplus/ASTClone.cpp index f33524e364..011d6ec230 100644 --- a/src/shared/cplusplus/ASTClone.cpp +++ b/src/shared/cplusplus/ASTClone.cpp @@ -1210,6 +1210,7 @@ TypenameTypeParameterAST *TypenameTypeParameterAST::clone(MemoryPool *pool) cons { TypenameTypeParameterAST *ast = new (pool) TypenameTypeParameterAST; ast->classkey_token = classkey_token; + ast->dot_dot_dot_token = dot_dot_dot_token; if (name) ast->name = name->clone(pool); ast->equal_token = equal_token; @@ -1228,6 +1229,7 @@ TemplateTypeParameterAST *TemplateTypeParameterAST::clone(MemoryPool *pool) cons *ast_iter = new (pool) DeclarationListAST((iter->value) ? iter->value->clone(pool) : 0); ast->greater_token = greater_token; ast->class_token = class_token; + ast->dot_dot_dot_token = dot_dot_dot_token; if (name) ast->name = name->clone(pool); ast->equal_token = equal_token; diff --git a/src/shared/cplusplus/ASTMatcher.cpp b/src/shared/cplusplus/ASTMatcher.cpp index 84623bb610..3fe3a8d410 100644 --- a/src/shared/cplusplus/ASTMatcher.cpp +++ b/src/shared/cplusplus/ASTMatcher.cpp @@ -2017,6 +2017,8 @@ bool ASTMatcher::match(TypenameTypeParameterAST *node, TypenameTypeParameterAST pattern->classkey_token = node->classkey_token; + pattern->dot_dot_dot_token = node->dot_dot_dot_token; + if (! pattern->name) pattern->name = node->name; else if (! AST::match(node->name, pattern->name, this)) @@ -2050,6 +2052,8 @@ bool ASTMatcher::match(TemplateTypeParameterAST *node, TemplateTypeParameterAST pattern->class_token = node->class_token; + pattern->dot_dot_dot_token = node->dot_dot_dot_token; + if (! pattern->name) pattern->name = node->name; else if (! AST::match(node->name, pattern->name, this)) diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index e08fce0416..e9fac60fb3 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -1494,6 +1494,8 @@ bool Parser::parseTypenameTypeParameter(DeclarationAST *&node) if (LA() == T_CLASS || LA() == T_TYPENAME) { TypenameTypeParameterAST *ast = new (_pool) TypenameTypeParameterAST; ast->classkey_token = consumeToken(); + if (_cxx0xEnabled && LA() == T_DOT_DOT_DOT) + ast->dot_dot_dot_token = consumeToken(); parseName(ast->name); if (LA() == T_EQUAL) { ast->equal_token = consumeToken(); @@ -1518,6 +1520,8 @@ bool Parser::parseTemplateTypeParameter(DeclarationAST *&node) ast->greater_token = consumeToken(); if (LA() == T_CLASS) ast->class_token = consumeToken(); + if (_cxx0xEnabled && LA() == T_DOT_DOT_DOT) + ast->dot_dot_dot_token = consumeToken(); // parse optional name parseName(ast->name); |