Improved symbol table for grind
This commit is contained in:
parent
fd6e25e50f
commit
b8c96f32bd
|
@ -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 */
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue