Bugfix: Update token properties on string changes
This commit is contained in:
parent
9e50b7cb68
commit
5b97cc1440
|
@ -54,10 +54,8 @@ Token::~Token()
|
|||
|
||||
}
|
||||
|
||||
void Token::str(const std::string &s)
|
||||
void Token::update_property_info()
|
||||
{
|
||||
_str = s;
|
||||
|
||||
if (!_str.empty()) {
|
||||
_isName = bool(_str[0] == '_' || std::isalpha(_str[0]));
|
||||
|
||||
|
@ -72,15 +70,27 @@ void Token::str(const std::string &s)
|
|||
_isBoolean = true;
|
||||
else
|
||||
_isBoolean = false;
|
||||
} else {
|
||||
_isName = false;
|
||||
_isNumber = false;
|
||||
_isBoolean = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Token::str(const std::string &s)
|
||||
{
|
||||
_str = s;
|
||||
_varId = 0;
|
||||
|
||||
update_property_info();
|
||||
}
|
||||
|
||||
void Token::concatStr(std::string const& b)
|
||||
{
|
||||
_str.erase(_str.length() - 1);
|
||||
_str.append(b.begin() + 1, b.end());
|
||||
|
||||
update_property_info();
|
||||
}
|
||||
|
||||
std::string Token::strValue() const
|
||||
|
|
|
@ -440,6 +440,10 @@ private:
|
|||
unsigned int _fileIndex;
|
||||
unsigned int _linenr;
|
||||
|
||||
/** Updates internal property cache like _isName or _isBoolean.
|
||||
Called after any _str() modification. */
|
||||
void update_property_info();
|
||||
|
||||
/**
|
||||
* A value from 0-100 that provides a rough idea about where in the token
|
||||
* list this token is located.
|
||||
|
|
|
@ -46,6 +46,13 @@ private:
|
|||
TEST_CASE(matchNumeric);
|
||||
TEST_CASE(matchBoolean);
|
||||
TEST_CASE(matchOr);
|
||||
|
||||
TEST_CASE(updateProperties)
|
||||
TEST_CASE(isNameGuarantees1)
|
||||
TEST_CASE(isNameGuarantees2)
|
||||
TEST_CASE(isNameGuarantees3)
|
||||
TEST_CASE(isNameGuarantees4)
|
||||
TEST_CASE(isNameGuarantees5)
|
||||
}
|
||||
|
||||
void nextprevious() {
|
||||
|
@ -253,6 +260,51 @@ private:
|
|||
givenACodeSampleToTokenize op("+");
|
||||
ASSERT_EQUALS(true, Token::Match(op.tokens(), "%op%"));
|
||||
}
|
||||
|
||||
void updateProperties() {
|
||||
Token tok(NULL);
|
||||
tok.str("foobar");
|
||||
|
||||
ASSERT_EQUALS(true, tok.isName());
|
||||
ASSERT_EQUALS(false, tok.isNumber());
|
||||
|
||||
tok.str("123456");
|
||||
|
||||
ASSERT_EQUALS(false, tok.isName());
|
||||
ASSERT_EQUALS(true, tok.isNumber());
|
||||
}
|
||||
|
||||
void isNameGuarantees1() {
|
||||
Token tok(NULL);
|
||||
tok.str("Name");
|
||||
ASSERT_EQUALS(true, tok.isName());
|
||||
}
|
||||
|
||||
void isNameGuarantees2() {
|
||||
Token tok(NULL);
|
||||
tok.str("_name");
|
||||
ASSERT_EQUALS(true, tok.isName());
|
||||
}
|
||||
|
||||
void isNameGuarantees3() {
|
||||
Token tok(NULL);
|
||||
tok.str("_123");
|
||||
ASSERT_EQUALS(true, tok.isName());
|
||||
}
|
||||
|
||||
void isNameGuarantees4() {
|
||||
Token tok(NULL);
|
||||
tok.str("123456");
|
||||
ASSERT_EQUALS(false, tok.isName());
|
||||
ASSERT_EQUALS(true, tok.isNumber());
|
||||
}
|
||||
|
||||
void isNameGuarantees5() {
|
||||
Token tok(NULL);
|
||||
tok.str("a123456");
|
||||
ASSERT_EQUALS(true, tok.isName());
|
||||
ASSERT_EQUALS(false, tok.isNumber());
|
||||
}
|
||||
};
|
||||
|
||||
REGISTER_TEST(TestToken)
|
||||
|
|
Loading…
Reference in New Issue