new DBGEXE macro
[libfirm] / ir / ana2 / pto_util.c
index ffd66a8..6010f86 100644 (file)
@@ -32,6 +32,7 @@
 int get_pto_verbose (void);     /* grrr, can't include pto.h */
 
 # define DBGPRINT(lvl, msg) if (get_pto_verbose () > lvl) { fprintf msg; }
+# define DBGEXE(lvl, cmd) if (get_pto_verbose () > lvl) { cmd; }
 
 static int pto_id = 0;          /* only for pto_t->kind */
 
@@ -158,17 +159,22 @@ static void find_irg_arg (ir_node *node, void *env)
 */
 static void obj_desc_print (obj_desc_t *obj)
 {
+    const char *tp_name = get_type_name (obj->tp);
+
   if (obj_kind_obj == obj->kind) {
     /* object desc */
     obj_obj_desc_t *obj_obj = (obj_obj_desc_t*) obj;
     int i;
 
     fprintf (stdout, "obj desc 0x%08x for type \"%s\"\n",
-             (int) obj, get_type_name (obj->tp));
+             (int) obj, tp_name);
 
     for (i = 0; i < obj_obj->n_fields; i ++) {
-      fprintf (stdout, " \"%s\" -> ", get_entity_name (obj_obj->fields [i]));
-      qset_print (obj_obj->vals [i], stdout);
+      if (! qset_is_empty (obj_obj->vals [i])) {
+        fprintf (stdout, " \"%s.%s\" -> ",
+                 tp_name, get_entity_name (obj_obj->fields [i]));
+        qset_print (obj_obj->vals [i], stdout);
+      }
     }
 
   } else if (obj_kind_array == obj->kind) {
@@ -178,8 +184,10 @@ static void obj_desc_print (obj_desc_t *obj)
     fprintf (stdout, "arr desc 0x%08x for type \"%s\"\n",
              (int) obj, get_type_name (obj->tp));
 
-    fprintf (stdout, " [] -> ");
-    qset_print (obj_arr->val, stdout);
+    if (! qset_is_empty (obj_arr->val)) {
+      fprintf (stdout, " %s.[] -> ", tp_name);
+      qset_print (obj_arr->val, stdout);
+    }
   } else {
     fprintf (stderr, "%s:%i: Invalid desc\n", __FILE__, __LINE__);
   }
@@ -354,6 +362,7 @@ pto_t *pto_new_empty (ir_node *node)
 
   pto->kind = &pto_id;
   pto->node = node;
+  pto->is_dummy = FALSE;
   pto->objs = qset_new (N_INITIAL_OBJS);
 
   return (pto);
@@ -412,6 +421,17 @@ void pto_add_all_names (pto_t *pto, qset_t *objs)
   qset_insert_all (pto->objs, objs);
 }
 
+/* Mark the given pto as a dumy */
+void pto_set_dummy (pto_t *pto)
+{
+  pto->is_dummy = TRUE;
+}
+
+/* Say whether the given pto is a dummy */
+int pto_is_dummy (pto_t *pto)
+{
+  return (pto->is_dummy);
+}
 
 /*
   Find the arguments of a graph. For a method that has n args, the
@@ -507,6 +527,12 @@ void pto_enter (obj_desc_t *obj_desc, entity *ent, pto_t *pto)
 \f
 /*
   $Log$
+  Revision 1.5  2004/11/09 16:46:01  liekweg
+  new DBGEXE macro
+
+  Revision 1.4  2004/11/08 12:33:06  liekweg
+  initialisation; sanitize print levels, misc fixes
+
   Revision 1.3  2004/11/04 14:58:38  liekweg
   expanded pto, added initialisation, added debugging printing