Fixed #2676 (setVarId: variables with global scope qualification :: don't get varids)
This commit is contained in:
parent
4fe0eab735
commit
2b08744b97
|
@ -1058,7 +1058,7 @@ std::list<std::string> Preprocessor::getcfgs(const std::string &filedata, const
|
|||
if (!line.empty() && line.compare(0, 3, "#if") != 0)
|
||||
includeguard = false;
|
||||
|
||||
if (line[0] != '#')
|
||||
if (line.empty() || line[0] != '#')
|
||||
continue;
|
||||
|
||||
if (includeguard)
|
||||
|
|
|
@ -57,6 +57,8 @@ void Token::str(const std::string &s)
|
|||
{
|
||||
_str = s;
|
||||
|
||||
if (!_str.empty())
|
||||
{
|
||||
_isName = bool(_str[0] == '_' || std::isalpha(_str[0]));
|
||||
|
||||
if (std::isdigit(_str[0]))
|
||||
|
@ -70,6 +72,7 @@ void Token::str(const std::string &s)
|
|||
_isBoolean = true;
|
||||
else
|
||||
_isBoolean = false;
|
||||
}
|
||||
|
||||
_varId = 0;
|
||||
}
|
||||
|
|
|
@ -3398,7 +3398,7 @@ void Tokenizer::setVarId()
|
|||
_varId = 0;
|
||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||
{
|
||||
if (tok != _tokens && !Token::Match(tok, "[;{}(,] %type%"))
|
||||
if (tok != _tokens && !Token::Match(tok, "[;{}(,] %type%") && !Token::Match(tok, "[;{}(,] ::"))
|
||||
continue;
|
||||
|
||||
if (_errorLogger)
|
||||
|
@ -3416,7 +3416,7 @@ void Tokenizer::setVarId()
|
|||
continue;
|
||||
}
|
||||
|
||||
if (Token::Match(tok, "[,;{}(] %type%"))
|
||||
if (Token::Match(tok, "[,;{}(] %type%") || Token::Match(tok, "[;{}(,] ::"))
|
||||
{
|
||||
// not function declaration?
|
||||
// TODO: Better checking
|
||||
|
@ -3456,6 +3456,10 @@ void Tokenizer::setVarId()
|
|||
while (Token::Match(tok, "const|static|extern|public:|private:|protected:|;|mutable"))
|
||||
tok = tok->next();
|
||||
|
||||
// skip global namespace prefix
|
||||
if (Token::Match(tok, "::"))
|
||||
tok = tok->next();
|
||||
|
||||
while (Token::Match(tok, "%var% ::"))
|
||||
tok = tok->tokAt(2);
|
||||
|
||||
|
|
|
@ -88,6 +88,9 @@ private:
|
|||
// return c_str()..
|
||||
TEST_CASE(returncstr1);
|
||||
TEST_CASE(returncstr2);
|
||||
|
||||
// global namespace
|
||||
TEST_CASE(testglobalnamespace);
|
||||
}
|
||||
|
||||
|
||||
|
@ -429,6 +432,22 @@ private:
|
|||
ASSERT_EQUALS("[test.cpp:11]: (error) Returning pointer to temporary\n", errout.str());
|
||||
}
|
||||
|
||||
|
||||
void testglobalnamespace()
|
||||
{
|
||||
check("class SharedPtrHolder\n"
|
||||
"{\n"
|
||||
" ::std::tr1::shared_ptr<int> pNum;\n"
|
||||
"public:\n"
|
||||
" void SetNum(const ::std::tr1::shared_ptr<int> & apNum)\n"
|
||||
" {\n"
|
||||
" pNum = apNum;\n"
|
||||
" }\n"
|
||||
"}");
|
||||
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
REGISTER_TEST(TestAutoVariables)
|
||||
|
|
Loading…
Reference in New Issue