Improved symbol table for grind
This commit is contained in:
parent
fd6e25e50f
commit
b8c96f32bd
|
@ -188,9 +188,6 @@ TypeDeclaration
|
|||
'=' type(&tp)
|
||||
{ DeclareType(nd, df, tp);
|
||||
FreeNode(nd);
|
||||
#ifdef DBSYMTAB
|
||||
if (options['g']) stb_string(df, D_TYPE);
|
||||
#endif /* DBSYMTAB */
|
||||
}
|
||||
;
|
||||
|
||||
|
|
|
@ -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)
|
||||
register t_def *df;
|
||||
{
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "node.h"
|
||||
#include "scope.h"
|
||||
#include "walk.h"
|
||||
#include "main.h"
|
||||
#include "chk_expr.h"
|
||||
#include "warning.h"
|
||||
#include "uns_arith.h"
|
||||
|
@ -673,6 +674,9 @@ DeclareType(nd, df, tp)
|
|||
CheckForImports(df);
|
||||
}
|
||||
}
|
||||
#ifdef DBSYMTAB
|
||||
if (options['g']) stb_string(df, D_TYPE);
|
||||
#endif
|
||||
|
||||
SolveForwardTypeRefs(df);
|
||||
}
|
||||
|
@ -688,6 +692,11 @@ SolveForwardTypeRefs(df)
|
|||
df->df_kind = D_TYPE;
|
||||
while (nd) {
|
||||
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;
|
||||
}
|
||||
FreeNode(df->df_forw_node);
|
||||
|
|
|
@ -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)
|
||||
register struct def *df;
|
||||
long kind;
|
||||
|
|
|
@ -550,6 +550,11 @@ chk_forw_types()
|
|||
"identifier \"%s\" is not a type",
|
||||
df->df_idf->id_text);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue