tokenizer: Added functions "alwaysTrue" and "alwaysFalse" to check if a
condition is always true / false
This commit is contained in:
parent
125692bc65
commit
9ce8918895
|
@ -41,7 +41,10 @@ private:
|
|||
|
||||
TEST_CASE( inlineasm );
|
||||
|
||||
TEST_CASE( dupfuncname );
|
||||
TEST_CASE( dupfuncname );
|
||||
|
||||
TEST_CASE( alwaysTrue );
|
||||
TEST_CASE( alwaysFalse );
|
||||
}
|
||||
|
||||
|
||||
|
@ -155,6 +158,47 @@ private:
|
|||
|
||||
ASSERT_EQUALS( 1, tokenizer.FunctionList.size() );
|
||||
ASSERT_EQUALS( std::string("b"), tokenizer.FunctionList[0]->str );
|
||||
}
|
||||
|
||||
|
||||
bool alwaysTrueCheck(const char condition[])
|
||||
{
|
||||
// tokenize..
|
||||
Tokenizer tokenizer( this );
|
||||
tokenizer.getFiles()->push_back( "test.cpp" );
|
||||
std::istringstream istr(condition);
|
||||
tokenizer.TokenizeCode(istr, 0);
|
||||
|
||||
// check..
|
||||
return tokenizer.alwaysTrue( tokenizer.tokens() );
|
||||
}
|
||||
|
||||
void alwaysTrue()
|
||||
{
|
||||
ASSERT_EQUALS(true, alwaysTrueCheck("(1)"));
|
||||
ASSERT_EQUALS(true, alwaysTrueCheck("(true)"));
|
||||
ASSERT_EQUALS(true, alwaysTrueCheck("(true || false)"));
|
||||
ASSERT_EQUALS(false, alwaysTrueCheck("(true && false)"));
|
||||
}
|
||||
|
||||
bool alwaysFalseCheck(const char condition[])
|
||||
{
|
||||
// tokenize..
|
||||
Tokenizer tokenizer( this );
|
||||
tokenizer.getFiles()->push_back( "test.cpp" );
|
||||
std::istringstream istr(condition);
|
||||
tokenizer.TokenizeCode(istr, 0);
|
||||
|
||||
// check..
|
||||
return tokenizer.alwaysFalse( tokenizer.tokens() );
|
||||
}
|
||||
|
||||
void alwaysFalse()
|
||||
{
|
||||
ASSERT_EQUALS(true, alwaysFalseCheck("(0)"));
|
||||
ASSERT_EQUALS(true, alwaysFalseCheck("(false)"));
|
||||
ASSERT_EQUALS(true, alwaysFalseCheck("(false && true)"));
|
||||
ASSERT_EQUALS(false, alwaysFalseCheck("(false || true)"));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
16
tokenize.cpp
16
tokenize.cpp
|
@ -1468,7 +1468,7 @@ bool Tokenizer::Match(const TOKEN *tok, const char pattern[], const char *varnam
|
|||
return false;
|
||||
|
||||
tok = tok->next;
|
||||
if (!tok)
|
||||
if (!tok && *p)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1517,3 +1517,17 @@ bool Tokenizer::IsStandardType(const char str[])
|
|||
Ret |= (strcmp(str,type[i])==0);
|
||||
return Ret;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool Tokenizer::alwaysTrue( const TOKEN *tok )
|
||||
{
|
||||
return (Match(tok,"( 1 [|)]") | Match(tok,"( 1 ||") |
|
||||
Match(tok,"( true [|)]") | Match(tok,"( true ||"));
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool Tokenizer::alwaysFalse( const TOKEN *tok )
|
||||
{
|
||||
return (Match(tok,"( 0 [&)]") | Match(tok,"( 0 &&") |
|
||||
Match(tok,"( false [&)]") | Match(tok,"( false &&"));
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
|
@ -90,6 +90,8 @@ public:
|
|||
static bool IsNumber(const char str[]);
|
||||
static bool IsStandardType(const char str[]);
|
||||
|
||||
bool alwaysTrue( const TOKEN *tok );
|
||||
bool alwaysFalse( const TOKEN *tok );
|
||||
|
||||
std::string fileLine( const TOKEN *tok );
|
||||
|
||||
|
|
Loading…
Reference in New Issue