aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2012-02-02 11:40:01 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2012-02-02 12:22:20 +0100
commitdd4299073e55a21f593817316f7e013e02f62b4e (patch)
tree26ffa0c085ba81f16c8fa6071f9873250203902b /src/libs/3rdparty
parenta2f9ee870e6b17d8526f365a56bc7621abda15dc (diff)
C++11: handle noexcept specifications.
Change-Id: I7da3affea2758b2e01124105e2521e1f2c5f6678 Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/libs/3rdparty')
-rw-r--r--src/libs/3rdparty/cplusplus/AST.cpp34
-rw-r--r--src/libs/3rdparty/cplusplus/AST.h47
-rw-r--r--src/libs/3rdparty/cplusplus/ASTClone.cpp15
-rw-r--r--src/libs/3rdparty/cplusplus/ASTMatch0.cpp12
-rw-r--r--src/libs/3rdparty/cplusplus/ASTMatcher.cpp21
-rw-r--r--src/libs/3rdparty/cplusplus/ASTMatcher.h3
-rw-r--r--src/libs/3rdparty/cplusplus/ASTPatternBuilder.h11
-rw-r--r--src/libs/3rdparty/cplusplus/ASTVisit.cpp10
-rw-r--r--src/libs/3rdparty/cplusplus/ASTVisitor.h6
-rw-r--r--src/libs/3rdparty/cplusplus/ASTfwd.h2
-rw-r--r--src/libs/3rdparty/cplusplus/Bind.cpp16
-rw-r--r--src/libs/3rdparty/cplusplus/Bind.h2
-rw-r--r--src/libs/3rdparty/cplusplus/Keywords.cpp17
-rw-r--r--src/libs/3rdparty/cplusplus/Parser.cpp10
-rw-r--r--src/libs/3rdparty/cplusplus/Token.cpp3
-rw-r--r--src/libs/3rdparty/cplusplus/Token.h1
16 files changed, 185 insertions, 25 deletions
diff --git a/src/libs/3rdparty/cplusplus/AST.cpp b/src/libs/3rdparty/cplusplus/AST.cpp
index 2669fa578e..139a856106 100644
--- a/src/libs/3rdparty/cplusplus/AST.cpp
+++ b/src/libs/3rdparty/cplusplus/AST.cpp
@@ -1161,7 +1161,7 @@ unsigned ExceptionDeclarationAST::lastToken() const
}
/** \generated */
-unsigned ExceptionSpecificationAST::firstToken() const
+unsigned DynamicExceptionSpecificationAST::firstToken() const
{
if (throw_token)
return throw_token;
@@ -1178,7 +1178,7 @@ unsigned ExceptionSpecificationAST::firstToken() const
}
/** \generated */
-unsigned ExceptionSpecificationAST::lastToken() const
+unsigned DynamicExceptionSpecificationAST::lastToken() const
{
if (rparen_token)
return rparen_token + 1;
@@ -4239,3 +4239,33 @@ unsigned PointerLiteralAST::lastToken() const
return 1;
}
+/** \generated */
+unsigned NoExceptSpecificationAST::firstToken() const
+{
+ if (noexcept_token)
+ return noexcept_token;
+ if (lparen_token)
+ return lparen_token;
+ if (expression)
+ if (unsigned candidate = expression->firstToken())
+ return candidate;
+ if (rparen_token)
+ return rparen_token;
+ return 0;
+}
+
+/** \generated */
+unsigned NoExceptSpecificationAST::lastToken() const
+{
+ if (rparen_token)
+ return rparen_token + 1;
+ if (expression)
+ if (unsigned candidate = expression->lastToken())
+ return candidate;
+ if (lparen_token)
+ return lparen_token + 1;
+ if (noexcept_token)
+ return noexcept_token + 1;
+ return 1;
+}
+
diff --git a/src/libs/3rdparty/cplusplus/AST.h b/src/libs/3rdparty/cplusplus/AST.h
index 015080f45e..b02f771ab4 100644
--- a/src/libs/3rdparty/cplusplus/AST.h
+++ b/src/libs/3rdparty/cplusplus/AST.h
@@ -159,6 +159,7 @@ public:
virtual DeleteExpressionAST *asDeleteExpression() { return 0; }
virtual DestructorNameAST *asDestructorName() { return 0; }
virtual DoStatementAST *asDoStatement() { return 0; }
+ virtual DynamicExceptionSpecificationAST *asDynamicExceptionSpecification() { return 0; }
virtual ElaboratedTypeSpecifierAST *asElaboratedTypeSpecifier() { return 0; }
virtual EmptyDeclarationAST *asEmptyDeclaration() { return 0; }
virtual EnumSpecifierAST *asEnumSpecifier() { return 0; }
@@ -196,6 +197,7 @@ public:
virtual NewInitializerAST *asNewInitializer() { return 0; }
virtual NewPlacementAST *asNewPlacement() { return 0; }
virtual NewTypeIdAST *asNewTypeId() { return 0; }
+ virtual NoExceptSpecificationAST *asNoExceptSpecification() { return 0; }
virtual NumericLiteralAST *asNumericLiteral() { return 0; }
virtual ObjCClassDeclarationAST *asObjCClassDeclaration() { return 0; }
virtual ObjCClassForwardDeclarationAST *asObjCClassForwardDeclaration() { return 0; }
@@ -1682,6 +1684,17 @@ protected:
class CPLUSPLUS_EXPORT ExceptionSpecificationAST: public AST
{
public:
+ ExceptionSpecificationAST()
+ {}
+
+ virtual ExceptionSpecificationAST *asExceptionSpecification() { return this; }
+
+ virtual ExceptionSpecificationAST *clone(MemoryPool *pool) const = 0;
+};
+
+class CPLUSPLUS_EXPORT DynamicExceptionSpecificationAST: public ExceptionSpecificationAST
+{
+public:
unsigned throw_token;
unsigned lparen_token;
unsigned dot_dot_dot_token;
@@ -1689,7 +1702,7 @@ public:
unsigned rparen_token;
public:
- ExceptionSpecificationAST()
+ DynamicExceptionSpecificationAST()
: throw_token(0)
, lparen_token(0)
, dot_dot_dot_token(0)
@@ -1697,12 +1710,40 @@ public:
, rparen_token(0)
{}
- virtual ExceptionSpecificationAST *asExceptionSpecification() { return this; }
+ virtual DynamicExceptionSpecificationAST *asDynamicExceptionSpecification() { return this; }
+
+ virtual unsigned firstToken() const;
+ virtual unsigned lastToken() const;
+
+ virtual DynamicExceptionSpecificationAST *clone(MemoryPool *pool) const;
+
+protected:
+ virtual void accept0(ASTVisitor *visitor);
+ virtual bool match0(AST *, ASTMatcher *);
+};
+
+class CPLUSPLUS_EXPORT NoExceptSpecificationAST: public ExceptionSpecificationAST
+{
+public:
+ unsigned noexcept_token;
+ unsigned lparen_token;
+ ExpressionAST *expression;
+ unsigned rparen_token;
+
+public:
+ NoExceptSpecificationAST()
+ : noexcept_token(0)
+ , lparen_token(0)
+ , expression(0)
+ , rparen_token(0)
+ {}
+
+ virtual NoExceptSpecificationAST *asNoExceptSpecification() { return this; }
virtual unsigned firstToken() const;
virtual unsigned lastToken() const;
- virtual ExceptionSpecificationAST *clone(MemoryPool *pool) const;
+ virtual NoExceptSpecificationAST *clone(MemoryPool *pool) const;
protected:
virtual void accept0(ASTVisitor *visitor);
diff --git a/src/libs/3rdparty/cplusplus/ASTClone.cpp b/src/libs/3rdparty/cplusplus/ASTClone.cpp
index 961237d0ba..6cca878c19 100644
--- a/src/libs/3rdparty/cplusplus/ASTClone.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTClone.cpp
@@ -578,9 +578,9 @@ ExceptionDeclarationAST *ExceptionDeclarationAST::clone(MemoryPool *pool) const
return ast;
}
-ExceptionSpecificationAST *ExceptionSpecificationAST::clone(MemoryPool *pool) const
+DynamicExceptionSpecificationAST *DynamicExceptionSpecificationAST::clone(MemoryPool *pool) const
{
- ExceptionSpecificationAST *ast = new (pool) ExceptionSpecificationAST;
+ DynamicExceptionSpecificationAST *ast = new (pool) DynamicExceptionSpecificationAST;
ast->throw_token = throw_token;
ast->lparen_token = lparen_token;
ast->dot_dot_dot_token = dot_dot_dot_token;
@@ -591,6 +591,17 @@ ExceptionSpecificationAST *ExceptionSpecificationAST::clone(MemoryPool *pool) co
return ast;
}
+NoExceptSpecificationAST *NoExceptSpecificationAST::clone(MemoryPool *pool) const
+{
+ NoExceptSpecificationAST *ast = new (pool) NoExceptSpecificationAST;
+ ast->noexcept_token = noexcept_token;
+ ast->lparen_token = lparen_token;
+ if (expression)
+ ast->expression = expression->clone(pool);
+ ast->rparen_token = rparen_token;
+ return ast;
+}
+
ExpressionOrDeclarationStatementAST *ExpressionOrDeclarationStatementAST::clone(MemoryPool *pool) const
{
ExpressionOrDeclarationStatementAST *ast = new (pool) ExpressionOrDeclarationStatementAST;
diff --git a/src/libs/3rdparty/cplusplus/ASTMatch0.cpp b/src/libs/3rdparty/cplusplus/ASTMatch0.cpp
index 67d29dee5a..9694be4b4d 100644
--- a/src/libs/3rdparty/cplusplus/ASTMatch0.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTMatch0.cpp
@@ -400,9 +400,17 @@ bool ExceptionDeclarationAST::match0(AST *pattern, ASTMatcher *matcher)
return false;
}
-bool ExceptionSpecificationAST::match0(AST *pattern, ASTMatcher *matcher)
+bool DynamicExceptionSpecificationAST::match0(AST *pattern, ASTMatcher *matcher)
{
- if (ExceptionSpecificationAST *_other = pattern->asExceptionSpecification())
+ if (DynamicExceptionSpecificationAST *_other = pattern->asDynamicExceptionSpecification())
+ return matcher->match(this, _other);
+
+ return false;
+}
+
+bool NoExceptSpecificationAST::match0(AST *pattern, ASTMatcher *matcher)
+{
+ if (NoExceptSpecificationAST *_other = pattern->asNoExceptSpecification())
return matcher->match(this, _other);
return false;
diff --git a/src/libs/3rdparty/cplusplus/ASTMatcher.cpp b/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
index b29f570432..0f7d7056e0 100644
--- a/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
@@ -968,7 +968,7 @@ bool ASTMatcher::match(ExceptionDeclarationAST *node, ExceptionDeclarationAST *p
return true;
}
-bool ASTMatcher::match(ExceptionSpecificationAST *node, ExceptionSpecificationAST *pattern)
+bool ASTMatcher::match(DynamicExceptionSpecificationAST *node, DynamicExceptionSpecificationAST *pattern)
{
(void) node;
(void) pattern;
@@ -989,6 +989,25 @@ bool ASTMatcher::match(ExceptionSpecificationAST *node, ExceptionSpecificationAS
return true;
}
+bool ASTMatcher::match(NoExceptSpecificationAST *node, NoExceptSpecificationAST *pattern)
+{
+ (void) node;
+ (void) pattern;
+
+ pattern->noexcept_token = node->noexcept_token;
+
+ pattern->lparen_token = node->lparen_token;
+
+ if (! pattern->expression)
+ pattern->expression = node->expression;
+ else if (! AST::match(node->expression, pattern->expression, this))
+ return false;
+
+ pattern->rparen_token = node->rparen_token;
+
+ return true;
+}
+
bool ASTMatcher::match(ExpressionOrDeclarationStatementAST *node, ExpressionOrDeclarationStatementAST *pattern)
{
(void) node;
diff --git a/src/libs/3rdparty/cplusplus/ASTMatcher.h b/src/libs/3rdparty/cplusplus/ASTMatcher.h
index 8bb12a9f08..84ec77c84d 100644
--- a/src/libs/3rdparty/cplusplus/ASTMatcher.h
+++ b/src/libs/3rdparty/cplusplus/ASTMatcher.h
@@ -64,12 +64,12 @@ public:
virtual bool match(DeleteExpressionAST *node, DeleteExpressionAST *pattern);
virtual bool match(DestructorNameAST *node, DestructorNameAST *pattern);
virtual bool match(DoStatementAST *node, DoStatementAST *pattern);
+ virtual bool match(DynamicExceptionSpecificationAST *node, DynamicExceptionSpecificationAST *pattern);
virtual bool match(ElaboratedTypeSpecifierAST *node, ElaboratedTypeSpecifierAST *pattern);
virtual bool match(EmptyDeclarationAST *node, EmptyDeclarationAST *pattern);
virtual bool match(EnumSpecifierAST *node, EnumSpecifierAST *pattern);
virtual bool match(EnumeratorAST *node, EnumeratorAST *pattern);
virtual bool match(ExceptionDeclarationAST *node, ExceptionDeclarationAST *pattern);
- virtual bool match(ExceptionSpecificationAST *node, ExceptionSpecificationAST *pattern);
virtual bool match(ExpressionOrDeclarationStatementAST *node, ExpressionOrDeclarationStatementAST *pattern);
virtual bool match(ExpressionStatementAST *node, ExpressionStatementAST *pattern);
virtual bool match(ForStatementAST *node, ForStatementAST *pattern);
@@ -99,6 +99,7 @@ public:
virtual bool match(NewInitializerAST *node, NewInitializerAST *pattern);
virtual bool match(NewPlacementAST *node, NewPlacementAST *pattern);
virtual bool match(NewTypeIdAST *node, NewTypeIdAST *pattern);
+ virtual bool match(NoExceptSpecificationAST *node, NoExceptSpecificationAST *pattern);
virtual bool match(NumericLiteralAST *node, NumericLiteralAST *pattern);
virtual bool match(ObjCClassDeclarationAST *node, ObjCClassDeclarationAST *pattern);
virtual bool match(ObjCClassForwardDeclarationAST *node, ObjCClassForwardDeclarationAST *pattern);
diff --git a/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h b/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
index 2264f22151..f9ab027c79 100644
--- a/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
+++ b/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
@@ -390,13 +390,20 @@ public:
return __ast;
}
- ExceptionSpecificationAST *ExceptionSpecification(ExpressionListAST *type_id_list = 0)
+ DynamicExceptionSpecificationAST *DynamicExceptionSpecification(ExpressionListAST *type_id_list = 0)
{
- ExceptionSpecificationAST *__ast = new (&pool) ExceptionSpecificationAST;
+ DynamicExceptionSpecificationAST *__ast = new (&pool) DynamicExceptionSpecificationAST;
__ast->type_id_list = type_id_list;
return __ast;
}
+ NoExceptSpecificationAST *NoExceptSpecification(ExpressionAST *expression = 0)
+ {
+ NoExceptSpecificationAST *__ast = new (&pool) NoExceptSpecificationAST;
+ __ast->expression = expression;
+ return __ast;
+ }
+
ExpressionOrDeclarationStatementAST *ExpressionOrDeclarationStatement(ExpressionStatementAST *expression = 0, DeclarationStatementAST *declaration = 0)
{
ExpressionOrDeclarationStatementAST *__ast = new (&pool) ExpressionOrDeclarationStatementAST;
diff --git a/src/libs/3rdparty/cplusplus/ASTVisit.cpp b/src/libs/3rdparty/cplusplus/ASTVisit.cpp
index 9d82fb13c9..af0ef827ca 100644
--- a/src/libs/3rdparty/cplusplus/ASTVisit.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTVisit.cpp
@@ -424,7 +424,7 @@ void ExceptionDeclarationAST::accept0(ASTVisitor *visitor)
visitor->endVisit(this);
}
-void ExceptionSpecificationAST::accept0(ASTVisitor *visitor)
+void DynamicExceptionSpecificationAST::accept0(ASTVisitor *visitor)
{
if (visitor->visit(this)) {
accept(type_id_list, visitor);
@@ -432,6 +432,14 @@ void ExceptionSpecificationAST::accept0(ASTVisitor *visitor)
visitor->endVisit(this);
}
+void NoExceptSpecificationAST::accept0(ASTVisitor *visitor)
+{
+ if (visitor->visit(this)) {
+ accept(expression, visitor);
+ }
+ visitor->endVisit(this);
+}
+
void ExpressionOrDeclarationStatementAST::accept0(ASTVisitor *visitor)
{
if (visitor->visit(this)) {
diff --git a/src/libs/3rdparty/cplusplus/ASTVisitor.h b/src/libs/3rdparty/cplusplus/ASTVisitor.h
index bad818dfa7..16f7ebbe68 100644
--- a/src/libs/3rdparty/cplusplus/ASTVisitor.h
+++ b/src/libs/3rdparty/cplusplus/ASTVisitor.h
@@ -106,12 +106,12 @@ public:
virtual bool visit(DeleteExpressionAST *) { return true; }
virtual bool visit(DestructorNameAST *) { return true; }
virtual bool visit(DoStatementAST *) { return true; }
+ virtual bool visit(DynamicExceptionSpecificationAST *) { return true; }
virtual bool visit(ElaboratedTypeSpecifierAST *) { return true; }
virtual bool visit(EmptyDeclarationAST *) { return true; }
virtual bool visit(EnumSpecifierAST *) { return true; }
virtual bool visit(EnumeratorAST *) { return true; }
virtual bool visit(ExceptionDeclarationAST *) { return true; }
- virtual bool visit(ExceptionSpecificationAST *) { return true; }
virtual bool visit(ExpressionOrDeclarationStatementAST *) { return true; }
virtual bool visit(ExpressionStatementAST *) { return true; }
virtual bool visit(ForStatementAST *) { return true; }
@@ -141,6 +141,7 @@ public:
virtual bool visit(NewInitializerAST *) { return true; }
virtual bool visit(NewPlacementAST *) { return true; }
virtual bool visit(NewTypeIdAST *) { return true; }
+ virtual bool visit(NoExceptSpecificationAST *) { return true; }
virtual bool visit(NumericLiteralAST *) { return true; }
virtual bool visit(ObjCClassDeclarationAST *) { return true; }
virtual bool visit(ObjCClassForwardDeclarationAST *) { return true; }
@@ -246,12 +247,12 @@ public:
virtual void endVisit(DeleteExpressionAST *) {}
virtual void endVisit(DestructorNameAST *) {}
virtual void endVisit(DoStatementAST *) {}
+ virtual void endVisit(DynamicExceptionSpecificationAST *) {}
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(ExpressionOrDeclarationStatementAST *) {}
virtual void endVisit(ExpressionStatementAST *) {}
virtual void endVisit(ForStatementAST *) {}
@@ -281,6 +282,7 @@ public:
virtual void endVisit(NewInitializerAST *) {}
virtual void endVisit(NewPlacementAST *) {}
virtual void endVisit(NewTypeIdAST *) {}
+ virtual void endVisit(NoExceptSpecificationAST *) {}
virtual void endVisit(NumericLiteralAST *) {}
virtual void endVisit(ObjCClassDeclarationAST *) {}
virtual void endVisit(ObjCClassForwardDeclarationAST *) {}
diff --git a/src/libs/3rdparty/cplusplus/ASTfwd.h b/src/libs/3rdparty/cplusplus/ASTfwd.h
index b1f529ca39..7df129cbd8 100644
--- a/src/libs/3rdparty/cplusplus/ASTfwd.h
+++ b/src/libs/3rdparty/cplusplus/ASTfwd.h
@@ -66,6 +66,7 @@ class DeclaratorIdAST;
class DeleteExpressionAST;
class DestructorNameAST;
class DoStatementAST;
+class DynamicExceptionSpecificationAST;
class ElaboratedTypeSpecifierAST;
class EmptyDeclarationAST;
class EnumSpecifierAST;
@@ -103,6 +104,7 @@ class NewExpressionAST;
class NewInitializerAST;
class NewPlacementAST;
class NewTypeIdAST;
+class NoExceptSpecificationAST;
class NumericLiteralAST;
class ObjCClassDeclarationAST;
class ObjCClassForwardDeclarationAST;
diff --git a/src/libs/3rdparty/cplusplus/Bind.cpp b/src/libs/3rdparty/cplusplus/Bind.cpp
index ec5f5d7c8a..e78636366f 100644
--- a/src/libs/3rdparty/cplusplus/Bind.cpp
+++ b/src/libs/3rdparty/cplusplus/Bind.cpp
@@ -473,7 +473,7 @@ void Bind::enumerator(EnumeratorAST *ast, Enum *symbol)
}
}
-bool Bind::visit(ExceptionSpecificationAST *ast)
+bool Bind::visit(DynamicExceptionSpecificationAST *ast)
{
(void) ast;
assert(!"unreachable");
@@ -487,11 +487,15 @@ FullySpecifiedType Bind::exceptionSpecification(ExceptionSpecificationAST *ast,
if (! ast)
return type;
- // unsigned throw_token = ast->throw_token;
- // unsigned lparen_token = ast->lparen_token;
- // unsigned dot_dot_dot_token = ast->dot_dot_dot_token;
- for (ExpressionListAST *it = ast->type_id_list; it; it = it->next) {
- ExpressionTy value = this->expression(it->value);
+ if (DynamicExceptionSpecificationAST *dyn = ast->asDynamicExceptionSpecification()) {
+ // unsigned throw_token = ast->throw_token;
+ // unsigned lparen_token = ast->lparen_token;
+ // unsigned dot_dot_dot_token = ast->dot_dot_dot_token;
+ for (ExpressionListAST *it = dyn->type_id_list; it; it = it->next) {
+ /*ExpressionTy value =*/ this->expression(it->value);
+ }
+ } else if (NoExceptSpecificationAST *no = ast->asNoExceptSpecification()) {
+ /*ExpressionTy value =*/ this->expression(no->expression);
}
// unsigned rparen_token = ast->rparen_token;
return type;
diff --git a/src/libs/3rdparty/cplusplus/Bind.h b/src/libs/3rdparty/cplusplus/Bind.h
index b480e0582f..6a2820d3d4 100644
--- a/src/libs/3rdparty/cplusplus/Bind.h
+++ b/src/libs/3rdparty/cplusplus/Bind.h
@@ -119,7 +119,7 @@ protected:
virtual bool visit(BaseSpecifierAST *ast);
virtual bool visit(CtorInitializerAST *ast);
virtual bool visit(EnumeratorAST *ast);
- virtual bool visit(ExceptionSpecificationAST *ast);
+ virtual bool visit(DynamicExceptionSpecificationAST *ast);
virtual bool visit(MemInitializerAST *ast);
virtual bool visit(NestedNameSpecifierAST *ast);
virtual bool visit(NewPlacementAST *ast);
diff --git a/src/libs/3rdparty/cplusplus/Keywords.cpp b/src/libs/3rdparty/cplusplus/Keywords.cpp
index a87a4bd7a9..a09e0f0520 100644
--- a/src/libs/3rdparty/cplusplus/Keywords.cpp
+++ b/src/libs/3rdparty/cplusplus/Keywords.cpp
@@ -814,6 +814,23 @@ static inline int classify8(const char *s, bool q, bool x) {
}
}
}
+ else if (x && s[0] == 'n') {
+ if (s[1] == 'o') {
+ if (s[2] == 'e') {
+ if (s[3] == 'x') {
+ if (s[4] == 'c') {
+ if (s[5] == 'e') {
+ if (s[6] == 'p') {
+ if (s[7] == 't') {
+ return T_NOEXCEPT;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
else if (s[0] == 'o') {
if (s[1] == 'p') {
if (s[2] == 'e') {
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index ede5392dda..1ad7996f40 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -2313,7 +2313,7 @@ bool Parser::parseExceptionSpecification(ExceptionSpecificationAST *&node)
{
DEBUG_THIS_RULE();
if (LA() == T_THROW) {
- ExceptionSpecificationAST *ast = new (_pool) ExceptionSpecificationAST;
+ DynamicExceptionSpecificationAST *ast = new (_pool) DynamicExceptionSpecificationAST;
ast->throw_token = consumeToken();
if (LA() == T_LPAREN)
ast->lparen_token = consumeToken();
@@ -2325,6 +2325,14 @@ bool Parser::parseExceptionSpecification(ExceptionSpecificationAST *&node)
ast->rparen_token = consumeToken();
node = ast;
return true;
+ } else if (_cxx0xEnabled && LA() == T_NOEXCEPT) {
+ NoExceptSpecificationAST *ast = new (_pool) NoExceptSpecificationAST;
+ ast->noexcept_token = consumeToken();
+ if (LA() == T_LPAREN && parseConstantExpression(ast->expression)) {
+ match(T_RPAREN, &ast->rparen_token);
+ }
+ node = ast;
+ return true;
}
return false;
}
diff --git a/src/libs/3rdparty/cplusplus/Token.cpp b/src/libs/3rdparty/cplusplus/Token.cpp
index 6ae8446bac..4b40707cbf 100644
--- a/src/libs/3rdparty/cplusplus/Token.cpp
+++ b/src/libs/3rdparty/cplusplus/Token.cpp
@@ -45,7 +45,8 @@ static const char *token_names[] = {
("delete"), ("do"), ("double"), ("dynamic_cast"), ("else"), ("enum"),
("explicit"), ("export"), ("extern"), ("false"), ("float"), ("for"),
("friend"), ("goto"), ("if"), ("inline"), ("int"), ("long"),
- ("mutable"), ("namespace"), ("new"), ("nullptr"), ("operator"), ("private"),
+ ("mutable"), ("namespace"), ("new"), ("noexcept"),
+ ("nullptr"), ("operator"), ("private"),
("protected"), ("public"), ("register"), ("reinterpret_cast"),
("return"), ("short"), ("signed"), ("sizeof"), ("static"),
("static_cast"), ("struct"), ("switch"), ("template"), ("this"),
diff --git a/src/libs/3rdparty/cplusplus/Token.h b/src/libs/3rdparty/cplusplus/Token.h
index 495e632e23..bc98176b6e 100644
--- a/src/libs/3rdparty/cplusplus/Token.h
+++ b/src/libs/3rdparty/cplusplus/Token.h
@@ -135,6 +135,7 @@ enum Kind {
T_MUTABLE,
T_NAMESPACE,
T_NEW,
+ T_NOEXCEPT,
T_NULLPTR,
T_OPERATOR,
T_PRIVATE,