X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fdebug%2Fdbginfo.c;h=a9b000f84399060f79eb696061060eeeb3165ceb;hb=24d4d90a8a18fd1e2157787efc06fb3c9c7f2380;hp=d7eb835b859f641a3e87b8ec98ab41ed46c07c4d;hpb=9d564d6198d8a1e36a3a9c9ec9ca4d13c6acd153;p=libfirm diff --git a/ir/debug/dbginfo.c b/ir/debug/dbginfo.c index d7eb835b8..a9b000f84 100644 --- a/ir/debug/dbginfo.c +++ b/ir/debug/dbginfo.c @@ -22,7 +22,6 @@ * @brief Implements the Firm interface to debug information. * @author Goetz Lindenmaier, Michael Beck * @date 2001 - * @version $Id$ */ #include "config.h" @@ -30,6 +29,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 +72,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 } @@ -101,22 +100,25 @@ void default_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes, } } +static src_loc_t default_retrieve_dbg(dbg_info const *const dbg) +{ + (void)dbg; + src_loc_t const loc = { NULL, 0, 0 }; + return loc; +} + /** The debug info retriever function. */ -static retrieve_dbg_func retrieve_dbg = NULL; +static retrieve_dbg_func retrieve_dbg = default_retrieve_dbg; static retrieve_type_dbg_func retrieve_type_dbg = NULL; void ir_set_debug_retrieve(retrieve_dbg_func func) { - retrieve_dbg = func; + retrieve_dbg = func ? func : default_retrieve_dbg; } -const char *ir_retrieve_dbg_info(const dbg_info *dbg, unsigned *line) +src_loc_t ir_retrieve_dbg_info(dbg_info const *const dbg) { - if (retrieve_dbg) - return retrieve_dbg(dbg, line); - - *line = 0; - return NULL; + return retrieve_dbg(dbg); } void ir_set_type_debug_retrieve(retrieve_type_dbg_func func) @@ -127,18 +129,25 @@ void ir_set_type_debug_retrieve(retrieve_type_dbg_func func) void ir_retrieve_type_dbg_info(char *buffer, size_t buffer_size, const type_dbg_info *tdbgi) { - retrieve_type_dbg(buffer, buffer_size, 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; - const char *source = ir_retrieve_dbg_info(dbg, &line); + src_loc_t const loc = ir_retrieve_dbg_info(dbg); - if (source == NULL) { + if (!loc.file) { assert(bufsize > 0); buf[0] = 0; return; } - snprintf(buf, bufsize, "%s:%u", source, line); + if (loc.column == 0) { + snprintf(buf, bufsize, "%s:%u", loc.file, loc.line); + } else { + snprintf(buf, bufsize, "%s:%u:%u", loc.file, loc.line, loc.column); + } }