X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fcommon%2Ffirm_common.c;h=66069a3e1423f65ddc26a6afd8789c2b5513d2b2;hb=002120b9325bd7e1da3ebb9dd258350011ad863c;hp=a996e7b1f21e024da01943712d72861022de4622;hpb=de3ad6fcd245b88094f28f89284f2d62d4d50d3c;p=libfirm diff --git a/ir/common/firm_common.c b/ir/common/firm_common.c index a996e7b1f..66069a3e1 100644 --- a/ir/common/firm_common.c +++ b/ir/common/firm_common.c @@ -1,46 +1,102 @@ -/* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe -* All rights reserved. -* -* Authors: Martin Trapp, Christian Schaefer & -* Goetz Lindenmaier -* -* firm_common.c: -*/ - -/* $Id$ */ - +/* + * Project: libFIRM + * File name: ir/common/firm_common.c + * Purpose: + * Author: Martin Trapp, Christian Schaefer + * Modified by: Goetz Lindenmaier, Michael Beck + * Created: + * CVS-ID: $Id$ + * Copyright: (c) 1998-2006 Universität Karlsruhe + * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + */ #ifdef HAVE_CONFIG_H -# include +# include "config.h" #endif #include "firm_common_t.h" #include "irgraph.h" +#include "irloop.h" +#include "tv.h" + +/** + * Ideally, this macro would check if size bytes could be read at + * pointer p. No generic solution. + */ +#define POINTER_READ(p, size) (p) /* returns the kind of the thing */ -firm_kind -get_kind (void *firm_thing) { - assert (firm_thing); - return *(firm_kind *)firm_thing; -} +firm_kind get_kind(const void *firm_thing) { + return POINTER_READ(firm_thing, sizeof(firm_kind)) ? *(firm_kind *)firm_thing : k_BAD; +} /* get_kind */ +const char *print_firm_kind(void *firm_thing) { + if (! firm_thing) + return "(NULL)"; -const char* print_firm_kind(void *firm_thing) { - assert (firm_thing); switch (*(firm_kind *)firm_thing) { - case k_entity: { return "k_enitity"; } break; - case k_type: { return "k_type"; } break; -#if 0 - case k_type_class: { return "k_type_class"; } break; - case k_type_strct: { return "k_type_strct:"; } break; - case k_type_method: { return "k_type_method:"; } break; - case k_type_union: { return "k_type_union"; } break; - case k_type_array: { return "k_type_array"; } break; - case k_type_enumeration: { return "k_type_enumeration"; } break; - case k_type_pointer: { return "k_type_pointer"; } break; - case k_type_primitive: { return "k_type_primitive"; } break; -#endif - case k_ir_node: { return "k_ir_node"; } break; - default: break; + case k_entity : return "k_entity"; + case k_type : return "k_type"; + case k_ir_graph : return "k_ir_graph"; + case k_ir_node : return "k_ir_node"; + case k_ir_mode : return "k_ir_mode"; + case k_ir_op : return "k_ir_op"; + case k_tarval : return "k_tarval"; + case k_ir_loop : return "k_ir_loop"; + case k_ir_compound_graph_path : return "k_ir_compound_graph_path"; + case k_ir_extblk : return "k_ir_extblk"; + case k_ir_prog : return "k_ir_prog"; + default: return ""; + } +} /* print_firm_kind */ + +/* + * identify a firm thing + */ +void firm_identify_thing(void *X) +{ + if (! X) { + printf("(NULL)\n"); + return; + } + + switch (get_kind(X)) { + case k_BAD: + printf("BAD: (%p)\n", X); + break; + case k_entity: + printf("entity: %s: %ld (%p)\n", get_entity_name(X), get_entity_nr(X), X); + break; + case k_type: + printf("type: %s %s: %ld (%p)\n", get_type_tpop_name(X), get_type_name(X), get_type_nr(X), X); + break; + case k_ir_graph: + printf("graph: %s: %ld (%p)\n", get_entity_name(get_irg_entity(X)), get_irg_graph_nr(X), X); + break; + case k_ir_node: + printf("irnode: %s%s %ld (%p)\n", get_irn_opname(X), get_mode_name(get_irn_mode(X)), get_irn_node_nr(X), X); + break; + case k_ir_mode: + printf("mode %s: (%p)\n", get_mode_name(X), X); + break; + case k_ir_op: + printf("op %s: (%p)\n", get_op_name(X), X); + break; + case k_tarval: + printf("tarval : "); tarval_printf(X); printf(" (%p)\n", X); + break; + case k_ir_loop: + printf("loop: with depth %d: (%p)\n", get_loop_depth(X), X); + break; + case k_ir_compound_graph_path: + printf("compound_graph_path: (%p)\n", X); + break; + case k_ir_extblk: + printf("extended block: (%p)\n", X); + break; + case k_ir_prog: + printf("irp: (%p)\n", X); + break; + default: + printf("Cannot identify thing at (%p).\n", X); } - return ""; -} +} /* firm_identify_thing */