assume we always have strings.h
[libfirm] / ir / debug / dbginfo.c
index 9941700..73f8aea 100644 (file)
@@ -30,6 +30,7 @@
 #include "irnode_t.h"
 #include "type_t.h"
 #include "entity_t.h"
+#include "error.h"
 
 merge_pair_func *__dbg_info_merge_pair = default_dbg_info_merge_pair;
 merge_sets_func *__dbg_info_merge_sets = default_dbg_info_merge_sets;
@@ -72,8 +73,7 @@ const char *dbg_action_2_str(dbg_action a)
                if (a <= dbg_max)
                        return "string conversion not implemented";
                else
-                       assert(!"Missing debug action in dbg_action_2_str()");
-               return NULL;
+                       panic("Missing debug action in dbg_action_2_str()");
        }
 #undef CASE
 }
@@ -102,15 +102,14 @@ void default_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes,
 }
 
 /** The debug info retriever function. */
-static retrieve_dbg_func retrieve_dbg = NULL;
+static retrieve_dbg_func      retrieve_dbg      = NULL;
+static retrieve_type_dbg_func retrieve_type_dbg = NULL;
 
-/* Sets a debug info retriever. */
 void ir_set_debug_retrieve(retrieve_dbg_func func)
 {
        retrieve_dbg = func;
 }
 
-/* Retrieve the debug info. */
 const char *ir_retrieve_dbg_info(const dbg_info *dbg, unsigned *line)
 {
        if (retrieve_dbg)
@@ -120,6 +119,21 @@ const char *ir_retrieve_dbg_info(const dbg_info *dbg, unsigned *line)
        return NULL;
 }
 
+void ir_set_type_debug_retrieve(retrieve_type_dbg_func func)
+{
+       retrieve_type_dbg = func;
+}
+
+void ir_retrieve_type_dbg_info(char *buffer, size_t buffer_size,
+                               const type_dbg_info *tdbgi)
+{
+       buffer[0] = '\0';
+       if (retrieve_type_dbg)
+               retrieve_type_dbg(buffer, buffer_size, tdbgi);
+       assert(buffer_size > 0);
+       buffer[buffer_size-1] = '\0';
+}
+
 void ir_dbg_info_snprint(char *buf, size_t bufsize, const dbg_info *dbg)
 {
        unsigned    line;