diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 63159ed61..393cc2276 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3243,7 +3243,7 @@ void Tokenizer::simplifyLabelsCaseDefault() void Tokenizer::simplifyCaseRange() { for (Token* tok = list.front(); tok; tok = tok->next()) { - if (Token::Match(tok, "case %num% ... %num% :")) { + if (Token::Match(tok, "case %num%|%char% ... %num%|%char% :")) { const MathLib::bigint start = MathLib::toLongNumber(tok->strAt(1)); MathLib::bigint end = MathLib::toLongNumber(tok->strAt(3)); end = std::min(start + 50, end); // Simplify it 50 times at maximum @@ -3257,23 +3257,6 @@ void Tokenizer::simplifyCaseRange() tok->insertToken("case"); } } - } else if (Token::Match(tok, "case %char% ... %char% :")) { - const char start = tok->strAt(1)[1]; - const char end = tok->strAt(3)[1]; - if (start < end) { - tok = tok->tokAt(2); - tok->str(":"); - tok->insertToken("case"); - for (char i = end - 1; i > start; i--) { - tok->insertToken(":"); - if (i == '\\') { - tok->insertToken(std::string("\'\\") + i + '\''); - } else { - tok->insertToken(std::string(1, '\'') + i + '\''); - } - tok->insertToken("case"); - } - } } } } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 3f05e2f11..8f379bda3 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -5400,10 +5400,13 @@ private: ASSERT_EQUALS("void f ( ) { switch ( x ) { case 4 ... 1 : ; } }", tokenizeAndStringify("void f() { switch(x) { case 4 ... 1: } }")); tokenizeAndStringify("void f() { switch(x) { case 1 ... 1000000: } }"); // Do not run out of memory - ASSERT_EQUALS("void f ( ) { switch ( x ) { case 'a' : case 'b' : case 'c' : ; } }", tokenizeAndStringify("void f() { switch(x) { case 'a' ... 'c': } }")); + ASSERT_EQUALS("void f ( ) { switch ( x ) { case 'a' : case 98 : case 'c' : ; } }", tokenizeAndStringify("void f() { switch(x) { case 'a' ... 'c': } }")); ASSERT_EQUALS("void f ( ) { switch ( x ) { case 'c' ... 'a' : ; } }", tokenizeAndStringify("void f() { switch(x) { case 'c' ... 'a': } }")); - ASSERT_EQUALS("void f ( ) { switch ( x ) { case '[' : case '\\\\' : case ']' : ; } }", tokenizeAndStringify("void f() { switch(x) { case '[' ... ']': } }")); + ASSERT_EQUALS("void f ( ) { switch ( x ) { case '[' : case 92 : case ']' : ; } }", tokenizeAndStringify("void f() { switch(x) { case '[' ... ']': } }")); + + ASSERT_EQUALS("void f ( ) { switch ( x ) { case '&' : case 39 : case '(' : ; } }", tokenizeAndStringify("void f() { switch(x) { case '&' ... '(': } }")); + ASSERT_EQUALS("void f ( ) { switch ( x ) { case '\\x61' : case 98 : case '\\x63' : ; } }", tokenizeAndStringify("void f() { switch(x) { case '\\x61' ... '\\x63': } }")); } void simplifyEmptyNamespaces() {