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