diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index ae3c67631..669c0671e 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3210,6 +3210,9 @@ void Tokenizer::simplifyFunctionParameters() { // We have found old style function, now we need to change it + // backup pointer to the '(' token + Token * const tok1 = tok->next(); + // Get list of argument names std::map argumentNames; bool bailOut = false; @@ -3239,6 +3242,9 @@ void Tokenizer::simplifyFunctionParameters() if (bailOut) { + tok = tok1->link(); + if (!tok) + return; continue; } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index e50efc735..80b1689de 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -43,6 +43,9 @@ private: TEST_CASE(tokenize2); TEST_CASE(tokenize3); + // don't freak out when the syntax is wrong + TEST_CASE(wrong_syntax); + TEST_CASE(minus); TEST_CASE(longtok); @@ -255,6 +258,14 @@ private: ASSERT_EQUALS("", errout.str()); } + void wrong_syntax() + { + errout.str(""); + const std::string code("TR(kvmpio, PROTO(int rw), ARGS(rw), TP_(aa->rw;))"); + ASSERT_EQUALS("TR ( kvmpio , PROTO ( int rw ) , ARGS ( rw ) , TP_ ( aa . rw ; ) )", tokenizeAndStringify(code.c_str(), true)); + ASSERT_EQUALS("", errout.str()); + } + void minus() { ASSERT_EQUALS("i = -12", tokenizeAndStringify("i = -12"));