- none_type = new_type(tpop_none, mode_BAD, new_id_from_str("type_none"));
- set_type_size (none_type, 0);
- set_type_state (none_type, layout_fixed);
- remove_irp_type(none_type);
- unknown_type = new_type(tpop_unknown, mode_ANY, new_id_from_str("type_unknown"));
- set_type_size (unknown_type, 0);
- set_type_state (unknown_type, layout_fixed);
- remove_irp_type(unknown_type);
-}
-
-unsigned long type_visited;
-INLINE void set_master_type_visited(unsigned long val) { type_visited = val; }
-INLINE unsigned long get_master_type_visited() { return type_visited; }
-INLINE void inc_master_type_visited() { type_visited++; }
-
-void free_type(type *tp) {
+ firm_none_type = new_type(tpop_none, mode_BAD, new_id_from_str("type_none"), builtin_db);
+ set_type_size_bits(firm_none_type, 0);
+ set_type_state (firm_none_type, layout_fixed);
+ remove_irp_type(firm_none_type);
+
+ firm_unknown_type = new_type(tpop_unknown, mode_ANY, new_id_from_str("type_unknown"), builtin_db);
+ set_type_size_bits(firm_unknown_type, 0);
+ set_type_state (firm_unknown_type, layout_fixed);
+ remove_irp_type(firm_unknown_type);
+}
+
+/** the global type visited flag */
+unsigned long firm_type_visited;
+
+void (set_master_type_visited)(unsigned long val) { _set_master_type_visited(val); }
+unsigned long (get_master_type_visited)(void) { return _get_master_type_visited(); }
+void (inc_master_type_visited)(void) { _inc_master_type_visited(); }
+
+/*
+ * Creates a new type representation.
+ */
+ir_type *
+new_type(tp_op *type_op, ir_mode *mode, ident *name, dbg_info *db) {
+ ir_type *res;
+ int node_size;
+
+ assert(type_op != type_id);
+ assert(!id_contains_char(name, ' ') && "type name should not contain spaces");
+
+ node_size = offsetof(ir_type, attr) + type_op->attr_size;
+ res = xmalloc(node_size);
+ memset(res, 0, node_size);
+
+ res->kind = k_type;
+ res->type_op = type_op;
+ res->mode = mode;
+ res->name = name;
+ res->visibility = visibility_external_allocated;
+ res->flags = tf_none;
+ res->size = -1;
+ res->align = -1;
+ res->visit = 0;
+ res->link = NULL;
+ res->dbi = db;
+ res->assoc_type = NULL;
+#ifdef DEBUG_libfirm
+ res->nr = get_irp_new_node_nr();
+#endif /* defined DEBUG_libfirm */
+
+ add_irp_type(res); /* Remember the new type global. */
+
+ return res;
+}
+
+void free_type(ir_type *tp) {
+ const tp_op *op = get_type_tpop(tp);
+