Fixed #4517 (Testmemleak should not use Tokenizer on pseudo code)

This commit is contained in:
Frank Zingsheim 2013-01-27 02:41:43 +01:00 committed by Daniel Marjamäki
parent 6238db3a78
commit 6dc9987ad0
1 changed files with 13 additions and 11 deletions

View File

@ -19,6 +19,7 @@
#include "tokenize.h" #include "tokenize.h"
#include "tokenlist.h"
#include "checkmemoryleak.h" #include "checkmemoryleak.h"
#include "testsuite.h" #include "testsuite.h"
#include "symboldatabase.h" #include "symboldatabase.h"
@ -641,10 +642,10 @@ private:
Settings settings; Settings settings;
// Tokenize.. // Tokenize..
Tokenizer tokenizer(&settings, this);
std::istringstream istr(code); std::istringstream istr(code);
tokenizer.tokenize(istr, "test.cpp"); TokenList list(&settings);
Token *tokens = const_cast<Token *>(tokenizer.tokens()); list.createTokens(istr,"test.cpp");
Token *tokens=list.front();
// replace "if ( ! var )" => "if(!var)" // replace "if ( ! var )" => "if(!var)"
for (Token *tok = tokens; tok; tok = tok->next()) { for (Token *tok = tokens; tok; tok = tok->next()) {
@ -659,10 +660,10 @@ private:
} }
} }
CheckMemoryLeakInFunction checkMemoryLeak(&tokenizer, &settings, NULL); CheckMemoryLeakInFunction checkMemoryLeak(NULL, &settings, NULL);
checkMemoryLeak.simplifycode(tokens); checkMemoryLeak.simplifycode(tokens);
return tokenizer.tokens()->stringifyList(0, false); return list.front()->stringifyList(0, false);
} }
@ -689,9 +690,9 @@ private:
ASSERT_EQUALS("; alloc ;", simplifycode("; if { alloc; } else { return; }")); ASSERT_EQUALS("; alloc ;", simplifycode("; if { alloc; } else { return; }"));
ASSERT_EQUALS("; alloc ; dealloc ;", simplifycode("; alloc ; if(!var) { alloc ; } dealloc ;")); ASSERT_EQUALS("; alloc ; dealloc ;", simplifycode("; alloc ; if(!var) { alloc ; } dealloc ;"));
ASSERT_EQUALS("; use ;", simplifycode("; if(var) use ;")); ASSERT_EQUALS("; use ;", simplifycode("; if(var) use ;"));
ASSERT_EQUALS(";", simplifycode("; if break ; else break ;")); ASSERT_EQUALS("; break ;", simplifycode("; if break ; else break ;"));
ASSERT_EQUALS("; alloc ; if return ;", simplifycode("; alloc ; loop { if return ; if continue ; }")); ASSERT_EQUALS("; alloc ; if return ;", simplifycode("; alloc ; loop { if return ; if continue ; }"));
ASSERT_EQUALS("; alloc ; loop return ;", simplifycode("; alloc ; loop { if continue ; else return ; }")); ASSERT_EQUALS("; alloc ; if return ;", simplifycode("; alloc ; loop { if continue ; else return ; }"));
ASSERT_EQUALS("; alloc ; if dealloc ;", simplifycode("; alloc ; if(!var) { return ; } if { dealloc ; }")); ASSERT_EQUALS("; alloc ; if dealloc ;", simplifycode("; alloc ; if(!var) { return ; } if { dealloc ; }"));
ASSERT_EQUALS("; if alloc ; else assign ; return use ;", simplifycode("; callfunc ; if callfunc { alloc ; } else { assign ; } return use ;")); ASSERT_EQUALS("; if alloc ; else assign ; return use ;", simplifycode("; callfunc ; if callfunc { alloc ; } else { assign ; } return use ;"));
@ -811,12 +812,13 @@ private:
settings.debug = settings.debugwarnings = true; settings.debug = settings.debugwarnings = true;
// Tokenize.. // Tokenize..
Tokenizer tokenizer(&settings, this);
std::istringstream istr(code); std::istringstream istr(code);
tokenizer.tokenize(istr, "test.cpp"); TokenList list(&settings);
list.createTokens(istr,"test.cpp");
Token *tokens=list.front();
// replace "if ( ! var )" => "if(!var)" // replace "if ( ! var )" => "if(!var)"
for (Token *tok = const_cast<Token *>(tokenizer.tokens()); tok; tok = tok->next()) { for (Token *tok = tokens; tok; tok = tok->next()) {
if (tok->str() == "if_var") { if (tok->str() == "if_var") {
tok->str("if(var)"); tok->str("if(var)");
} }
@ -832,7 +834,7 @@ private:
} }
} }
const Token *tok = CheckMemoryLeakInFunction::findleak(tokenizer.tokens()); const Token *tok = CheckMemoryLeakInFunction::findleak(tokens);
return (tok ? tok->linenr() : (unsigned int)(-1)); return (tok ? tok->linenr() : (unsigned int)(-1));
} }