From 615095fca20c4cfd9597f7310d9c0dcbf8a76e0f Mon Sep 17 00:00:00 2001 From: Nicolas Le Cam Date: Sun, 21 Dec 2008 18:26:06 +0000 Subject: [PATCH] Optimization: Speed up typedef simplification. --- tokenize.cpp | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/tokenize.cpp b/tokenize.cpp index 048715953..63bd42d5f 100644 --- a/tokenize.cpp +++ b/tokenize.cpp @@ -533,45 +533,41 @@ void Tokenizer::tokenizeCode(std::istream &code, const unsigned int FileIndex) } // typedef.. - for ( TOKEN *tok = _tokens; tok; tok = tok->next() ) + for ( TOKEN *tok = _tokens; tok; ) { - if (TOKEN::Match(tok, "typedef %type% %type% ;")) + if ( TOKEN::Match(tok, "typedef %type% %type% ;") ) { - const char *type1 = tok->strAt( 1); - const char *type2 = tok->strAt( 2); + const char *type1 = tok->strAt(1); + const char *type2 = tok->strAt(2); + tok = const_cast(tok->tokAt(4)); for ( TOKEN *tok2 = tok; tok2; tok2 = tok2->next() ) { - if (tok2->aaaa()!=type1 && tok2->aaaa()!=type2 && (tok2->str() == type2)) - { + if ( tok2->str() == type2 ) tok2->setstr(type1); - } } + continue; } - else if (TOKEN::Match(tok, "typedef %type% %type% %type% ;")) + else if ( TOKEN::Match(tok, "typedef %type% %type% %type% ;") ) { - const char *type1 = tok->strAt( 1); - const char *type2 = tok->strAt( 2); - const char *type3 = tok->strAt( 3); - - TOKEN *tok2 = tok; - while ( ! TOKEN::Match(tok2, ";") ) - tok2 = tok2->next(); - - for ( ; tok2; tok2 = tok2->next() ) + const char *type1 = tok->strAt(1); + const char *type2 = tok->strAt(2); + const char *type3 = tok->strAt(3); + tok = const_cast(tok->tokAt(5)); + for ( TOKEN *tok2 = tok; tok2; tok2 = tok2->next() ) { - if (tok2->aaaa()!=type3 && (tok2->str() == type3)) + if ( tok2->str() == type3 ) { tok2->setstr(type1); - tok2->insertToken( type2 ); - tok2->next()->fileIndex( tok2->fileIndex() ); - tok2->next()->linenr( tok2->linenr() ); + tok2->insertToken(type2); tok2 = tok2->next(); } } + continue; } - } + tok = tok->next(); + } // Remove __asm.. for ( TOKEN *tok = _tokens; tok; tok = tok->next() )