diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 62dff0038..7d26a34dd 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -1074,6 +1074,9 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti bool SymbolDatabase::isFunction(const Token *tok, const Scope* outerScope, const Token **funcStart, const Token **argStart) { + if (tok->varId()) + return false; + // function returning function pointer? '... ( ... %var% ( ... ))( ... ) {' if (tok->str() == "(" && tok->link()->previous()->str() == ")") { diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index dc35ae8a0..5a88c4dc7 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -152,6 +152,7 @@ private: TEST_CASE(testConstructors); TEST_CASE(functionDeclarationTemplate); TEST_CASE(functionDeclarations); + TEST_CASE(constructorInitialization); TEST_CASE(memberFunctionOfUnknownClassMacro1); TEST_CASE(memberFunctionOfUnknownClassMacro2); TEST_CASE(memberFunctionOfUnknownClassMacro3); @@ -1054,6 +1055,19 @@ private: } } + void constructorInitialization() { + GET_SYMBOL_DB("std::string logfile;\n" + "std::ofstream log(logfile.c_str(), std::ios::out);"); + + // 1 scope: Global + ASSERT(db && db->scopeList.size() == 1); + + if (db && db->scopeList.size() >= 1) { + // No functions + ASSERT(db->scopeList.front().functionList.empty()); + } + } + void memberFunctionOfUnknownClassMacro1() { GET_SYMBOL_DB("class ScVbaFormatCondition { OUString getServiceImplName() SAL_OVERRIDE; };\n" "void ScVbaValidation::getFormula1() {\n"