Tokenizer::simplifyTypedef: some optimizations on new code.

This commit is contained in:
Edoardo Prezioso 2012-01-30 17:08:35 +01:00
parent 7cd36f44b6
commit 11e724df46
1 changed files with 40 additions and 30 deletions

View File

@ -1147,11 +1147,13 @@ void Tokenizer::simplifyTypedef()
// name token wasn't a name, it was part of the type
typeEnd = typeEnd->next();
functionPtr = true;
funcStart = tokOffset->next();
funcEnd = tokOffset->next();
typeName = tokOffset->tokAt(2);
argStart = tokOffset->tokAt(4);
argEnd = tokOffset->linkAt(4);
tokOffset = tokOffset->next();
funcStart = tokOffset;
funcEnd = tokOffset;
tokOffset = tokOffset->tokAt(3);
typeName = tokOffset->tokAt(-2);
argStart = tokOffset;
argEnd = tokOffset->link();
tok = argEnd->next();
}
@ -1221,10 +1223,11 @@ void Tokenizer::simplifyTypedef()
else
function = true;
funcStart = tokOffset->next();
funcEnd = tokOffset->link()->tokAt(-2);
typeName = tokOffset->link()->previous();
argStart = tokOffset->link()->next();
argEnd = tokOffset->link()->next()->link();
tokOffset = tokOffset->link();
funcEnd = tokOffset->tokAt(-2);
typeName = tokOffset->previous();
argStart = tokOffset->next();
argEnd = tokOffset->next()->link();
tok = argEnd->next();
Token *spec = tok;
if (Token::Match(spec, "const|volatile")) {
@ -1243,10 +1246,11 @@ void Tokenizer::simplifyTypedef()
else if (Token::Match(tokOffset, "( %type% (")) {
function = true;
if (tokOffset->link()->next()) {
typeName = tokOffset->next();
argStart = tokOffset->tokAt(2);
argEnd = tokOffset->linkAt(2);
tok = tokOffset->link()->next();
tokOffset = tokOffset->tokAt(2);
typeName = tokOffset->previous();
argStart = tokOffset;
argEnd = tokOffset->link();
} else {
// internal error
continue;
@ -1259,12 +1263,13 @@ void Tokenizer::simplifyTypedef()
Token::Match(tokOffset->linkAt(6)->linkAt(2), ") ;|,")) {
functionPtrRetFuncPtr = true;
typeName = tokOffset->tokAt(4);
argStart = tokOffset->tokAt(6);
argEnd = tokOffset->linkAt(6);
tokOffset = tokOffset->tokAt(6);
typeName = tokOffset->tokAt(-2);
argStart = tokOffset;
argEnd = tokOffset->link();
argFuncRetStart = argEnd->tokAt(2);
argFuncRetEnd = argEnd->linkAt(2);
argFuncRetEnd = argFuncRetStart->link();
tok = argFuncRetEnd->next();
}
@ -1275,23 +1280,25 @@ void Tokenizer::simplifyTypedef()
Token::Match(tokOffset->linkAt(3)->linkAt(2), ") ;|,")) {
functionRetFuncPtr = true;
typeName = tokOffset->tokAt(2);
argStart = tokOffset->tokAt(3);
argEnd = tokOffset->linkAt(3);
tokOffset = tokOffset->tokAt(3);
typeName = tokOffset->previous();
argStart = tokOffset;
argEnd = tokOffset->link();
argFuncRetStart = argEnd->tokAt(2);
argFuncRetEnd = argEnd->linkAt(2);
argFuncRetEnd = argFuncRetStart->link();
tok = argFuncRetEnd->next();
} else if (Token::Match(tokOffset, "( * ( %type% ) (")) {
functionRetFuncPtr = true;
typeName = tokOffset->tokAt(3);
argStart = tokOffset->tokAt(5);
argEnd = tokOffset->linkAt(5);
tokOffset = tokOffset->tokAt(5);
typeName = tokOffset->tokAt(-2);
argStart = tokOffset;
argEnd = tokOffset->link();
argFuncRetStart = argEnd->tokAt(2);
argFuncRetEnd = argEnd->linkAt(2);
argFuncRetEnd = argFuncRetStart->link();
tok = argFuncRetEnd->next();
}
@ -1300,19 +1307,22 @@ void Tokenizer::simplifyTypedef()
else if (Token::Match(tokOffset, "( *|& %type% ) [")) {
ptrToArray = (tokOffset->next()->str() == "*");
refToArray = (tokOffset->next()->str() == "&");
typeName = tokOffset->tokAt(2);
arrayStart = tokOffset->tokAt(4);
tokOffset = tokOffset->tokAt(2);
typeName = tokOffset;
arrayStart = tokOffset->tokAt(2);
arrayEnd = arrayStart->link();
tok = arrayEnd->next();
}
// pointer to class member
else if (Token::Match(tokOffset, "( %type% :: * %type% ) ;")) {
namespaceStart = tokOffset->next();
namespaceEnd = tokOffset->tokAt(2);
tokOffset = tokOffset->tokAt(2);
namespaceStart = tokOffset->previous();
namespaceEnd = tokOffset;
ptrMember = true;
typeName = tokOffset->tokAt(4);
tok = tokOffset->tokAt(6);
tokOffset = tokOffset->tokAt(2);
typeName = tokOffset;
tok = tokOffset->tokAt(2);
}
// unhandled typedef, skip it and continue