From 01d490392752b3e8b1a09ac92354e03ee68823a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Tue, 11 Jul 2000 18:20:21 -0700 Subject: [PATCH] more debug Rev: src/las.c:1.185 --- src/las.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/src/las.c b/src/las.c index 796f96d650..7fa78b3549 100644 --- a/src/las.c +++ b/src/las.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: las.c,v 1.184 2000/07/11 11:31:46 grubba Exp $"); +RCSID("$Id: las.c,v 1.185 2000/07/12 01:20:21 hubbe Exp $"); #include "language.h" #include "interpret.h" @@ -103,6 +103,34 @@ void check_tree(node *n, int depth) check_node_hash(n); + switch(n->token) + { + case F_EXTERNAL: + if(n->type) + { + int level = n->u.integer.a; + int id_no = n->u.integer.b; + struct program *p = parent_compilation(level); + if (p) { + struct identifier *id = ID_FROM_INT(p, id_no); + if (id) { +#ifdef PIKE_DEBUG + if(id->type != n->type) + { + printf("Type of external node is not matching it's identifier.\nid->type: "); + simple_describe_type(id->type); + printf("\nn->type : "); + simple_describe_type(n->type); + printf("\n"); + + fatal("Type of external node is not matching it's identifier.\n"); + } +#endif + } + } + } + } + if(d_flag<2) return; if(!(depth & 1023)) @@ -349,8 +377,15 @@ static node *freeze_node(node *orig) #else /* !SHARED_NODES */ -#define freeze_node(X) (X) +#ifdef PIKE_DEBUG +static node *freeze_node(node *orig) +{ + check_tree(orig); + return orig; +} +#endif +#define freeze_node(X) (X) #endif /* SHARED_NODES */ void free_all_nodes(void) @@ -687,9 +722,9 @@ node *debug_mknode(short token, node *a, node *b) verify_shared_strings_tables(); #endif + check_tree(res,0); if(!Pike_compiler->num_parse_error && Pike_compiler->compiler_pass==2) { - check_tree(res,0); optimize(res); check_tree(res,0); } @@ -897,6 +932,13 @@ node *debug_mkexternalnode(int level, { node *res = mkemptynode(); res->token = F_EXTERNAL; +#ifdef PIKE_DEBUG + if(d_flag) + { + check_string(id->type); + check_string(id->name); + } +#endif /* Kludge */ id = ID_FROM_INT(parent_compilation(level), i); @@ -2385,6 +2427,18 @@ void fix_type_field(node *n) struct identifier *id = ID_FROM_INT(p, id_no); if (id && id->name) { name = id->name->str; +#ifdef PIKE_DEBUG + if(id->type != f) + { + printf("Type of external node is not matching it's identifier.\nid->type: "); + simple_describe_type(id->type); + printf("\nf : "); + simple_describe_type(f); + printf("\n"); + + fatal("Type of external node is not matching it's identifier.\n"); + } +#endif } } } -- GitLab