Skip to content

Commit a097135

Browse files
committed
Tweaked Tokenizer::simplifyAsm2()
1 parent 97dccef commit a097135

3 files changed

Lines changed: 27 additions & 32 deletions

File tree

lib/tokenize.cpp

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9305,42 +9305,36 @@ void Tokenizer::simplifyAsm2()
93059305

93069306
if (Token::simpleMatch(tok, "^ {") || Token::simpleMatch(tok->linkAt(1), ") {")) {
93079307
Token * start = tok;
9308-
while (start && !Token::Match(start, "[;{}=]")) {
9308+
while (start && !Token::Match(start, "[,(;{}=]")) {
93099309
if (start->link() && Token::Match(start, ")|]|>"))
93109310
start = start->link();
93119311
start = start->previous();
93129312
}
9313-
if (start)
9314-
start = start->next();
9313+
93159314
const Token *last = tok->next()->link();
93169315
if (Token::simpleMatch(last, ") {"))
93179316
last = last->linkAt(1);
9318-
if (start != tok) {
9317+
last = last->next();
9318+
while (last && !Token::Match(last, "%cop%|,|;|{|}|)")) {
9319+
if (Token::Match(last, "(|["))
9320+
last = last->link();
93199321
last = last->next();
9320-
while (last && !Token::Match(last, "[;{})]")) {
9321-
last = last->next();
9322-
if (last && last->link() && last->str() == "(")
9323-
last = last->link()->next();
9324-
}
9325-
if (last)
9326-
last = last->next();
93279322
}
9323+
93289324
if (start && last) {
9329-
std::string asmcode(start->str());
9325+
std::string asmcode;
93309326
while (start->next() != last) {
93319327
asmcode += start->next()->str();
93329328
start->deleteNext();
93339329
}
9334-
asmcode += last->str();
9335-
start->deleteNext();
9336-
start->insertToken(";");
9330+
if (last->str() == "}")
9331+
start->insertToken(";");
93379332
start->insertToken(")");
93389333
start->insertToken("\"" + asmcode + "\"");
93399334
start->insertToken("(");
9340-
start->str("asm");
9341-
start->link(nullptr);
9342-
start->next()->link(start->tokAt(3));
9343-
start->tokAt(3)->link(start->next());
9335+
start->insertToken("asm");
9336+
start->tokAt(2)->link(start->tokAt(4));
9337+
start->tokAt(4)->link(start->tokAt(2));
93449338
tok = start->tokAt(4);
93459339
}
93469340
}

test/testgarbage.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,8 +679,8 @@ class TestGarbage : public TestFixture {
679679
}
680680

681681
void garbageCode58() { // #6732, #6762
682-
ASSERT_THROW(checkCode("{ }> {= ~A()^{} }P { }"), InternalError);
683-
ASSERT_THROW(checkCode("{= ~A()^{} }P { } { }> is"), InternalError);
682+
checkCode("{ }> {= ~A()^{} }P { }");
683+
checkCode("{= ~A()^{} }P { } { }> is");
684684
}
685685

686686
void garbageCode59() { // #6735

test/testtokenize.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -999,31 +999,32 @@ class TestTokenizer : public TestFixture {
999999
// #4725 - ^{}
10001000
void simplifyAsm2() {
10011001
ASSERT_EQUALS("void f ( ) { asm ( \"^{}\" ) ; }", tokenizeAndStringify("void f() { ^{} }"));
1002-
ASSERT_EQUALS("void f ( ) { asm ( \"x(^{});\" ) ; }", tokenizeAndStringify("void f() { x(^{}); }"));
1003-
ASSERT_EQUALS("void f ( ) { asm ( \"foo(A(),^{bar();});\" ) ; }", tokenizeAndStringify("void f() { foo(A(), ^{ bar(); }); }"));
1004-
ASSERT_EQUALS("int f0 ( Args args ) {\n"
1005-
"asm ( \"return^{returnsizeof...(Args);}()+\" ) ;\n"
1006-
"\n"
1007-
"asm ( \"^{returnsizeof...(args);}\" ) ;\n"
1008-
"\n"
1009-
"\n"
1002+
ASSERT_EQUALS("void f ( ) { x ( asm ( \"^{}\" ) ) ; }", tokenizeAndStringify("void f() { x(^{}); }"));
1003+
ASSERT_EQUALS("void f ( ) { foo ( A ( ) , asm ( \"^{bar();}\" ) ) ; }", tokenizeAndStringify("void f() { foo(A(), ^{ bar(); }); }"));
1004+
ASSERT_EQUALS("int f0 ( Args args ) { asm ( \"asm(\"return^{returnsizeof...(Args);}()\")+^{returnsizeof...(args);}()\" )\n"
1005+
"2:\n"
1006+
"|\n"
1007+
"5:\n"
1008+
"6: ;\n"
10101009
"} ;", tokenizeAndStringify("int f0(Args args) {\n"
10111010
" return ^{\n"
10121011
" return sizeof...(Args);\n"
10131012
" }() + ^ {\n"
10141013
" return sizeof...(args);\n"
10151014
" }();\n"
10161015
"};"));
1017-
ASSERT_EQUALS("int ( ^ block ) ( void ) = asm ( \"^{staticinttest=0;returntest;}\" ) ;",
1016+
ASSERT_EQUALS("int ( ^ block ) ( void ) = asm ( \"^{staticinttest=0;returntest;}\" )\n\n\n;",
10181017
tokenizeAndStringify("int(^block)(void) = ^{\n"
10191018
" static int test = 0;\n"
10201019
" return test;\n"
10211020
"};"));
10221021

1023-
ASSERT_EQUALS("; asm ( \"returnf(a[b=c],^{});\" ) ;",
1022+
ASSERT_EQUALS("; return f ( a [ b = c ] , asm ( \"^{}\" ) ) ;",
10241023
tokenizeAndStringify("; return f(a[b=c],^{});")); // #7185
1025-
ASSERT_EQUALS("; asm ( \"returnf(^(void){somecode});\" ) ;",
1024+
ASSERT_EQUALS("; return f ( asm ( \"^(void){somecode}\" ) ) ;",
10261025
tokenizeAndStringify("; return f(^(void){somecode});"));
1026+
ASSERT_EQUALS("; asm ( \"a?(b?(c,asm(\"^{}\")):0):^{}\" ) ;",
1027+
tokenizeAndStringify(";a?(b?(c,^{}):0):^{};"));
10271028
}
10281029

10291030
void ifAddBraces1() {

0 commit comments

Comments
 (0)