# define _TYPE_H_
# include "tpop.h"
-# include "common.h"
+# include "firm_common.h"
# include "ident.h"
# include "irmode.h"
# include "bool.h"
+# include "dbginfo.h"
+/* to resolve recursion between entity.h and type.h */
#ifndef _ENTITY_TYPEDEF_
#define _ENTITY_TYPEDEF_
-/* to resolve recursion between entity.h and type.h */
typedef struct entity entity;
#endif
* class, struct, method, union, array, enumeration, pointer, primitive
* SOURCE
*/
+#ifndef _TYPE_TYPEDEF_
+#define _TYPE_TYPEDEF_
typedef struct type type;
+#endif
# include "type_or_entity.h"
* SOURCE
*/
extern unsigned long type_visited;
+void set_master_type_visited(unsigned long val);
+unsigned long get_master_type_visited();
+void inc_master_type_visited();
/*****/
/****f* type/is_type
*/
/* create a new class type */
type *new_type_class (ident *name);
+type *new_d_type_class (ident *name, dbg_info *db);
/** manipulate private fields of class type **/
/* Adds the entity as member of the class. */
/* Set and get a class' dfn --
@@@ This is an undocumented field, subject to change! */
-void set_class_dfn (type*, int);
-int get_class_dfn (type*);
+void set_class_dfn (type *clss, int dfn);
+int get_class_dfn (type *clss);
/* typecheck */
bool is_class_type(type *clss);
*/
/* create a new type struct */
type *new_type_struct (ident *name);
+type *new_d_type_struct (ident *name, dbg_info* db);
/* manipulate private fields of struct */
void add_struct_member (type *strct, entity *member);
The arrays for the parameter and result types are not initialized by
the constructor. */
type *new_type_method (ident *name, int n_param, int n_res);
+type *new_d_type_method (ident *name, int n_param, int n_res, dbg_info* db);
/* manipulate private fields of method. */
int get_method_n_params (type *method);
type *get_method_param_type(type *method, int pos);
-void set_method_param_type(type *method, int pos, type* type);
+void set_method_param_type(type *method, int pos, type* tp);
int get_method_n_ress (type *method);
type *get_method_res_type(type *method, int pos);
-void set_method_res_type(type *method, int pos, type* type);
+void set_method_res_type(type *method, int pos, type* tp);
/* typecheck */
bool is_method_type (type *method);
*/
/* create a new type union */
type *new_type_union (ident *name);
+type *new_d_type_union (ident *name, dbg_info* db);
/* manipulate private fields of struct */
int get_union_n_members (type *uni);
bool is_union_type (type *uni);
/*****/
-#if 0
-/* We don't need these if the union has entities, which it now
- does. The entities are necessary for the analysis algorithms. */
-type *get_union_unioned_type (type *uni, int pos);
-void set_union_unioned_type (type *uni, int pos, type *type);
-
-ident *get_union_delim_nameid (type *uni, int pos);
-const char *get_union_delim_name (type *uni, int pos);
-void set_union_delim_nameid (type *uni, int pos, ident *id);
-#endif
-
/****** type/array
* NAME
* Representation of an array type.
Set dimension sizes after call to constructor with set_* routines. */
type *new_type_array (ident *name, int n_dimensions,
type *element_type);
+type *new_d_type_array (ident *name, int n_dimensions,
+ type *element_type, dbg_info* db);
/* manipulate private fields of array type */
int get_array_n_dimensions (type *array);
void set_array_order (type *array, int dimension, int order);
int get_array_order (type *array, int dimension);
-void set_array_element_type (type *array, type *type);
+void set_array_element_type (type *array, type *tp);
type *get_array_element_type (type *array);
void set_array_element_entity (type *array, entity *ent);
*/
/* create a new type enumeration -- set the enumerators independently */
type *new_type_enumeration (ident *name, int n_enums);
+type *new_d_type_enumeration (ident *name, int n_enums, dbg_info* db);
/* manipulate fields of enumeration type. */
int get_enumeration_n_enums (type *enumeration);
*/
/* Create a new type pointer */
type *new_type_pointer (ident *name, type *points_to);
+type *new_d_type_pointer (ident *name, type *points_to, dbg_info* db);
/* manipulate fields of type_pointer */
-void set_pointer_points_to_type (type *pointer, type *type);
+void set_pointer_points_to_type (type *pointer, type *tp);
type *get_pointer_points_to_type (type *pointer);
/* typecheck */
*/
/* create a new type primitive */
type *new_type_primitive (ident *name, ir_mode *mode);
+type *new_d_type_primitive (ident *name, ir_mode *mode, dbg_info* db);
/* typecheck */
bool is_primitive_type (type *primitive);