aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools/cplusplus-ast2png
diff options
context:
space:
mode:
authorClaus Steuer <claus755@gmail.com>2015-07-22 11:08:01 +0200
committerClaus Steuer <claus755@gmail.com>2015-10-03 17:24:45 +0000
commit158b07c9c84c8bcd77620f36fe6f1e3eb8d7f224 (patch)
tree843867c4d879e1f4f759661289e584ecd8383148 /src/tools/cplusplus-ast2png
parentb1f6974954bfb135a4dd6c0747dec896ef7d8102 (diff)
C++: Support noexcept operator
The code model failed to parse the noexcept operator which is often used in noexcept specifiers, e.g.: "void f() noexcept(noexcept(g()));" Consequently some c++11 headers such as unordered_map, array and unordered_set could not be parsed and no code completition was available. I have created the NoExceptOperatorExpressionAST class which is created whenever a noexcept token is found in an expression with operator precedence. The noExcept test case in the cplusplus/cxx11 test now contains a function that uses the noexcept operator. Fixed noexcept operator parsing Added the test requested by Sergey Shambir, which then revealed that i had not implemeneted the noexpect operator parsing according to the c++ specification. As stated here http://cpp0x.centaur.ath.cx/expr.unary.noexcept.html the noexcept operator is a unary-expression that contains an expression (and not a constant-expression). This should now be fixed. Change-Id: Id4a99a43b660bd83e7680274491d99a698b57094 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src/tools/cplusplus-ast2png')
-rw-r--r--src/tools/cplusplus-ast2png/dumpers.inc8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/tools/cplusplus-ast2png/dumpers.inc b/src/tools/cplusplus-ast2png/dumpers.inc
index aea2150a71..166c014013 100644
--- a/src/tools/cplusplus-ast2png/dumpers.inc
+++ b/src/tools/cplusplus-ast2png/dumpers.inc
@@ -1237,6 +1237,14 @@ virtual bool visit(ThrowExpressionAST *ast)
return false;
}
+virtual bool visit(NoExceptOperatorExpressionAST *ast)
+{
+ if (ast->noexcept_token)
+ terminal(ast->noexcept_token, ast);
+ nonterminal(ast->expression);
+ return false;
+}
+
virtual bool visit(TranslationUnitAST *ast)
{
for (DeclarationListAST *iter = ast->declaration_list; iter; iter = iter->next)