tpop.c 3.06 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
/*
 * Project:     libFIRM
 * File name:   ir/tr/tpop.c
 * Purpose:     Opcode of types.
 * Author:      Goetz Lindenmaier
 * Modified by:
 * Created:
 * CVS-ID:      $Id$
 * Copyright:   (c) 2001-2003 Universitt Karlsruhe
 * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
 */
Götz Lindenmaier's avatar
new.  
Götz Lindenmaier committed
12

Boris Boesler's avatar
Boris Boesler committed
13

Götz Lindenmaier's avatar
new.  
Götz Lindenmaier committed
14
15
16
17
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

18
# include "xmalloc.h"
Götz Lindenmaier's avatar
new.  
Götz Lindenmaier committed
19
20
21
# include "tpop_t.h"
# include "type_t.h"

22
23
24
25
26
27
28
29
30
31
32
tp_op *type_class;         tp_op *get_tpop_class      (void) { return type_class;       }
tp_op *type_struct;        tp_op *get_tpop_struct     (void) { return type_struct;      }
tp_op *type_method;        tp_op *get_tpop_method     (void) { return type_method;      }
tp_op *type_union;         tp_op *get_tpop_union      (void) { return type_union;       }
tp_op *type_array;         tp_op *get_tpop_array      (void) { return type_array;       }
tp_op *type_enumeration;   tp_op *get_tpop_enumeration(void) { return type_enumeration; }
tp_op *type_pointer;       tp_op *get_tpop_pointer    (void) { return type_pointer;     }
tp_op *type_primitive;     tp_op *get_tpop_primitive  (void) { return type_primitive;   }
tp_op *type_id;            tp_op *get_tpop_id         (void) { return type_id;          }
tp_op *tpop_none;          tp_op *get_tpop_none       (void) { return tpop_none;        }
tp_op *tpop_unknown;       tp_op *get_tpop_unknown    (void) { return tpop_unknown;     }
Götz Lindenmaier's avatar
new.  
Götz Lindenmaier committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

tp_op *
new_tpop (tp_opcode code, ident *name, size_t attr_size)
{
  tp_op *res;

  res = (tp_op *) xmalloc (sizeof (tp_op));
  res->code = code;
  res->name = name;
  res->attr_size = attr_size;
  return res;
}

void
init_tpop(void)
{
49
50
51
52
53
54
55
56
57
58
59
  type_class       = new_tpop (tpo_class      , id_from_str("class"       , 5), sizeof (cls_attr));
  type_struct      = new_tpop (tpo_struct     , id_from_str("struct"      , 6), sizeof (stc_attr));
  type_method      = new_tpop (tpo_method     , id_from_str("method"      , 6), sizeof (mtd_attr));
  type_union       = new_tpop (tpo_union      , id_from_str("union"       , 5), sizeof (uni_attr));
  type_array       = new_tpop (tpo_array      , id_from_str("array"       , 5), sizeof (arr_attr));
  type_enumeration = new_tpop (tpo_enumeration, id_from_str("enumeration" ,11), sizeof (enm_attr));
  type_pointer     = new_tpop (tpo_pointer    , id_from_str("pointer"     , 7), sizeof (ptr_attr));
  type_primitive   = new_tpop (tpo_primitive  , id_from_str("primitive"   , 9), /* sizeof (pri_attr) */ 0);
  type_id          = new_tpop (tpo_id         , id_from_str("type_id"     , 7), /* sizeof (id_attr)  */ 0);
  tpop_none        = new_tpop (tpo_none       , id_from_str("type_none"   , 9), /* sizeof (non_attr) */ 0);
  tpop_unknown     = new_tpop (tpo_unknown    , id_from_str("type_unknown",12), /* sizeof (ukn_attr) */ 0);
Götz Lindenmaier's avatar
new.  
Götz Lindenmaier committed
60
61
62
63
}

/* Returns the string for the tp_opcode. */
const char  *get_tpop_name      (tp_op *op) {
64
  return get_id_str(op->name);
Götz Lindenmaier's avatar
new.  
Götz Lindenmaier committed
65
66
67
68
69
70
71
72
73
74
75
76
77
78
}

tp_opcode get_tpop_code (tp_op *op){
  return op->code;
}

ident *get_tpop_ident(tp_op *op){
  return op->name;
}

/* returns the attribute size of the operator. */
int get_tpop_attr_size (tp_op *op) {
  return op->attr_size;
}