Initial revision
[libfirm] / ir / tr / mangle.c
1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
3 **
4 ** Authors: Martin Trapp, Christian Schaefer
5 **
6 */
7
8 # include "mangle.h"
9 # include <obstack.h>
10 # include "obst.h"
11 # include "entity.h"
12 # include <stdlib.h>
13
14 static struct obstack mangle_obst;
15
16 ident *
17 mangle_entity (entity *ent)
18 {
19   ident *type_id;
20   char *cp;
21   int len;
22   ident *res;
23
24   type_id = mangle_type ((type *) ent->owner);
25   xoprintf (&mangle_obst, "%I_%I", type_id, ent->name);
26   len = obstack_object_size (&mangle_obst);
27   cp = obstack_finish (&mangle_obst);
28   res = id_from_str (cp, len);
29   obstack_free (&mangle_obst, cp);
30   return res;
31 }
32
33 ident *
34 mangle_type (type *type)
35 {
36   char *cp;
37   int len;
38   ident *res;
39
40   assert (type->kind == k_type_class);
41
42   xoprintf (&mangle_obst, "%I", type->clss.name);
43   len = obstack_object_size (&mangle_obst);
44   cp = obstack_finish (&mangle_obst);
45   res = id_from_str (cp, len);
46   obstack_free (&mangle_obst, cp);
47   return res;
48 }
49
50
51 void
52 init_mangle (void)
53 {
54   obstack_init (&mangle_obst);
55 }