diff --git a/token.cpp b/token.cpp index 030872d34..2829207de 100644 --- a/token.cpp +++ b/token.cpp @@ -37,6 +37,7 @@ TOKEN::TOKEN() _varId = 0; _isName = false; _isNumber = false; + _isBoolean = false; } TOKEN::~TOKEN() @@ -55,6 +56,11 @@ void TOKEN::setstr( const char s[] ) #endif _isName = bool(_str[0]=='_' || isalpha(_str[0])); _isNumber = bool(isdigit(_str[0]) != 0); + if( _str == "true" || _str == "false" ) + _isBoolean = true; + else + _isBoolean = false; + _varId = 0; } @@ -227,10 +233,15 @@ bool TOKEN::Match(const TOKEN *tok, const char pattern[], const char *varname1[] else if (strcmp(str,"%num%")==0) { - if ( ! tok->isNumber() ) + if ( !tok->isNumber() ) return false; } + else if (strcmp(str,"%bool%")==0) + { + if ( !tok->isBoolean() ) + return false; + } else if (strcmp(str,"%str%")==0) { @@ -297,6 +308,11 @@ bool TOKEN::isNumber() const return _isNumber; } +bool TOKEN::isBoolean() const +{ + return _isBoolean; +} + bool TOKEN::isStandardType() const { bool ret = false; diff --git a/token.h b/token.h index 0beb83a07..a301d9340 100644 --- a/token.h +++ b/token.h @@ -68,6 +68,7 @@ public: * "%any%" any token * "%var%" any token which is a name or type e.g. "hello" or "int" * "%num%" Any numeric token, e.g. "23" + * "%bool%" true or false * "%str%" Any token starting with "-character (C-string). * "%var1%" Match with parameter varname1 * "%var2%" Match with parameter varname2 @@ -96,6 +97,7 @@ public: bool isName() const; bool isNumber() const; + bool isBoolean() const; bool isStandardType() const; static const TOKEN *findmatch(const TOKEN *tok, const char pattern[], const char *varname1[]=0, const char *varname2[]=0); @@ -172,6 +174,7 @@ private: char * _cstr; bool _isName; bool _isNumber; + bool _isBoolean; unsigned int _varId; TOKEN *_next; TOKEN *_previous; diff --git a/tokenize.cpp b/tokenize.cpp index ac6b23609..1c7b6a680 100644 --- a/tokenize.cpp +++ b/tokenize.cpp @@ -1200,8 +1200,10 @@ bool Tokenizer::simplifyKnownVariables() // parse the block of code.. int indentlevel = 0; + for ( TOKEN *tok2 = tok; tok2; tok2 = tok2->next() ) { + if ( tok2->str() == "{" ) ++indentlevel; @@ -1212,7 +1214,8 @@ bool Tokenizer::simplifyKnownVariables() continue; } - else if ( TOKEN::Match(tok2, "%var% = %num% ;") ) + else if ( TOKEN::Match(tok2, "%var% = %num% ;") || + TOKEN::Match(tok2, "%var% = %bool% ;")) { unsigned int varid = tok2->varId(); for ( TOKEN *tok3 = tok2->next(); tok3; tok3 = tok3->next() )