scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 9e36c90c046cc1bd1b9ba069f669ee3828596766
parent 04e4de26ba4989ab84136e52169fc7bead5e8cf3
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Fri,  5 Nov 2021 04:19:33 +0100

cc1: Simplify stmt()

Diffstat:
Msrc/cmd/cc/cc1/stmt.c | 54++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 38 insertions(+), 16 deletions(-)

diff --git a/src/cmd/cc/cc1/stmt.c b/src/cmd/cc/cc1/stmt.c @@ -365,22 +365,44 @@ compound(Symbol *lbreak, Symbol *lcont, Switch *lswitch) static void stmt(Symbol *lbreak, Symbol *lcont, Switch *lswitch) { - void (*fun)(Symbol *, Symbol *, Switch *); - switch (yytoken) { - case '{': fun = compound; break; - case RETURN: fun = Return; break; - case WHILE: fun = While; break; - case FOR: fun = For; break; - case DO: fun = Dowhile; break; - case IF: fun = If; break; - case BREAK: fun = Break; break; - case CONTINUE: fun = Continue; break; - case GOTO: fun = Goto; break; - case SWITCH: fun = Swtch; break; - case CASE: fun = Case; break; - case DEFAULT: fun = Default; break; - default: fun = stmtexp; break; + case '{': + compound(lbreak, lcont, lswitch); + break; + case RETURN: + Return(lbreak, lcont, lswitch); + break; + case WHILE: + While(lbreak, lcont, lswitch); + break; + case FOR: + For(lbreak, lcont, lswitch); + break; + case DO: + Dowhile(lbreak, lcont, lswitch); + break; + case IF: + If(lbreak, lcont, lswitch); + break; + case BREAK: + Break(lbreak, lcont, lswitch); + break; + case CONTINUE: + Continue(lbreak, lcont, lswitch); + break; + case GOTO: + Goto(lbreak, lcont, lswitch); + break; + case SWITCH: + Swtch(lbreak, lcont, lswitch); + break; + case CASE: + Case(lbreak, lcont, lswitch); + break; + case DEFAULT: + Default(lbreak, lcont, lswitch); + break; + default: + stmtexp(lbreak, lcont, lswitch); } - (*fun)(lbreak, lcont, lswitch); }