aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools/cplusplus-ast2png
diff options
context:
space:
mode:
authorVolodymyr Zibarov <gogan419@gmail.com>2020-05-14 23:07:05 +0300
committerVolodymyr Zibarov <gogan419@gmail.com>2020-05-29 12:39:28 +0000
commit9ee693ee229d28bd618e8dd44bc6b12750d43a29 (patch)
tree7a2a4dd6679fd3647228b5c39d1fc2724ff133a3 /src/tools/cplusplus-ast2png
parentbe97943372bc80d2440daa20cd658599d765b9a9 (diff)
C++: fix built-in code model to work with shared_ptr on MSVC 2017
These changes target Find Usages feature to work with shared_ptr. Improve libs/3rdparty/cplusplus and plugins/cplusplus: parse __declspec() attribute, call to variadic function template without specified template arguments, if constexpr, c++11 attributes [[value]], function templates with default parameters, resolve order for function vs template with default parameter, template operator->() with default arguments, template specialization with numeric values, find best partial specialization, fix partial specialization for non-first specialized argument Fixes: QTCREATORBUG-7866 Fixes: QTCREATORBUG-20781 Fixes: QTCREATORBUG-22857 Fixes: QTCREATORBUG-17825 Change-Id: I31a080f7729edfb2ee9650f1aff48daeba5a673b Reviewed-by: Christian Kandeler <christian.kandeler@qt.io> Reviewed-by: Nikolai Kosjar <pinaceae.pinus@gmail.com>
Diffstat (limited to 'src/tools/cplusplus-ast2png')
-rw-r--r--src/tools/cplusplus-ast2png/dumpers.inc30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/tools/cplusplus-ast2png/dumpers.inc b/src/tools/cplusplus-ast2png/dumpers.inc
index 166c014013..177b2f268c 100644
--- a/src/tools/cplusplus-ast2png/dumpers.inc
+++ b/src/tools/cplusplus-ast2png/dumpers.inc
@@ -81,6 +81,34 @@ virtual bool visit(GnuAttributeSpecifierAST *ast)
return false;
}
+virtual bool visit(MsvcDeclspecSpecifierAST *ast)
+{
+ if (ast->attribute_token)
+ terminal(ast->attribute_token, ast);
+ if (ast->lparen_token)
+ terminal(ast->lparen_token, ast);
+ for (GnuAttributeListAST *iter = ast->attribute_list; iter; iter = iter->next)
+ nonterminal(iter->value);
+ if (ast->rparen_token)
+ terminal(ast->rparen_token, ast);
+ return false;
+}
+
+virtual bool visit(StdAttributeSpecifierAST *ast)
+{
+ if (ast->first_lbracket_token)
+ terminal(ast->first_lbracket_token, ast);
+ if (ast->second_lbracket_token)
+ terminal(ast->second_lbracket_token, ast);
+ for (GnuAttributeListAST *iter = ast->attribute_list; iter; iter = iter->next)
+ nonterminal(iter->value);
+ if (ast->first_rbracket_token)
+ terminal(ast->first_rbracket_token, ast);
+ if (ast->second_rbracket_token)
+ terminal(ast->second_rbracket_token, ast);
+ return false;
+}
+
virtual bool visit(GnuAttributeAST *ast)
{
if (ast->identifier_token)
@@ -714,6 +742,8 @@ virtual bool visit(IfStatementAST *ast)
{
if (ast->if_token)
terminal(ast->if_token, ast);
+ if (ast->constexpr_token)
+ terminal(ast->constexpr_token, ast);
if (ast->lparen_token)
terminal(ast->lparen_token, ast);
nonterminal(ast->condition);