diff --git a/src/snc/gen_code.c b/src/snc/gen_code.c index 305bce78a4101b8bbe9bfba49091cb9379cd6976..843f2a10184b09a8170032da4d7a6b92cca314b4 100644 --- a/src/snc/gen_code.c +++ b/src/snc/gen_code.c @@ -49,10 +49,6 @@ void generate_code(Program *p, const char *header_name) report("-------------------- Code Generation --------------------\n"); #endif - /* Initialize tables in gen_ss_code module */ - /* TODO: find a better way to do this */ - init_gen_ss_code(p); - set_gen_h(); /* Initial comments */ @@ -105,7 +101,7 @@ void generate_code(Program *p, const char *header_name) } /* Generate code for each state set */ - gen_ss_code(p); + gen_ss_code(p->prog, p->options); /* Generate tables */ gen_tables(p); diff --git a/src/snc/gen_ss_code.c b/src/snc/gen_ss_code.c index 3c77373504ddcfaaf36dc44d50a8fcf5bd8b7885..c30db382374720982ee64d732199733d39d3f63a 100644 --- a/src/snc/gen_ss_code.c +++ b/src/snc/gen_ss_code.c @@ -78,26 +78,21 @@ enum expr_context }; /* - * HACK: use global variables to make program options and - * symbol table available to subroutines + * HACK: use global variable to make reentrant option available + * to gen_var_access below. Otherwise we'd have to pass it through + * almost every subroutine in this module. */ -static int global_opt_reent; -static SymTable global_sym_table; - -void init_gen_ss_code(Program *program) -{ - /* HACK: intialise globals */ - global_opt_reent = program->options.reent; - global_sym_table = program->sym_table; -} +static Options global_options; /* Generate state set C code from analysed syntax tree */ -void gen_ss_code(Program *program) +void gen_ss_code(Expr *prog, Options options) { - Expr *prog = program->prog; Expr *sp, *ssp; uint ss_num = 0; + /* HACK: intialise global variable as implicit parameter */ + global_options = options; + /* Generate program init func */ gen_prog_func(prog, "init", NM_INIT, gen_prog_init_body); @@ -298,7 +293,7 @@ static void gen_event_body(Expr *xp, int context) static void gen_var_access(Var *vp) { - const char *pre = global_opt_reent ? NM_VARS_ARG "->" : ""; + const char *pre = global_options.reent ? NM_VARS_ARG "->" : ""; assert(vp); assert(vp->scope); diff --git a/src/snc/gen_ss_code.h b/src/snc/gen_ss_code.h index 13964ca1a329b0bba368dbdd92542280e57113bd..05f9b08e224fa74c4b124147cd794f3396e559c5 100644 --- a/src/snc/gen_ss_code.h +++ b/src/snc/gen_ss_code.h @@ -15,7 +15,6 @@ in the file LICENSE that is included with this distribution. #include "types.h" -void init_gen_ss_code(Program *program); -void gen_ss_code(Program *program); +void gen_ss_code(Expr *prog, Options options); #endif /*INCLgensscodeh*/