don't crash if a Const node has no tarval set yet
[libfirm] / ir / ir / irdump.c
index f7e2b9a..c014655 100644 (file)
@@ -23,6 +23,8 @@
 
 #include "firm_common_t.h"
 
+#include "list.h"
+
 #include "irnode.h"
 #include "irgraph.h"
 #include "irprog_t.h"
@@ -40,6 +42,7 @@
 #include "irloop_t.h"
 #include "callgraph.h"
 #include "irextbb_t.h"
+#include "irhooks.h"
 #include "dbginfo_t.h"
 #include "irtools.h"
 
@@ -1123,6 +1126,25 @@ static void dump_node_vcgattr(FILE *F, ir_node *node, ir_node *local, int bad)
   }
 }
 
+/* Adds a new node info dumper callback. */
+void *dump_add_node_info_callback(dump_node_info_cb_t *cb, void *data)
+{
+  hook_entry_t *info = xmalloc(sizeof(*info));
+
+  info->hook._hook_node_info = cb;
+  info->context              = data;
+  register_hook(hook_node_info, info);
+
+  return info;
+}
+
+/* Remove a previously added info dumper callback. */
+void dump_remv_node_info_callback(void *handle)
+{
+  hook_entry_t *info = handle;
+  unregister_hook(hook_node_info, info);
+  xfree(info);
+}
 
 /**
  * Dump the node information of a node n to a file F.
@@ -1137,6 +1159,9 @@ static INLINE int dump_node_info(FILE *F, ir_node *n)
   /* call the dump_node operation if available */
   if (ops->dump_node)
     bad = ops->dump_node(n, F, dump_node_info_txt);
+
+  /* allow additional info to be added */
+  hook_node_info(F, n);
   fprintf(F, "\"\n");
 
   return bad;