#include "error.h"
#include "compound_path.h"
-/*-----------------------------------------------------------------*/
-/** general **/
-/*-----------------------------------------------------------------*/
-
-ir_entity *unknown_entity = NULL;
-
-ir_entity *get_unknown_entity(void) { return unknown_entity; }
-
/** The name of the unknown entity. */
#define UNKNOWN_ENTITY_NAME "unknown_entity"
+ir_entity *get_unknown_entity(void)
+{
+ return irp->unknown_entity;
+}
+
/*-----------------------------------------------------------------*/
/* ENTITY */
/*-----------------------------------------------------------------*/
static ir_entity *intern_new_entity(ir_type *owner, ir_entity_kind kind,
ident *name, ir_type *type, dbg_info *dbgi)
{
- ir_entity *res;
-
- res = XMALLOCZ(ir_entity);
+ ir_entity *res = XMALLOCZ(ir_entity);
res->kind = k_entity;
res->name = name;
ident *name = id_unique("label_%u");
ir_type *global_type = get_glob_type();
ir_entity *res
- = intern_new_entity(global_type, IR_ENTITY_LABEL, name, firm_code_type,
+ = intern_new_entity(global_type, IR_ENTITY_LABEL, name, get_code_type(),
dbgi);
res->attr.code_attr.label = label;
hook_new_entity(res);
assert(ent && ent->kind == k_entity);
free_entity_attrs(ent);
+#ifdef DEBUG_libfirm
ent->kind = k_BAD;
+#endif
xfree(ent);
}
assert(!is_Method_type(type));
break;
case IR_ENTITY_LABEL:
- assert(type == firm_code_type);
+ assert(type == get_code_type());
break;
case IR_ENTITY_COMPOUND_MEMBER:
break;
ent->attr.mtd_attr.vtable_number = vtable_number;
}
+int is_unknown_entity(const ir_entity *entity)
+{
+ return entity->entity_kind == IR_ENTITY_UNKNOWN;
+}
+
int (is_entity)(const void *thing)
{
return _is_entity(thing);
|| entity_has_compound_ent_values(entity);
}
-void ir_init_entity(void)
+void ir_init_entity(ir_prog *irp)
{
- assert(firm_unknown_type && "Call init_type() before firm_init_entity()!");
- assert(!unknown_entity && "Call firm_init_entity() only once!");
-
- unknown_entity = new_d_entity(NULL, new_id_from_str(UNKNOWN_ENTITY_NAME),
- firm_unknown_type, NULL);
- set_entity_visibility(unknown_entity, ir_visibility_external);
- set_entity_ld_ident(unknown_entity, get_entity_ident(unknown_entity));
+ ident *id = new_id_from_str(UNKNOWN_ENTITY_NAME);
+ irp->unknown_entity = intern_new_entity(NULL, IR_ENTITY_UNKNOWN, id,
+ irp->unknown_type, NULL);
+ set_entity_visibility(irp->unknown_entity, ir_visibility_external);
+ set_entity_ld_ident(irp->unknown_entity, id);
+ hook_new_entity(irp->unknown_entity);
}
-void ir_finish_entity(void)
+void ir_finish_entity(ir_prog *irp)
{
- if (unknown_entity != NULL) {
- free_entity(unknown_entity);
- unknown_entity = NULL;
- }
+ free_entity(irp->unknown_entity);
}
ir_allocation get_entity_allocation(const ir_entity *entity)