X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fdebug%2Fdbginfo.c;h=afbdebd0f86a2c6a4c81d292ac89f04fead6dbc0;hb=cc73c2485f371de10db363869e5a324dbaf23e18;hp=08591d14f2772610b3efead9b6ce9a9dcf437262;hpb=f17f78673a3fd8b4d1f53478d5a8146881abbc03;p=libfirm diff --git a/ir/debug/dbginfo.c b/ir/debug/dbginfo.c index 08591d14f..afbdebd0f 100644 --- a/ir/debug/dbginfo.c +++ b/ir/debug/dbginfo.c @@ -1,20 +1,6 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. - * * This file is part of libFirm. - * - * This file may be distributed and/or modified under the terms of the - * GNU General Public License version 2 as published by the Free Software - * Foundation and appearing in the file LICENSE.GPL included in the - * packaging of this file. - * - * Licensees holding valid libFirm Professional Edition licenses may use - * this file in accordance with the libFirm Commercial License. - * Agreement provided with the Software. - * - * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE - * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE. + * Copyright (C) 2012 University of Karlsruhe. */ /** @@ -22,7 +8,6 @@ * @brief Implements the Firm interface to debug information. * @author Goetz Lindenmaier, Michael Beck * @date 2001 - * @version $Id$ */ #include "config.h" @@ -30,6 +15,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 +58,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"); } #undef CASE } @@ -101,22 +86,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,21 +115,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) { + buffer[0] = '\0'; if (retrieve_type_dbg) retrieve_type_dbg(buffer, buffer_size, tdbgi); assert(buffer_size > 0); - buffer[0] = 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); + } }