9 /****h* libfirm/type_t.h
14 * (C) 2001 by Universitaet Karlsruhe
18 * This file contains the datatypes hidden in type.h.
20 * type.h tpop_t.h tpop.h
25 entity **members; /* fields and methods of this class */
26 type **subtypes; /* direct subtypes */
27 type **supertypes; /* direct supertypes */
28 peculiarity peculiarity;
29 int dfn; /* number used for 'instanceof' operator */
33 entity **members; /* fields of this struct. No method entities
38 int n_params; /* number of parameters */
39 type **param_type; /* code generation needs this information.
40 @@@ Should it be generated by the frontend,
41 or does this impose unnecessary work for
42 optimizations that change the parameters of
44 int n_res; /* number of results */
45 type **res_type; /* array with result types */
50 /* type **unioned_type; * a list of unioned types. */
51 /* ident **delim_names; * names of the union delimiters. */
52 entity **members; /* fields of this union. No method entities
58 int n_dimensions; /* Number of array dimensions. */
59 ir_node **lower_bound; /* Lower bounds of dimensions. Usually all 0. */
60 ir_node **upper_bound; /* Upper bounds or dimensions. */
61 int *order; /* Ordering of dimensions. */
62 type *element_type; /* The type of the array elements. */
63 entity *element_ent; /* Entity for the array elements, to be used for
64 element selection with Sel. */
68 int n_enums; /* Number of enumerators. */
69 tarval **enumer; /* Contains all constants that represent a member
70 of the enum -- enumerators. */
71 ident **enum_nameid;/* Contains the names of the enum fields as specified by
76 type *points_to; /* The type of the enitity the pointer points to. */
80 typedef struct { * No private attr yet! *
85 typedef struct { * No private attr, must be smaller than others! *
104 type_state state; /* Represents the types state: layout undefined or
106 int size; /* Size of an entity of this type. This is determined
107 when fixing the layout of this class. Size must be
109 ir_mode *mode; /* The mode for atomic types */
110 unsigned long visit; /* visited counter for walks of the type information */
111 void *link; /* holds temporary data - like in irnode_t.h */
112 struct dbg_info* dbi; /* A pointer to information for debug support. */
113 tp_attr attr; /* type kind specific fields. This must be the last
114 entry in this struct! Varying size! */
117 /****f* type_t.h/new_type
120 * new_type - creates a new type representation
122 * type *new_type(tp_op *type_op, ir_mode *mode, ident* name);
124 * type_op - the kind of this type. May not be type_id.
125 * mode - the mode to be used for this type, may be NULL
126 * name - an ident for the name of this type.
128 * a new type of the given type. The remaining private attributes are not
129 * initalized. The type is in state layout_undefined.
133 new_type(tp_op *type_op,
136 void free_type_attrs (type *tp);
138 INLINE void free_class_attrs (type *clss);
139 INLINE void free_struct_attrs (type *strct);
140 INLINE void free_method_attrs (type *method);
141 INLINE void free_union_attrs (type *uni);
142 INLINE void free_array_attrs (type *array);
143 INLINE void free_enumeration_attrs(type *enumeration);
144 INLINE void free_pointer_attrs (type *pointer);
145 INLINE void free_primitive_attrs (type *primitive);
148 # endif /* _TYPE_T_H_ */