Fixed bug in fixAngleBrackets
This commit is contained in:
parent
e2debac882
commit
7112f69d7b
|
@ -865,6 +865,16 @@ const Token * Token::findClosingBracket() const
|
|||
const bool templateParameter(strAt(-1) == "template");
|
||||
std::set<std::string> templateParameters;
|
||||
|
||||
bool isDecl = true;
|
||||
for (const Token *prev = previous(); prev; prev = prev->previous()) {
|
||||
if (prev->str() == "=")
|
||||
isDecl = false;
|
||||
if (Token::simpleMatch(prev, "template <"))
|
||||
isDecl = true;
|
||||
if (Token::Match(prev, "[;{}]"))
|
||||
break;
|
||||
}
|
||||
|
||||
unsigned int depth = 0;
|
||||
for (closing = this; closing != nullptr; closing = closing->next()) {
|
||||
if (Token::Match(closing, "{|[|(")) {
|
||||
|
@ -882,6 +892,8 @@ const Token * Token::findClosingBracket() const
|
|||
if (--depth == 0)
|
||||
return closing;
|
||||
} else if (closing->str() == ">>" || closing->str() == ">>=") {
|
||||
if (!isDecl && depth == 1)
|
||||
continue;
|
||||
if (depth <= 2)
|
||||
return closing;
|
||||
depth -= 2;
|
||||
|
|
|
@ -348,6 +348,8 @@ private:
|
|||
TEST_CASE(functionAttributeBefore);
|
||||
TEST_CASE(functionAttributeAfter);
|
||||
|
||||
TEST_CASE(fixAngleBrackets);
|
||||
|
||||
TEST_CASE(cpp03template1);
|
||||
TEST_CASE(cpp0xtemplate1);
|
||||
TEST_CASE(cpp0xtemplate2);
|
||||
|
@ -5270,6 +5272,13 @@ private:
|
|||
ASSERT(func5 && func5->isAttributeNoreturn());
|
||||
}
|
||||
|
||||
void fixAngleBrackets() {
|
||||
{
|
||||
const char *code = "; z = x < 0 ? x >> y : x >> y;";
|
||||
ASSERT_EQUALS("; z = x < 0 ? x >> y : x >> y ;", tokenizeAndStringify(code));
|
||||
}
|
||||
}
|
||||
|
||||
void cpp03template1() {
|
||||
{
|
||||
const char *code = "template<typename> struct extent {};";
|
||||
|
|
Loading…
Reference in New Issue