tpop.c 2.63 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 "misc.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
tp_op *type_class;         tp_op *get_type_class      () { return type_class;       }
tp_op *type_struct;        tp_op *get_type_struct     () { return type_struct;      }
tp_op *type_method;        tp_op *get_type_method     () { return type_method;      }
tp_op *type_union;         tp_op *get_type_union      () { return type_union;       }
tp_op *type_array;         tp_op *get_type_array      () { return type_array;       }
tp_op *type_enumeration;   tp_op *get_type_enumeration() { return type_enumeration; }
tp_op *type_pointer;       tp_op *get_type_pointer    () { return type_pointer;     }
tp_op *type_primitive;     tp_op *get_type_primitive  () { return type_primitive;   }
tp_op *type_id;            tp_op *get_type_id         () { return type_id;          }
Götz Lindenmaier's avatar
new.  
Götz Lindenmaier committed
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

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)
{
  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);
55
  type_id          = new_tpop (tpo_id         , id_from_str("type_id"    , 7), /* sizeof (id_attr)  */ 0);
Götz Lindenmaier's avatar
new.  
Götz Lindenmaier committed
56
57
58
59
}

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

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;
}