From 720d775582b04cd7e341fa16408ef54638ef793e Mon Sep 17 00:00:00 2001 From: ceriel Date: Fri, 15 Feb 1991 18:00:26 +0000 Subject: [PATCH] made D_ definitions a long and made symbol table generation conditional --- lang/pc/comp/Makefile | 2 +- lang/pc/comp/Parameters | 4 ++++ lang/pc/comp/declar.g | 13 ++++++++++++ lang/pc/comp/def.H | 46 ++++++++++++++++++++--------------------- lang/pc/comp/enter.c | 8 +++++++ lang/pc/comp/main.c | 5 +++++ lang/pc/comp/program.g | 8 ++++++- lang/pc/comp/stab.c | 13 +++++++++--- 8 files changed, 71 insertions(+), 28 deletions(-) diff --git a/lang/pc/comp/Makefile b/lang/pc/comp/Makefile index 0e4242858..8a76de684 100644 --- a/lang/pc/comp/Makefile +++ b/lang/pc/comp/Makefile @@ -79,7 +79,7 @@ SRC = $(CSRC) $(GENCFILES) GENGFILES= tokenfile.g GENHFILES= Lpars.h debugcst.h density.h errout.h idfsize.h inputtype.h\ numsize.h strsize.h def.h type.h desig.h scope.h node.h\ - target_sizes.h nocross.h + target_sizes.h nocross.h dbsymtab.h HFILES= LLlex.h chk_expr.h class.h const.h debug.h def.h desig.h\ f_info.h idf.h input.h main.h misc.h node.h required.h scope.h\ tokenname.h type.h $(GENHFILES) diff --git a/lang/pc/comp/Parameters b/lang/pc/comp/Parameters index ef4bc8db1..e39d7c785 100644 --- a/lang/pc/comp/Parameters +++ b/lang/pc/comp/Parameters @@ -55,3 +55,7 @@ !File: nocross.h #undef NOCROSS 1 /* define when cross compiler not needed */ + + +!File: dbsymtab.h +#define DBSYMTAB 1 /* ability to produce symbol table for debugger */ diff --git a/lang/pc/comp/declar.g b/lang/pc/comp/declar.g index 370154b2b..a9c5b4f1f 100644 --- a/lang/pc/comp/declar.g +++ b/lang/pc/comp/declar.g @@ -19,6 +19,7 @@ #include "node.h" #include "scope.h" #include "type.h" +#include "dbsymtab.h" #define offsetof(type, field) (int) &(((type *)0)->field) #define PC_BUFSIZ (sizeof(struct file) - (int)((struct file *)0)->bufadr) @@ -180,7 +181,9 @@ ConstantDefinition df->con_const = nd; df->df_type = nd->nd_type; df->df_flags |= D_SET; +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_CONST); +#endif /* DBSYMTAB */ } } ; @@ -197,7 +200,9 @@ TypeDefinition { if( df = define(id, CurrentScope, D_TYPE) ) { df->df_type = tp; df->df_flags |= D_SET; +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_TYPE); +#endif /* DBSYMTAB */ } } ; @@ -289,11 +294,15 @@ ProcedureDeclaration { DoDirective(dot.TOK_IDF, nd, tp, scl, 0); } | { df = DeclProc(nd, tp, scl); +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_PROCEDURE); +#endif /* DBSYMTAB */ } Block(df) { /* open_scope() is simulated in DeclProc() */ +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_PEND); +#endif /* DBSYMTAB */ close_scope(); } ] @@ -368,12 +377,16 @@ FunctionDeclaration df->prc_bool = CurrentScope->sc_off = df->prc_res - int_size; +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_FUNCTION); +#endif /* DBSYMTAB */ } } Block(df) { if( df ) { +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_PEND); +#endif /* DBSYMTAB */ EndFunc(df); } diff --git a/lang/pc/comp/def.H b/lang/pc/comp/def.H index 5a236aeb6..827ab2135 100644 --- a/lang/pc/comp/def.H +++ b/lang/pc/comp/def.H @@ -80,32 +80,32 @@ struct def { /* list of definitions for a name */ struct idf *df_idf; /* link back to the name */ struct scope *df_scope; /* scope in which this definition resides */ long df_kind; /* the kind of this definition: */ -#define D_PROCEDURE 0x000001 /* procedure */ -#define D_FUNCTION 0x000002 /* function */ -#define D_TYPE 0x000004 /* a type */ -#define D_CONST 0x000008 /* a constant */ -#define D_ENUM 0x000010 /* an enumeration literal */ -#define D_FIELD 0x000020 /* a field in a record */ -#define D_PROGRAM 0x000040 /* the program */ -#define D_VARIABLE 0x000080 /* a variable */ -#define D_PARAMETER 0x000100 /* program parameter */ -#define D_FORWTYPE 0x000200 /* forward type */ -#define D_FTYPE 0x000400 /* resolved forward type */ -#define D_FWPROCEDURE 0x000800 /* forward procedure */ -#define D_FWFUNCTION 0x001000 /* forward function */ -#define D_LABEL 0x002000 /* a label */ -#define D_LBOUND 0x004000 /* lower bound id. in conform. array */ -#define D_UBOUND 0x008000 /* upper bound id. in conform. array */ -#define D_FORWARD 0x010000 /* directive "forward" */ -#define D_EXTERN 0x020000 /* directive "extern" */ -#define D_ERROR 0x040000 /* a compiler generated definition +#define D_PROCEDURE 0x000001L /* procedure */ +#define D_FUNCTION 0x000002L /* function */ +#define D_TYPE 0x000004L /* a type */ +#define D_CONST 0x000008L /* a constant */ +#define D_ENUM 0x000010L /* an enumeration literal */ +#define D_FIELD 0x000020L /* a field in a record */ +#define D_PROGRAM 0x000040L /* the program */ +#define D_VARIABLE 0x000080L /* a variable */ +#define D_PARAMETER 0x000100L /* program parameter */ +#define D_FORWTYPE 0x000200L /* forward type */ +#define D_FTYPE 0x000400L /* resolved forward type */ +#define D_FWPROCEDURE 0x000800L /* forward procedure */ +#define D_FWFUNCTION 0x001000L /* forward function */ +#define D_LABEL 0x002000L /* a label */ +#define D_LBOUND 0x004000L /* lower bound id. in conform. array */ +#define D_UBOUND 0x008000L /* upper bound id. in conform. array */ +#define D_FORWARD 0x010000L /* directive "forward" */ +#define D_EXTERN 0x020000L /* directive "extern" */ +#define D_ERROR 0x040000L /* a compiler generated definition * for an undefined variable */ -#define D_MODULE 0x080000 /* the module */ -#define D_INUSE 0x100000 /* variable is in use */ +#define D_MODULE 0x080000L /* the module */ +#define D_INUSE 0x100000L /* variable is in use */ /* special values for stab.c */ -#define D_END (D_MODULE|D_PROCEDURE) -#define D_PEND (D_MODULE|D_PROCEDURE|D_VARIABLE) +#define D_END (D_PROGRAM|D_PROCEDURE) +#define D_PEND (D_PROGRAM|D_PROCEDURE|D_VARIABLE) #define D_VALUE (D_FUNCTION | D_CONST | D_ENUM | D_FIELD | D_VARIABLE\ | D_FWFUNCTION | D_LBOUND | D_UBOUND) diff --git a/lang/pc/comp/enter.c b/lang/pc/comp/enter.c index 919a16a08..703b37671 100644 --- a/lang/pc/comp/enter.c +++ b/lang/pc/comp/enter.c @@ -12,6 +12,7 @@ #include "node.h" #include "scope.h" #include "type.h" +#include "dbsymtab.h" extern int proclevel; extern int parlevel; @@ -20,6 +21,7 @@ struct def * Enter(name, kind, type, pnam) char *name; register struct type *type; + long kind; { /* Enter a definition for "name" with kind "kind" and type "type" in the Current Scope. If it is a standard name, also @@ -34,7 +36,9 @@ Enter(name, kind, type, pnam) df->df_value.df_reqname = pnam; df->df_flags |= D_SET; } +#ifdef DBSYMTAB else if (options['g']) stb_string(df, kind); +#endif /* DBSYMTAB */ return df; } @@ -65,7 +69,9 @@ EnterProgList(Idlist) df->var_name = output; set_outp(); } +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_VARIABLE); +#endif /* DBSYMTAB */ } } else { @@ -163,7 +169,9 @@ EnterVarList(Idlist, type, local) df->var_name = df->df_idf->id_text; df->df_flags |= D_NOREG; } +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_VARIABLE); +#endif /* DBSYMTAB */ } FreeNode(Idlist); } diff --git a/lang/pc/comp/main.c b/lang/pc/comp/main.c index 9b6ced600..53f18fdeb 100644 --- a/lang/pc/comp/main.c +++ b/lang/pc/comp/main.c @@ -21,6 +21,7 @@ #include "tokenname.h" #include "type.h" #include "scope.h" +#include "dbsymtab.h" char options[128]; char *ProgName; @@ -106,9 +107,11 @@ Compile(src, dst) fatal("couldn't open output file"); C_magic(); C_ms_emx(word_size, pointer_size); +#ifdef DBSYMTAB if (options['g']) { C_ms_std(FileName, N_SO, 0); } +#endif /* DBSYMTAB */ AddRequired(); C_df_dlb(++data_label); C_rom_scon(FileName,(arith) strlen(FileName) + 1); @@ -250,7 +253,9 @@ AddRequired() df->df_type = int_type; df->con_const = &maxintnode; df->df_flags |= D_SET; +#ifdef DBSYMTAB if (options['g']) stb_string(df, D_CONST); +#endif /* DBSYMTAB */ } #ifdef DEBUG diff --git a/lang/pc/comp/program.g b/lang/pc/comp/program.g index 5bc8e0232..45eacde05 100644 --- a/lang/pc/comp/program.g +++ b/lang/pc/comp/program.g @@ -14,6 +14,7 @@ #include "main.h" #include "node.h" #include "scope.h" +#include "dbsymtab.h" } %lexical LLlex; @@ -28,10 +29,13 @@ Program }: ProgramHeading(&df) ';' Block(df) '.' - { if (options['g']) { + { +#ifdef DBSYMTAB + if (options['g']) { C_ms_stb_cst(df->df_idf->id_text, N_MAIN, 0, (arith) 0); stb_string(df, D_END); } +#endif /* DBSYMTAB */ } | { df = new_def(); df->df_idf = str2idf(FileName, 1); @@ -52,7 +56,9 @@ ProgramHeading(register struct def **df;): open_scope(); GlobalScope = CurrentScope; (*df)->prc_vis = CurrVis; +#ifdef DBSYMTAB if (options['g']) stb_string(*df, D_MODULE); +#endif /* DBSYMTAB */ } [ '(' diff --git a/lang/pc/comp/stab.c b/lang/pc/comp/stab.c index a287e9cb2..af599d200 100644 --- a/lang/pc/comp/stab.c +++ b/lang/pc/comp/stab.c @@ -9,6 +9,10 @@ /* $Header$ */ +#include "dbsymtab.h" + +#ifdef DBSYMTAB + #include #include #include @@ -225,6 +229,7 @@ stb_type(tp, assign_num) stb_string(df, kind) register struct def *df; + long kind; { register struct type *tp = df->df_type; char buf[64]; @@ -232,11 +237,12 @@ stb_string(df, kind) create_db_str(); adds_db_str(df->df_idf->id_text); addc_db_str(':'); - switch(kind) { - case D_MODULE: + if (kind == D_MODULE) { adds_db_str(sprint(buf, "M%d;", df->prc_vis->sc_count)); C_ms_stb_pnam(db_str.base, N_FUN, proclevel, "m_a_i_n"); - break; + return; + } + switch((int)kind) { case D_PROCEDURE: case D_FUNCTION: adds_db_str(sprint(buf, "Q%d;", df->prc_vis->sc_count)); @@ -367,3 +373,4 @@ stb_string(df, kind) } } +#endif /* DBSYMTAB */ -- 2.34.1