fix #2911 (Token::Match(tok, %oror%|&&) doesn't match &&)
This commit is contained in:
parent
8d68981119
commit
daf0c71f77
|
@ -561,6 +561,9 @@ bool Token::Match(const Token *tok, const char pattern[], unsigned int varid)
|
||||||
int result = multiCompare(p, tok->str().c_str());
|
int result = multiCompare(p, tok->str().c_str());
|
||||||
if (result == -1)
|
if (result == -1)
|
||||||
return false; // No match
|
return false; // No match
|
||||||
|
|
||||||
|
while (*p && *p != ' ')
|
||||||
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// single compare..
|
// single compare..
|
||||||
|
@ -568,38 +571,40 @@ bool Token::Match(const Token *tok, const char pattern[], unsigned int varid)
|
||||||
{
|
{
|
||||||
if (tok->str() != "|")
|
if (tok->str() != "|")
|
||||||
return false;
|
return false;
|
||||||
|
p += 4;
|
||||||
}
|
}
|
||||||
else if (p[3] == 'p')
|
else if (p[3] == 'p')
|
||||||
{
|
{
|
||||||
if (!tok->isOp())
|
if (!tok->isOp())
|
||||||
return false;
|
return false;
|
||||||
|
p += 4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
patternUnderstood = false;
|
patternUnderstood = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Oror (%oror%)
|
// Oror (%oror%)
|
||||||
else
|
else if (p[5] == '%')
|
||||||
{
|
{
|
||||||
// multicompare..
|
// multicompare..
|
||||||
if (p[5] == '|')
|
if (p[6] == '|')
|
||||||
{
|
{
|
||||||
int result = multiCompare(p, tok->str().c_str());
|
int result = multiCompare(p, tok->str().c_str());
|
||||||
if (result == -1)
|
if (result == -1)
|
||||||
return false; // No match
|
return false; // No match
|
||||||
|
|
||||||
|
while (*p && *p != ' ')
|
||||||
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// single compare..
|
// single compare..
|
||||||
if (tok->str() != "||")
|
else if (tok->str() != "||")
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
patternUnderstood = true;
|
else
|
||||||
}
|
p += 6;
|
||||||
|
|
||||||
if (patternUnderstood)
|
patternUnderstood = true;
|
||||||
{
|
|
||||||
while (*p && *p != ' ')
|
|
||||||
p++;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -234,17 +234,20 @@ private:
|
||||||
{
|
{
|
||||||
givenACodeSampleToTokenize bitwiseOr("|");
|
givenACodeSampleToTokenize bitwiseOr("|");
|
||||||
ASSERT_EQUALS(true, Token::Match(bitwiseOr.tokens(), "%or%"));
|
ASSERT_EQUALS(true, Token::Match(bitwiseOr.tokens(), "%or%"));
|
||||||
|
ASSERT_EQUALS(false, Token::Match(bitwiseOr.tokens(), "%op%"));
|
||||||
|
ASSERT_EQUALS(false, Token::Match(bitwiseOr.tokens(), "%oror%"));
|
||||||
|
|
||||||
givenACodeSampleToTokenize logicalOr("||");
|
givenACodeSampleToTokenize logicalOr("||");
|
||||||
ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "%oror%"));
|
|
||||||
ASSERT_EQUALS(false, Token::Match(logicalOr.tokens(), "%or%"));
|
ASSERT_EQUALS(false, Token::Match(logicalOr.tokens(), "%or%"));
|
||||||
ASSERT_EQUALS(false, Token::Match(bitwiseOr.tokens(), "%oror%"));
|
ASSERT_EQUALS(false, Token::Match(logicalOr.tokens(), "%op%"));
|
||||||
|
ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "%oror%"));
|
||||||
ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "&&|%oror%"));
|
ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "&&|%oror%"));
|
||||||
ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "%oror%|&&"));
|
ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "%oror%|&&"));
|
||||||
|
|
||||||
givenACodeSampleToTokenize logicalAnd("&&");
|
givenACodeSampleToTokenize logicalAnd("&&");
|
||||||
|
ASSERT_EQUALS(true, Token::Match(logicalAnd.tokens(), "&&"));
|
||||||
ASSERT_EQUALS(true, Token::Match(logicalAnd.tokens(), "&&|%oror%"));
|
ASSERT_EQUALS(true, Token::Match(logicalAnd.tokens(), "&&|%oror%"));
|
||||||
TODO_ASSERT_EQUALS(true, false, Token::Match(logicalAnd.tokens(), "%oror%|&&"));
|
ASSERT_EQUALS(true, Token::Match(logicalAnd.tokens(), "%oror%|&&"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void matchOp()
|
void matchOp()
|
||||||
|
|
Loading…
Reference in New Issue