From abb155a44e352b68e9fa4c586962c341ed8a66ec Mon Sep 17 00:00:00 2001 From: helly Date: Sat, 8 Apr 2006 16:39:48 +0000 Subject: [PATCH] - Replace switch(yyaccept) with if expression when there is only one case --- code.cc | 32 +++++++++++++++++++++++++++++--- test/bug1163046.c | 4 ++-- test/bug1187785.c | 4 ++-- test/bug1297658.c | 4 ++-- test/bug1390174.c | 4 ++-- test/cvsignore.b.c | 4 ++-- test/cvsignore.c | 4 ++-- test/cvsignore.s.c | 4 ++-- test/cvsignore.w.c | 4 ++-- test/cvsignore.wb.c | 4 ++-- test/input1.c | 4 ++-- test/input11.b.c | 4 ++-- test/input11.c | 4 ++-- test/input11.s.c | 4 ++-- test/sample.c | 4 ++-- test/scanner.c | 8 ++++---- 16 files changed, 61 insertions(+), 35 deletions(-) diff --git a/code.cc b/code.cc index e40525dd..0a5e27be 100644 --- a/code.cc +++ b/code.cc @@ -433,8 +433,18 @@ Accept::Accept(State *x, uint n, uint *s, State **r) void Accept::emit(std::ostream &o, uint ind, bool &readCh) const { bool first = true; + uint cases = 0; for (uint i = 0; i < nRules; ++i) + { + if (saves[i] != ~0u) + { + cases++; + } + } + + for (uint i = 0; i < nRules; ++i) + { if (saves[i] != ~0u) { if (first) @@ -442,15 +452,31 @@ void Accept::emit(std::ostream &o, uint ind, bool &readCh) const first = false; bUsedYYAccept = true; o << indent(ind) << "YYCURSOR = YYMARKER;\n"; - o << indent(ind) << "switch(yyaccept){\n"; + if (cases > 1) + { + o << indent(ind) << "switch(yyaccept){\n"; + } } - o << indent(ind) << "case " << saves[i] << ":"; - genGoTo(o, 1, state, rules[i], readCh); + if (cases > 1) + { + o << indent(ind) << "case " << saves[i] << ":"; + genGoTo(o, 1, state, rules[i], readCh); + } + else + { + o << indent(ind) << "if (yyaccept == " << saves[i] << ") {\n"; + genGoTo(o, ++ind, state, rules[i], readCh); + } } + } if (!first) { + if (cases == 1) + { + ind--; + } o << indent(ind) << "}\n"; } } diff --git a/test/bug1163046.c b/test/bug1163046.c index 5eb541b6..658417f8 100755 --- a/test/bug1163046.c +++ b/test/bug1163046.c @@ -57,8 +57,8 @@ yy7: } yy8: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy9: yych = *++YYCURSOR; diff --git a/test/bug1187785.c b/test/bug1187785.c index bc1639c0..6c9377c2 100755 --- a/test/bug1187785.c +++ b/test/bug1187785.c @@ -562,8 +562,8 @@ yy5: } yy7: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy8: ++YYCURSOR; diff --git a/test/bug1297658.c b/test/bug1297658.c index 7fda0fed..3da905e8 100644 --- a/test/bug1297658.c +++ b/test/bug1297658.c @@ -136,8 +136,8 @@ yy12: } yy14: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy15: ++YYCURSOR; diff --git a/test/bug1390174.c b/test/bug1390174.c index 07810627..121a7830 100755 --- a/test/bug1390174.c +++ b/test/bug1390174.c @@ -65,8 +65,8 @@ yy8: } yy10: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } } #line 20 "bug1390174.re" diff --git a/test/cvsignore.b.c b/test/cvsignore.b.c index fe0d91c3..2754312d 100755 --- a/test/cvsignore.b.c +++ b/test/cvsignore.b.c @@ -104,8 +104,8 @@ yy5: if(yych == 'o') goto yy44; yy6: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy7: yych = *++YYCURSOR; diff --git a/test/cvsignore.c b/test/cvsignore.c index 76a41d58..fd4309bd 100755 --- a/test/cvsignore.c +++ b/test/cvsignore.c @@ -76,8 +76,8 @@ yy5: } yy6: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy7: yych = *++YYCURSOR; diff --git a/test/cvsignore.s.c b/test/cvsignore.s.c index dcb168e4..85b69699 100755 --- a/test/cvsignore.s.c +++ b/test/cvsignore.s.c @@ -69,8 +69,8 @@ yy5: if(yych == 'o') goto yy44; yy6: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy7: yych = *++YYCURSOR; diff --git a/test/cvsignore.w.c b/test/cvsignore.w.c index 56d8b060..e61e60e0 100755 --- a/test/cvsignore.w.c +++ b/test/cvsignore.w.c @@ -69,8 +69,8 @@ yy5: if(yych == 'o') goto yy44; yy6: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy7: yych = *++YYCURSOR; diff --git a/test/cvsignore.wb.c b/test/cvsignore.wb.c index eb352d89..557f83b0 100755 --- a/test/cvsignore.wb.c +++ b/test/cvsignore.wb.c @@ -104,8 +104,8 @@ yy5: if(yych == 'o') goto yy44; yy6: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy7: yych = *++YYCURSOR; diff --git a/test/input1.c b/test/input1.c index e0dac0dc..f43b3fb9 100644 --- a/test/input1.c +++ b/test/input1.c @@ -37,8 +37,8 @@ yy5: } yy7: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy8: yych = *++YYCURSOR; diff --git a/test/input11.b.c b/test/input11.b.c index 63af3e41..be68053a 100755 --- a/test/input11.b.c +++ b/test/input11.b.c @@ -130,8 +130,8 @@ yy15: } yy19: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy20: ++YYCURSOR; diff --git a/test/input11.c b/test/input11.c index b183e883..3058942e 100755 --- a/test/input11.c +++ b/test/input11.c @@ -284,8 +284,8 @@ yy18: } yy19: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy20: ++YYCURSOR; diff --git a/test/input11.s.c b/test/input11.s.c index 64c80d1b..b51ba88b 100755 --- a/test/input11.s.c +++ b/test/input11.s.c @@ -100,8 +100,8 @@ yy15: } yy19: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy20: ++YYCURSOR; diff --git a/test/sample.c b/test/sample.c index e06f8c56..63038392 100644 --- a/test/sample.c +++ b/test/sample.c @@ -120,8 +120,8 @@ yy12: } yy13: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy6; + if (yyaccept == 0) { + goto yy6; } yy14: ++YYCURSOR; diff --git a/test/scanner.c b/test/scanner.c index 24c80abb..57d83b93 100644 --- a/test/scanner.c +++ b/test/scanner.c @@ -117,8 +117,8 @@ yy7: } yy8: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; + if (yyaccept == 0) { + goto yy3; } yy9: yych = *++YYCURSOR; @@ -679,8 +679,8 @@ yy87: } yy88: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy83; + if (yyaccept == 0) { + goto yy83; } yy89: ++YYCURSOR; -- 2.40.0