diff --git a/lang/m2/comp/.distr b/lang/m2/comp/.distr index bcd28f6dc..a668f9653 100644 --- a/lang/m2/comp/.distr +++ b/lang/m2/comp/.distr @@ -51,6 +51,7 @@ program.g real.H scope.C scope.h +stab.c standards.h statement.g tmpvar.C diff --git a/lang/m2/comp/options.c b/lang/m2/comp/options.c index f23d74769..d45e8b52c 100644 --- a/lang/m2/comp/options.c +++ b/lang/m2/comp/options.c @@ -57,10 +57,14 @@ DoOption(text) case 's': /* symmetric: MIN(INTEGER) = -MAX(INTEGER) */ case '3': /* strict 3rd edition Modula-2 */ case 'l': /* local additions enabled */ - case 'g': /* generate symbol table for debugger */ options[text[-1]]++; break; + case 'g': /* generate symbol table for debugger */ + options['g']++; + options['n']++; /* no register vars ??? */ + break; + case 'w': if (*text) { while (*text) { diff --git a/lang/m2/comp/program.g b/lang/m2/comp/program.g index 1982eb50c..96ca2fc1e 100644 --- a/lang/m2/comp/program.g +++ b/lang/m2/comp/program.g @@ -13,8 +13,8 @@ #include "debug.h" #include -#include -#include +#include +#include #include "strict3rd.h" #include "main.h" @@ -235,7 +235,15 @@ ProgramModule priority(&(df->mod_priority)) ';' import(0)* block(&(df->mod_body)) IDENT - { if (options['g']) stb_string(df, D_END); + { if (options['g']) { + if (state == PROGRAM) { + C_ms_stb_cst(df->df_idf->id_text, + N_MAIN, + 0, + (arith) 0); + } + stb_string(df, D_END); + } close_scope(SC_CHKFORW|SC_CHKPROC|SC_REVERSE); match_id(df->df_idf, dot.TOK_IDF); } diff --git a/lang/m2/comp/stab.c b/lang/m2/comp/stab.c index 29ec9f509..41e39a225 100644 --- a/lang/m2/comp/stab.c +++ b/lang/m2/comp/stab.c @@ -305,7 +305,8 @@ stb_string(df, kind) } } else { /* local variable */ - stb_type(tp, 0); + stb_type(tp, 1); /* assign type num to avoid + difficult to parse string */ addc_db_str(';'); C_ms_stb_cst(db_str.base, N_LSYM, 0, df->var_off); }