Skip to content

Commit

Permalink
Tokenizer::simplifyTypedef: 'tokAt(offset)=>tokOffset': finished.
Browse files Browse the repository at this point in the history
  • Loading branch information
Edoardo Prezioso committed Jan 30, 2012
1 parent 67d095a commit 7cd36f4
Showing 1 changed file with 24 additions and 37 deletions.
61 changes: 24 additions & 37 deletions lib/tokenize.cpp
Expand Up @@ -984,7 +984,6 @@ void Tokenizer::simplifyTypedef()
Token *argFuncRetEnd = 0; Token *argFuncRetEnd = 0;
Token *funcStart = 0; Token *funcStart = 0;
Token *funcEnd = 0; Token *funcEnd = 0;
unsigned int offset = 1;
Token *tokOffset = tok->next(); Token *tokOffset = tok->next();
bool function = false; bool function = false;
bool functionPtr = false; bool functionPtr = false;
Expand All @@ -1008,30 +1007,24 @@ void Tokenizer::simplifyTypedef()
typeStart = tok->next(); typeStart = tok->next();


while (Token::Match(tokOffset, "const|signed|unsigned|struct|enum %type%") || while (Token::Match(tokOffset, "const|signed|unsigned|struct|enum %type%") ||
(tokOffset->next() && tokOffset->next()->isStandardType())) { (tokOffset->next() && tokOffset->next()->isStandardType()))
++offset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
}


++offset;
typeEnd = tokOffset; typeEnd = tokOffset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();


bool atEnd = false; bool atEnd = false;
while (!atEnd) { while (!atEnd) {
if (tokOffset && tokOffset->str() == "::") { if (tokOffset && tokOffset->str() == "::") {
++offset;
typeEnd = tokOffset; typeEnd = tokOffset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
} }


if (Token::Match(tokOffset, "%type%") && if (Token::Match(tokOffset, "%type%") &&
tokOffset->next() && !Token::Match(tokOffset->next(), "[|;|,|(")) { tokOffset->next() && !Token::Match(tokOffset->next(), "[|;|,|(")) {
++offset;
typeEnd = tokOffset; typeEnd = tokOffset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
} else if (Token::simpleMatch(tokOffset, "const (")) { } else if (Token::simpleMatch(tokOffset, "const (")) {
++offset;
typeEnd = tokOffset; typeEnd = tokOffset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
atEnd = true; atEnd = true;
Expand Down Expand Up @@ -1077,14 +1070,12 @@ void Tokenizer::simplifyTypedef()
typeEnd = typeEnd->next(); typeEnd = typeEnd->next();


tok = typeEnd; tok = typeEnd;
offset = 1;
tokOffset = tok->next(); tokOffset = tok->next();
} }


// check for pointers and references // check for pointers and references
while (Token::Match(tokOffset, "*|&|const")) { while (Token::Match(tokOffset, "*|&|const")) {
pointers.push_back(tokOffset->str()); pointers.push_back(tokOffset->str());
++offset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
} }


Expand All @@ -1096,7 +1087,6 @@ void Tokenizer::simplifyTypedef()


if (Token::Match(tokOffset, "%type%")) { if (Token::Match(tokOffset, "%type%")) {
// found the type name // found the type name
++offset;
typeName = tokOffset; typeName = tokOffset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();


Expand All @@ -1107,7 +1097,6 @@ void Tokenizer::simplifyTypedef()
bool atEnd = false; bool atEnd = false;
while (!atEnd) { while (!atEnd) {
while (tokOffset->next() && !Token::Match(tokOffset->next(), ";|,")) { while (tokOffset->next() && !Token::Match(tokOffset->next(), ";|,")) {
++offset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
} }


Expand All @@ -1117,13 +1106,10 @@ void Tokenizer::simplifyTypedef()
atEnd = true; atEnd = true;
else if (tokOffset->str() == "]") else if (tokOffset->str() == "]")
atEnd = true; atEnd = true;
else { else
++offset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
}
} }


++offset;
arrayEnd = tokOffset; arrayEnd = tokOffset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
} }
Expand Down Expand Up @@ -1223,13 +1209,10 @@ void Tokenizer::simplifyTypedef()
(Token::simpleMatch(tokOffset, "( * (") && (Token::simpleMatch(tokOffset, "( * (") &&
Token::Match(tokOffset->linkAt(2)->previous(), "%type% ) (") && Token::Match(tokOffset->linkAt(2)->previous(), "%type% ) (") &&
Token::Match(tokOffset->linkAt(2)->next()->link(), ") const|volatile| ) ;|,"))) { Token::Match(tokOffset->linkAt(2)->next()->link(), ") const|volatile| ) ;|,"))) {
if (tokOffset->next()->str() == "(") { if (tokOffset->next()->str() == "(")
++offset;
tokOffset = tokOffset->next(); tokOffset = tokOffset->next();
} else if (Token::simpleMatch(tokOffset, "( * (")) { else if (Token::simpleMatch(tokOffset, "( * (")) {
++offset;
pointers.push_back("*"); pointers.push_back("*");
++offset;
tokOffset = tokOffset->tokAt(2); tokOffset = tokOffset->tokAt(2);
} }


Expand Down Expand Up @@ -1813,38 +1796,42 @@ void Tokenizer::simplifyTypedef()
else if (tok->str() == ",") { else if (tok->str() == ",") {
arrayStart = 0; arrayStart = 0;
arrayEnd = 0; arrayEnd = 0;
offset = 1; tokOffset = tok->next();
pointers.clear(); pointers.clear();


while (Token::Match(tok->tokAt(offset), "*|&")) while (Token::Match(tokOffset, "*|&")) {
pointers.push_back(tok->strAt(offset++)); pointers.push_back(tokOffset->str());
tokOffset = tokOffset->next();
}


if (Token::Match(tok->tokAt(offset), "%type%")) { if (Token::Match(tokOffset, "%type%")) {
typeName = tok->tokAt(offset++); typeName = tokOffset;
tokOffset = tokOffset->next();


if (tok->tokAt(offset) && tok->strAt(offset) == "[") { if (tokOffset && tokOffset->str() == "[") {
arrayStart = tok->tokAt(offset); arrayStart = tokOffset;


bool atEnd = false; bool atEnd = false;
while (!atEnd) { while (!atEnd) {
while (tok->tokAt(offset + 1) && !Token::Match(tok->tokAt(offset + 1), ";|,")) while (tokOffset->next() && !Token::Match(tokOffset->next(), ";|,"))
++offset; tokOffset = tokOffset->next();


if (!tok->tokAt(offset + 1)) if (!tokOffset->next())
return; // invalid input return; // invalid input
else if (tok->strAt(offset + 1) == ";") else if (tokOffset->next()->str() == ";")
atEnd = true; atEnd = true;
else if (tok->strAt(offset) == "]") else if (tokOffset->str() == "]")
atEnd = true; atEnd = true;
else else
++offset; tokOffset = tokOffset->next();
} }


arrayEnd = tok->tokAt(offset++); arrayEnd = tokOffset;
tokOffset = tokOffset->next();
} }


if (Token::Match(tok->tokAt(offset), ";|,")) if (Token::Match(tokOffset, ";|,"))
tok = tok->tokAt(offset); tok = tokOffset;
else { else {
// we encountered a typedef we don't support yet so just continue // we encountered a typedef we don't support yet so just continue
done = true; done = true;
Expand Down

0 comments on commit 7cd36f4

Please sign in to comment.