Fixed #2882 (One-character token can be mistaken for a multiCompare)

This commit is contained in:
John Smits 2011-07-15 19:01:36 +02:00 committed by Daniel Marjamäki
parent af1e51f648
commit 7f2d62cbde
2 changed files with 16 additions and 1 deletions

View File

@ -621,8 +621,11 @@ bool Token::Match(const Token *tok, const char pattern[], unsigned int varid)
}
// [.. => search for a one-character token..
else if (p[0] == '[' && tok->_str.length() == 1 && chrInFirstWord(p, ']'))
else if (p[0] == '[' && chrInFirstWord(p, ']'))
{
if(tok->_str.length() != 1)
return false;
const char *temp = p + 1;
bool chrFound = false;
int count = 0;

View File

@ -42,6 +42,7 @@ private:
TEST_CASE(deleteLast);
TEST_CASE(matchAny);
TEST_CASE(matchSingleChar);
TEST_CASE(matchNothingOrAnyNotElse);
TEST_CASE(matchNumeric);
TEST_CASE(matchBoolean);
@ -144,6 +145,17 @@ private:
givenACodeSampleToTokenize varLogOrVar("abc||def");
ASSERT_EQUALS(true, Token::Match(varLogOrVar.tokens(), "%var% || %var%"));
}
void matchSingleChar()
{
givenACodeSampleToTokenize singleChar("a");
ASSERT_EQUALS(true, Token::Match(singleChar.tokens(), "[a|bc]"));
ASSERT_EQUALS(false, Token::Match(singleChar.tokens(), "[d|ef]"));
Token multiChar(0);
multiChar.str("[ab");
ASSERT_EQUALS(false, Token::Match(&multiChar, "[ab|def]"));
}
void matchNothingOrAnyNotElse()
{