ir_entity *new_d_entity(ir_type *owner, ident *name, ir_type *type, dbg_info *db) { ir_entity *res; if (is_Method_type(type)) { ir_graph *irg = get_const_code_irg(); symconst_symbol sym; res = intern_new_entity(owner, IR_ENTITY_METHOD, name, type, db); sym.entity_p = res; set_atomic_ent_value(res, new_r_SymConst(irg, mode_P_code, sym, symconst_addr_ent)); res->linkage = IR_LINKAGE_CONSTANT; res->attr.mtd_attr.properties = get_method_additional_properties(type); res->attr.mtd_attr.vtable_number = IR_VTABLE_NUM_NOT_SET; res->attr.mtd_attr.param_access = NULL; res->attr.mtd_attr.param_weight = NULL; res->attr.mtd_attr.irg = NULL; } else if (is_compound_type(owner) && !(owner->flags & tf_segment)) { res = intern_new_entity(owner, IR_ENTITY_COMPOUND_MEMBER, name, type, db); } else { res = intern_new_entity(owner, IR_ENTITY_NORMAL, name, type, db); } hook_new_entity(res); return res; }
static ir_entity *create_ent(ir_entity **const dst, int value, const char *name) { if (!*dst) { ir_mode *const mode = mode_Hu; ir_type *const type = new_type_primitive(mode); set_type_alignment_bytes(type, 4); ir_type *const glob = get_glob_type(); ident *const id = new_id_from_str(name); ir_entity *const ent = new_entity(glob, id, type); set_entity_ld_ident(ent, id); set_entity_visibility(ent, ir_visibility_local); add_entity_linkage(ent, IR_LINKAGE_CONSTANT); ir_graph *const cnst_irg = get_const_code_irg(); ir_node *const cnst = new_r_Const_long(cnst_irg, mode, value); set_atomic_ent_value(ent, cnst); *dst = ent; } return *dst; }