reverted 5f522fb841
, to avoid hang in TestBufferOverrun::arrayInfo
This commit is contained in:
parent
ee39f6402c
commit
04159b81b8
155
lib/tokenize.cpp
155
lib/tokenize.cpp
|
@ -1935,35 +1935,26 @@ bool Tokenizer::tokenize(std::istream &code,
|
||||||
tok->str(MathLib::toString(tok->linenr()));
|
tok->str(MathLib::toString(tok->linenr()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'double sharp' token concatenation
|
// token concatenation
|
||||||
{
|
for (Token *tok = _tokens; tok; tok = tok->next()) {
|
||||||
bool goback = false;
|
// TODO: pattern should be "%var%|%num% ## %var%|%num%"
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next()) {
|
if (Token::Match(tok, "%any% ## %any%") &&
|
||||||
if (goback) {
|
(tok->isName() || tok->isNumber()) &&
|
||||||
goback = false;
|
(tok->tokAt(2)->isName() || tok->tokAt(2)->isNumber())) {
|
||||||
|
tok->str(tok->str() + tok->strAt(2));
|
||||||
|
tok->deleteNext(2);
|
||||||
|
if (tok->previous())
|
||||||
tok = tok->previous();
|
tok = tok->previous();
|
||||||
}
|
|
||||||
// TODO: pattern should be "%var%|%num% ## %var%|%num%"
|
|
||||||
if (Token::Match(tok, "%any% ## %any%") &&
|
|
||||||
(tok->isName() || tok->isNumber()) &&
|
|
||||||
(tok->tokAt(2)->isName() || tok->tokAt(2)->isNumber())) {
|
|
||||||
tok->str(tok->str() + tok->strAt(2));
|
|
||||||
tok->deleteNext(2);
|
|
||||||
goback = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert C# code
|
// Convert C# code
|
||||||
if (_files[0].find(".cs")) {
|
if (_files[0].find(".cs")) {
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next()) {
|
for (Token *tok = _tokens; tok; tok = tok->next()) {
|
||||||
if (Token::Match(tok, "%type% [ ] %var% [=;]") &&
|
if (Token::Match(tok, "[;{}] %type% [ ] %var% [=;]")) {
|
||||||
(!tok->previous() || Token::Match(tok->previous(), "[;{}]"))) {
|
|
||||||
tok->deleteNext(2);
|
|
||||||
tok->insertToken("*");
|
|
||||||
tok = tok->tokAt(2);
|
tok = tok->tokAt(2);
|
||||||
if (tok->next()->str() == "=")
|
tok->str("*");
|
||||||
tok = tok->next();
|
tok->deleteNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2629,12 +2620,9 @@ void Tokenizer::simplifyLabelsCaseDefault()
|
||||||
// Simplify labels in the executable scope..
|
// Simplify labels in the executable scope..
|
||||||
unsigned int indentlevel = 0;
|
unsigned int indentlevel = 0;
|
||||||
while (NULL != (tok = tok->next())) {
|
while (NULL != (tok = tok->next())) {
|
||||||
if (tok->str() == "{") {
|
if (tok->str() == "{")
|
||||||
if (tok->previous() && tok->previous()->str() == "=")
|
++indentlevel;
|
||||||
tok = tok->link();
|
else if (tok->str() == "}") {
|
||||||
else
|
|
||||||
++indentlevel;
|
|
||||||
} else if (tok->str() == "}") {
|
|
||||||
--indentlevel;
|
--indentlevel;
|
||||||
if (!indentlevel)
|
if (!indentlevel)
|
||||||
break;
|
break;
|
||||||
|
@ -5715,15 +5703,18 @@ void Tokenizer::simplifyVarDecl(bool only_k_r_fpar)
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next()) {
|
for (Token *tok = _tokens; tok; tok = tok->next()) {
|
||||||
if (Token::simpleMatch(tok, "= {")) {
|
if (Token::simpleMatch(tok, "= {")) {
|
||||||
tok = tok->next()->link();
|
tok = tok->next()->link();
|
||||||
|
if (!tok)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (only_k_r_fpar) {
|
if (only_k_r_fpar) {
|
||||||
if (tok->link()) {
|
if (tok->str() == "(" || tok->str() == "{") {
|
||||||
tok = tok->link();
|
tok = tok->link();
|
||||||
|
if (!tok)
|
||||||
|
break;
|
||||||
if (tok->next() && Token::Match(tok, ") !!{"))
|
if (tok->next() && Token::Match(tok, ") !!{"))
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
else
|
else continue;
|
||||||
continue;
|
|
||||||
} else
|
} else
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -5777,9 +5768,10 @@ void Tokenizer::simplifyVarDecl(bool only_k_r_fpar)
|
||||||
if (Token::Match(tok2, "%type% *| %var% ,|=")) {
|
if (Token::Match(tok2, "%type% *| %var% ,|=")) {
|
||||||
const bool isPointer = (tok2->next()->str() == "*");
|
const bool isPointer = (tok2->next()->str() == "*");
|
||||||
const Token *varName = tok2->tokAt((isPointer ? 2 : 1));
|
const Token *varName = tok2->tokAt((isPointer ? 2 : 1));
|
||||||
|
Token *endDeclaration = varName->next();
|
||||||
|
|
||||||
if (varName->str() != "operator") {
|
if (varName->str() != "operator") {
|
||||||
tok2 = varName->next(); // The ',' or '=' token
|
tok2 = endDeclaration; // The ',' or '=' token
|
||||||
|
|
||||||
if (isstatic && tok2->str() == "=") {
|
if (isstatic && tok2->str() == "=") {
|
||||||
if (Token::Match(tok2->next(), "%num% ,"))
|
if (Token::Match(tok2->next(), "%num% ,"))
|
||||||
|
@ -5874,69 +5866,70 @@ void Tokenizer::simplifyVarDecl(bool only_k_r_fpar)
|
||||||
--typelen;
|
--typelen;
|
||||||
} else {
|
} else {
|
||||||
tok2 = NULL;
|
tok2 = NULL;
|
||||||
|
typelen = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
tok2 = NULL;
|
tok2 = NULL;
|
||||||
|
typelen = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tok2)
|
if (tok2) {
|
||||||
continue;
|
if (tok2->str() == ",") {
|
||||||
|
tok2->str(";");
|
||||||
|
insertTokens(tok2, type0, typelen);
|
||||||
|
std::stack<Token *> link1;
|
||||||
|
std::stack<Token *> link2;
|
||||||
|
while (((typelen--) > 0) && (NULL != (tok2 = tok2->next()))) {
|
||||||
|
if (tok2->str() == "(")
|
||||||
|
link1.push(tok2);
|
||||||
|
else if (tok2->str() == ")" && !link1.empty()) {
|
||||||
|
Token::createMutualLinks(tok2, link1.top());
|
||||||
|
link1.pop();
|
||||||
|
}
|
||||||
|
|
||||||
if (tok2->str() == ",") {
|
else if (tok2->str() == "[")
|
||||||
tok2->str(";");
|
link2.push(tok2);
|
||||||
insertTokens(tok2, type0, typelen);
|
else if (tok2->str() == "]" && !link2.empty()) {
|
||||||
std::stack<Token *> link1;
|
Token::createMutualLinks(tok2, link2.top());
|
||||||
std::stack<Token *> link2;
|
link2.pop();
|
||||||
while (((typelen--) > 0) && (NULL != (tok2 = tok2->next()))) {
|
}
|
||||||
if (tok2->str() == "(")
|
|
||||||
link1.push(tok2);
|
|
||||||
else if (tok2->str() == ")" && !link1.empty()) {
|
|
||||||
Token::createMutualLinks(tok2, link1.top());
|
|
||||||
link1.pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (tok2->str() == "[")
|
|
||||||
link2.push(tok2);
|
|
||||||
else if (tok2->str() == "]" && !link2.empty()) {
|
|
||||||
Token::createMutualLinks(tok2, link2.top());
|
|
||||||
link2.pop();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
else {
|
||||||
Token *eq = tok2;
|
Token *eq = tok2;
|
||||||
|
|
||||||
unsigned int level = 0;
|
unsigned int level = 0;
|
||||||
while (tok2) {
|
while (tok2) {
|
||||||
if (Token::Match(tok2, "[{(]"))
|
if (Token::Match(tok2, "[{(]"))
|
||||||
tok2 = tok2->link();
|
tok2 = tok2->link();
|
||||||
|
|
||||||
else if (tok2->str() == "<") {
|
else if (tok2->str() == "<") {
|
||||||
if (tok2->previous()->isName() && !tok2->previous()->varId())
|
if (tok2->previous()->isName() && !tok2->previous()->varId())
|
||||||
++level;
|
++level;
|
||||||
}
|
|
||||||
|
|
||||||
else if (level > 0 && tok2->str() == ">")
|
|
||||||
--level;
|
|
||||||
|
|
||||||
else if (level == 0 && strchr(";,", tok2->str()[0])) {
|
|
||||||
// "type var =" => "type var; var ="
|
|
||||||
Token *VarTok = type0->tokAt((int)typelen);
|
|
||||||
while (Token::Match(VarTok, "*|&|const"))
|
|
||||||
VarTok = VarTok->next();
|
|
||||||
insertTokens(eq, VarTok, 2);
|
|
||||||
eq->str(";");
|
|
||||||
|
|
||||||
// "= x, " => "= x; type "
|
|
||||||
if (tok2->str() == ",") {
|
|
||||||
tok2->str(";");
|
|
||||||
insertTokens(tok2, type0, typelen);
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
tok2 = tok2->next();
|
else if (level > 0 && tok2->str() == ">")
|
||||||
|
--level;
|
||||||
|
|
||||||
|
else if (level == 0 && strchr(";,", tok2->str()[0])) {
|
||||||
|
// "type var =" => "type var; var ="
|
||||||
|
Token *VarTok = type0->tokAt((int)typelen);
|
||||||
|
while (Token::Match(VarTok, "*|&|const"))
|
||||||
|
VarTok = VarTok->next();
|
||||||
|
insertTokens(eq, VarTok, 2);
|
||||||
|
eq->str(";");
|
||||||
|
|
||||||
|
// "= x, " => "= x; type "
|
||||||
|
if (tok2->str() == ",") {
|
||||||
|
tok2->str(";");
|
||||||
|
insertTokens(tok2, type0, typelen);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tok2 = tok2->next();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3882,7 +3882,7 @@ private:
|
||||||
|
|
||||||
|
|
||||||
void doublesharp() {
|
void doublesharp() {
|
||||||
const char code[] = "a##_##b TEST(var,val) var##_##val = val\n";
|
const char code[] = "TEST(var,val) var##_##val = val\n";
|
||||||
|
|
||||||
errout.str("");
|
errout.str("");
|
||||||
|
|
||||||
|
@ -3898,7 +3898,7 @@ private:
|
||||||
for (const Token *tok = tokenizer.tokens(); tok; tok = tok->next())
|
for (const Token *tok = tokenizer.tokens(); tok; tok = tok->next())
|
||||||
ostr << tok->str() << " ";
|
ostr << tok->str() << " ";
|
||||||
|
|
||||||
ASSERT_EQUALS("a_b TEST ( var , val ) var_val = val ", ostr.str());
|
ASSERT_EQUALS("TEST ( var , val ) var_val = val ", ostr.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void macrodoublesharp() {
|
void macrodoublesharp() {
|
||||||
|
@ -5876,7 +5876,6 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
void cs() {
|
void cs() {
|
||||||
ASSERT_EQUALS("int * i ;", tokenizeAndStringify("int [] i;"));
|
|
||||||
ASSERT_EQUALS("; int * i ;", tokenizeAndStringify("; int [] i;"));
|
ASSERT_EQUALS("; int * i ;", tokenizeAndStringify("; int [] i;"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue