Improved symbol table for grind

This commit is contained in:
ceriel 1992-05-20 10:54:28 +00:00
parent fd6e25e50f
commit b8c96f32bd
5 changed files with 50 additions and 3 deletions

View file

@ -188,9 +188,6 @@ TypeDeclaration
'=' type(&tp) '=' type(&tp)
{ DeclareType(nd, df, tp); { DeclareType(nd, df, tp);
FreeNode(nd); FreeNode(nd);
#ifdef DBSYMTAB
if (options['g']) stb_string(df, D_TYPE);
#endif /* DBSYMTAB */
} }
; ;

View file

@ -247,6 +247,24 @@ stb_type(tp, assign_num)
} }
} }
stb_addtp(s, tp)
char *s;
t_type *tp;
{
create_db_str();
adds_db_str(s);
addc_db_str(':');
addc_db_str('t');
stb_type(tp, 1);
addc_db_str(';');
C_ms_stb_cst(db_str.base,
N_LSYM,
tp == void_type || tp->tp_size >= max_int[2]
? 0
: (int)tp->tp_size,
(arith) 0);
}
stb_string(df, kind) stb_string(df, kind)
register t_def *df; register t_def *df;
{ {

View file

@ -25,6 +25,7 @@
#include "node.h" #include "node.h"
#include "scope.h" #include "scope.h"
#include "walk.h" #include "walk.h"
#include "main.h"
#include "chk_expr.h" #include "chk_expr.h"
#include "warning.h" #include "warning.h"
#include "uns_arith.h" #include "uns_arith.h"
@ -673,6 +674,9 @@ DeclareType(nd, df, tp)
CheckForImports(df); CheckForImports(df);
} }
} }
#ifdef DBSYMTAB
if (options['g']) stb_string(df, D_TYPE);
#endif
SolveForwardTypeRefs(df); SolveForwardTypeRefs(df);
} }
@ -688,6 +692,11 @@ SolveForwardTypeRefs(df)
df->df_kind = D_TYPE; df->df_kind = D_TYPE;
while (nd) { while (nd) {
nd->nd_type->tp_next = df->df_type; nd->nd_type->tp_next = df->df_type;
#ifdef DBSYMTAB
if (options['g'] && nd->nd_type->tp_dbindex < 0) {
stb_addtp("(forward_type)", nd->nd_type);
}
#endif
nd = nd->nd_RIGHT; nd = nd->nd_RIGHT;
} }
FreeNode(df->df_forw_node); FreeNode(df->df_forw_node);

View file

@ -229,6 +229,24 @@ stb_type(tp, assign_num)
} }
} }
stb_addtp(s, tp)
char *s;
struct type *tp;
{
create_db_str();
adds_db_str(s);
addc_db_str(':');
addc_db_str('t');
stb_type(tp, 1);
addc_db_str(';');
C_ms_stb_cst(db_str.base,
N_LSYM,
tp == void_type || tp->tp_size > 32767
? 0
: (IsPacked(tp) ? (int) tp->tp_psize : (int)tp->tp_size),
(arith) 0);
}
stb_string(df, kind) stb_string(df, kind)
register struct def *df; register struct def *df;
long kind; long kind;

View file

@ -550,6 +550,11 @@ chk_forw_types()
"identifier \"%s\" is not a type", "identifier \"%s\" is not a type",
df->df_idf->id_text); df->df_idf->id_text);
fw_type->f_type->next = tp; fw_type->f_type->next = tp;
#ifdef DBSYMTAB
if (options['g']) {
stb_addtp("(forward_type)", fw_type->f_type);
}
#endif
fw_type = fw_type->f_next; fw_type = fw_type->f_next;
} }