made D_ definitions a long and made symbol table generation conditional
authorceriel <none@none>
Fri, 15 Feb 1991 18:00:26 +0000 (18:00 +0000)
committerceriel <none@none>
Fri, 15 Feb 1991 18:00:26 +0000 (18:00 +0000)
lang/pc/comp/Makefile
lang/pc/comp/Parameters
lang/pc/comp/declar.g
lang/pc/comp/def.H
lang/pc/comp/enter.c
lang/pc/comp/main.c
lang/pc/comp/program.g
lang/pc/comp/stab.c

index 0e42428..8a76de6 100644 (file)
@@ -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)
index ef4bc8d..e39d7c7 100644 (file)
@@ -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 */
index 370154b..a9c5b4f 100644 (file)
@@ -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);
                                  }
 
index 5a236ae..827ab21 100644 (file)
@@ -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)
index 919a16a..703b376 100644 (file)
@@ -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);
 }
index 9b6ced6..53f18fd 100644 (file)
@@ -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
index 5bc8e02..45eacde 100644 (file)
@@ -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 */
                        }
        [
                '('
index a287e9c..af599d2 100644 (file)
@@ -9,6 +9,10 @@
 
 /* $Header$ */
 
+#include       "dbsymtab.h"
+
+#ifdef DBSYMTAB
+
 #include       <alloc.h>
 #include       <em_arith.h>
 #include       <em_label.h>
@@ -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 */