X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana2%2Fpto_name.c;h=50cfec7fbd632dc18ba4d1ab80470b4f2260e689;hb=ff0e8d7fcb34481652f0bf521ba04b1eca5e2106;hp=e21b948b89eeefd771743903fecd32b173744452;hpb=aa388568d808e9db50b94eb70d6c3f835c1cd088;p=libfirm diff --git a/ir/ana2/pto_name.c b/ir/ana2/pto_name.c index e21b948b8..50cfec7fb 100644 --- a/ir/ana2/pto_name.c +++ b/ir/ana2/pto_name.c @@ -8,7 +8,7 @@ Modified by: Created: Sat Nov 13 19:35:27 CET 2004 CVS-ID: $Id$ - Copyright: (c) 1999-2004 Universität Karlsruhe + Copyright: (c) 1999-2004 Universit�t Karlsruhe Licence: This file is protected by the GPL - GNU GENERAL PUBLIC LICENSE. */ @@ -24,7 +24,11 @@ # include "pto_name.h" # include "pto_util.h" +#include + +#ifdef HAVE_STRING_H # include /* for memcpy */ +#endif # include # include @@ -33,6 +37,7 @@ # include "xmalloc.h" # include "pto_debug.h" +# include "gnu_ext.h" /* Local Defines: */ # define obstack_chunk_alloc xmalloc @@ -156,12 +161,12 @@ static int pto_name_alloc_arr_color (arr_desc_t *arr_desc) /* allocate nice colors for the given descriptor */ static int pto_name_alloc_color (desc_t *desc) { + int col_idx = 0; + if (0 != desc->col_idx) { return (desc->col_idx); } - int col_idx = 0; - if (FALSE == desc->visit) { desc->visit = TRUE; if (object == desc->kind) { @@ -197,9 +202,9 @@ static void pto_name_alloc_colors (void) /* See whether the given entity is a field. */ static int is_field (entity *ent) { - type *tp = get_entity_type (ent); + ir_type *tp = get_entity_type (ent); - if (is_primitive_type (tp) || is_pointer_type (tp)) { + if (is_Primitive_type (tp) || is_Pointer_type (tp)) { /* actually, we don't get by by restricting ourselves to pointer types */ return (TRUE); } else { @@ -207,9 +212,9 @@ static int is_field (entity *ent) } } -/* Helper to collect_fields(type*): collect all fields of the given +/* Helper to collect_fields(ir_type*): collect all fields of the given clazz and its super classes into the given obstack. */ -static void _collect_fields (type *clazz, struct obstack *obst) +static void _collect_fields (ir_type *clazz, struct obstack *obst) { int n_members = get_class_n_members (clazz); int n_supers = get_class_n_supertypes (clazz); @@ -226,7 +231,7 @@ static void _collect_fields (type *clazz, struct obstack *obst) } for (i = 0; i < n_supers; i ++) { - type *s_clazz = get_class_supertype (clazz, i); + ir_type *s_clazz = get_class_supertype (clazz, i); _collect_fields (s_clazz, obst); } @@ -234,38 +239,42 @@ static void _collect_fields (type *clazz, struct obstack *obst) /* Collect the fields of the given class and its super classes into an array. The last entry of the array is written NULL. */ -static entity **collect_fields (type *clazz) +static entity **collect_fields (ir_type *clazz) { + struct obstack obst; + int n_fields; + entity ** fields; + void *tmp; + if (NULL != get_type_link (clazz)) { DBGPRINT (3, (stdout, "%s: reusing field list for \"%s\"\n", - __FUNCTION__, get_type_name (clazz))); + __FUNCTION__, + get_type_name (clazz))); return ((entity **) get_type_link (clazz)); } else { DBGPRINT (2, (stdout, "%s: new field list for \"%s\"\n", - __FUNCTION__, get_type_name (clazz))); + __FUNCTION__, + get_type_name (clazz))); } - struct obstack obst; - obstack_init (&obst); _collect_fields (clazz, &obst); /* append terminating NULL */ - int *the_null = NULL; - obstack_ptr_grow (&obst, the_null); + obstack_ptr_grow (&obst, NULL); - int n_fields = obstack_object_size (&obst) / sizeof (void*); + n_fields = obstack_object_size (&obst) / sizeof (void*); - entity ** fields = (entity**) NALLOC (n_fields * sizeof (entity*)); - void *tmp = obstack_finish (&obst); + fields = NALLOC (n_fields * sizeof (entity*)); + tmp = obstack_finish(&obst); memcpy (fields, tmp, n_fields * sizeof (entity*)); obstack_free (&obst, NULL); - set_type_link (clazz, (void*) fields); + set_type_link (clazz, fields); return (fields); } @@ -293,19 +302,27 @@ static void pto_name_dump_finish (FILE *stream) /* Write a node for the given descriptor into the given stream */ static void pto_name_dump_desc (desc_t *desc, FILE *stream) { - type *tp = desc->tp; + ir_type *tp = desc->tp; const char *tp_name = get_type_name (tp); + ir_node *nd; fprintf (stream, "\t/* %s \"%s\" */\n", object == desc->kind ? "Object" : "Array", tp_name); - fprintf (stream, "\tdesc_%i [label=\"type \\[%i\\]\\lname=\\\"%s\\\"", - desc->id, - desc->id, + fprintf (stream, "\tdesc_%i [label=\"type \\[%i\\]", + desc->id, desc->id); + + if (-1 != desc->ctx) { + fprintf (stream, ", ctx = %i", desc->ctx); + } else { + fprintf (stream, " (global)"); + } + + fprintf (stream, "\\lname=\\\"%s\\\"", tp_name); - ir_node *nd = desc->node; + nd = desc->node; if (NULL != nd) { ir_graph *graph = get_irn_irg (nd); @@ -328,7 +345,7 @@ static void pto_name_dump_desc (desc_t *desc, FILE *stream) for (i = 0; i < obj_desc->n_fields; i ++) { entity *field = obj_desc->fields [i]; - if (is_pointer_type (get_entity_type (field))) { + if (is_Pointer_type (get_entity_type (field))) { const char *ent_name = get_entity_name (field); fprintf (stream, "|<%i>%s", i, ent_name); @@ -344,46 +361,47 @@ static void pto_name_dump_desc (desc_t *desc, FILE *stream) fprintf (stream, "\""); # ifdef PTO_COLOR - int col_idx = desc->col_idx; - float hue = (float) col_idx / (float) last_col_idx; - float sat = 1.000; /* 0.300 .. 1.000 */ - float val = 0.800; /* 0.300 .. 1.000 */ - -# define MAX_COLORS 12 - if (last_col_idx > MAX_COLORS) { - /* too many colors ... vary value too */ - float div = (float) MAX_COLORS / (float) last_col_idx; - - sat = (div * ((col_idx / MAX_COLORS))); - val = (div * ((col_idx / MAX_COLORS))); - - col_idx = col_idx % MAX_COLORS; - hue = (float) col_idx / (float) MAX_COLORS; - - // re-adjust sat and val - { - const float sat_min = 0.200; /* 0.200 .. 0.400 */ - const float val_min = 0.300; /* 0.300 .. 0.400 */ - - sat = sat_min + ((1.0 - sat_min) * sat); - val = val_min + ((1.0 - val_min) * val); + { + const char *fontcolor; + int col_idx = desc->col_idx; + float hue = (float) col_idx / (float) last_col_idx; + float sat = 1.000f; /* 0.300 .. 1.000 */ + float val = 0.800f; /* 0.300 .. 1.000 */ + + # define MAX_COLORS 12 + if (last_col_idx > MAX_COLORS) { + /* too many colors ... vary value too */ + float div = (float) MAX_COLORS / (float) last_col_idx; + + sat = (div * ((col_idx / MAX_COLORS))); + val = (div * ((col_idx / MAX_COLORS))); + + col_idx = col_idx % MAX_COLORS; + hue = (float) col_idx / (float) MAX_COLORS; + + // re-adjust sat and val + { + const float sat_min = 0.200f; /* 0.200 .. 0.400 */ + const float val_min = 0.300f; /* 0.300 .. 0.400 */ + + sat = sat_min + ((1.0f - sat_min) * sat); + val = val_min + ((1.0f - val_min) * val); + } } - } -# undef MAX_COLORS + # undef MAX_COLORS - fprintf (stream, ", color=\"%01.3f, %01.3f, %01.3f\"", hue, sat, val); + fprintf (stream, ", color=\"%01.3f, %01.3f, %01.3f\"", hue, sat, val); - char *fontcolor; + if ((hue > 0.3) && (sat < 0.5)) { + fontcolor = "white"; + } else if (sat < 0.4) { + fontcolor = "white"; + } else { + fontcolor = "black"; + } - if ((hue > 0.3) && (sat < 0.5)) { - fontcolor = "white"; - } else if (sat < 0.4) { - fontcolor = "white"; - } else { - fontcolor = "black"; + fprintf (stream, ", fontcolor=\"%s\"", fontcolor); } - - fprintf (stream, ", fontcolor=\"%s\"", fontcolor); # else /* if defined PTO_COLOR */ fprintf (stream, ", color=\"lightgrey\""); # endif /* defined PTO_COLOR */ @@ -450,22 +468,24 @@ qset_t *get_entry (desc_t *desc, entity *ent) } else { assert (0 && "invalid descriptor"); } + return NULL; } /* get a new descriptor for the given type at the given node */ -desc_t *new_name (type *tp, ir_node *node) +desc_t *new_name (ir_type *tp, ir_node *node, int ctx) { desc_t *desc = NULL; - assert ((is_class_type (tp) || is_array_type (tp)) && "unsuitable type"); + assert ((is_Class_type (tp) || is_Array_type (tp)) && "unsuitable type"); - DBGPRINT (2, (stdout, "%s: new name for type \"%s\"\n", __FUNCTION__, + DBGPRINT (2, (stdout, "%s: new name for type \"%s\"\n", + __FUNCTION__, get_type_name (tp))); fflush (stdout); - if (is_class_type (tp)) { - obj_desc_t *obj_desc = (obj_desc_t*) NALLOC (sizeof (obj_desc_t)); + if (is_Class_type (tp)) { + obj_desc_t *obj_desc = NALLOC (sizeof (obj_desc_t)); int i; int n_fields; @@ -477,14 +497,14 @@ desc_t *new_name (type *tp, ir_node *node) } obj_desc->n_fields = n_fields; - obj_desc->values = (qset_t**) NALLOC (n_fields * sizeof (qset_t)); + obj_desc->values = (qset_t**) NALLOC (n_fields * sizeof (qset_t*)); for (i = 0; i < n_fields; i ++) { obj_desc->values [i] = qset_new (N_INITIAL_OJBS, qset_obst); } desc = (desc_t*) obj_desc; - } else if (is_array_type (tp)) { + } else if (is_Array_type (tp)) { arr_desc_t *arr_desc = (arr_desc_t*) NALLOC (sizeof (arr_desc_t)); arr_desc->kind = array; @@ -493,13 +513,14 @@ desc_t *new_name (type *tp, ir_node *node) desc = (desc_t*) arr_desc; } - desc->id = name_id ++; + desc->id = name_id ++; desc->col_idx = 0; - desc->tp = tp; + desc->tp = tp; desc->visit = FALSE; - desc->node = node; + desc->ctx = ctx; + desc->node = node; - desc->prev = all_descs; + desc->prev = all_descs; all_descs = desc; return (desc); @@ -514,15 +535,16 @@ desc_t *new_ent_name (entity *ent) { int i; int missing = TRUE; - type *tp = get_entity_type (ent); + ir_type *tp = get_entity_type (ent); - assert (is_pointer_type (tp)); + assert (is_Pointer_type (tp)); tp = get_pointer_points_to_type (tp); - assert (is_class_type (tp)); + assert (is_Class_type (tp)); - DBGPRINT (2, (stdout, "%s: new name for entity \"%s\"\n", __FUNCTION__, + DBGPRINT (2, (stdout, "%s: new name for entity \"%s\"\n", + __FUNCTION__, get_entity_name (ent))); - DBGEXE (fflush (stdout)); + DBGEXE (2, (fflush (stdout))); assert (((allocation_static == get_entity_allocation (ent)) || (allocation_automatic == get_entity_allocation (ent))) && @@ -532,6 +554,7 @@ desc_t *new_ent_name (entity *ent) obj_glob = (obj_desc_t*) NALLOC (sizeof (obj_desc_t)); obj_glob->id = name_id ++; + obj_glob->ctx = -1; obj_glob->col_idx = 0; obj_glob->visit = FALSE; obj_glob->kind = object; @@ -602,9 +625,9 @@ void pto_dump_names (const char *name) } /* Initialise the name module */ -void pto_name_init () +void pto_name_init (void) { - DBGPRINT (3, (stdout, "(%s:%i) %s\n", __FILE__, __LINE__, __FUNCTION__)); + DBGPRINT (3, (stdout, "%s\n", __FUNCTION__)); assert (NULL == name_obst); assert (NULL == qset_obst); @@ -616,9 +639,9 @@ void pto_name_init () } /* Cleanup the name module */ -void pto_name_cleanup () +void pto_name_cleanup (void) { - DBGPRINT (3, (stdout, "(%s:%i) %s\n", __FILE__, __LINE__, __FUNCTION__)); + DBGPRINT (3, (stdout, "%s\n", __FUNCTION__)); obstack_free (name_obst, NULL); obstack_free (qset_obst, NULL); @@ -635,6 +658,41 @@ void pto_name_cleanup () /* $Log$ + Revision 1.18 2006/01/13 22:56:21 beck + renamed all types 'type' to 'ir_type' + + Revision 1.17 2005/12/16 16:59:54 grund + *** empty log message *** + + Revision 1.16 2005/12/05 12:19:54 beck + added missing include (not anymore included in libFirm) + + Revision 1.15 2005/03/02 10:14:38 beck + placed a return on all execution pathes + + Revision 1.14 2005/02/17 08:45:38 liekweg + Don't return a value for an invalid descriptor + + Revision 1.13 2005/02/11 10:21:28 beck + get_entry now always returns a value + + Revision 1.12 2005/01/14 14:13:56 liekweg + fix gnu extension, fix fprintf's, fix allocs + + Revision 1.11 2005/01/05 14:25:54 beck + renames all is_x*_type() functions to is_X*_type() to prevent name clash with EDG fronten + + Revision 1.10 2004/12/22 14:43:14 beck + made allocations C-like + + Revision 1.9 2004/12/21 15:34:09 beck + removed C99 constructs + make const float + add default return + + Revision 1.8 2004/12/15 13:30:30 liekweg + use DBGEXE correctly; print yet nicer names + Revision 1.7 2004/12/15 09:18:18 liekweg pto_name.c