res->visibility = visibility_local;
res->offset = -1;
if (is_method_type(type)) {
+ symconst_symbol sym;
+ sym.entity_p = res;
res->variability = variability_constant;
rem = current_ir_graph;
current_ir_graph = get_const_code_irg();
- res->value = new_Const(mode_P_mach, new_tarval_from_entity(res, mode_P_mach));
+ res->value = new_SymConst(sym, symconst_addr_ent);
current_ir_graph = rem;
} else {
res->variability = variability_uninitialized;
}
res->peculiarity = peculiarity_existent;
res->volatility = volatility_non_volatile;
+ res->stickyness = stickyness_unsticky;
res->ld_name = NULL;
if (is_class_type(owner)) {
res->overwrites = NEW_ARR_F(entity *, 0);
}
const char *
-get_entity_name (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return get_id_str(get_entity_ident(ent));
+(get_entity_name)(entity *ent) {
+ return __get_entity_name(ent);
}
ident *
-get_entity_ident (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->name;
+(get_entity_ident)(entity *ent) {
+ return get_entity_ident(ent);
}
/*
*/
type *
-get_entity_owner (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->owner = skip_tid(ent->owner);
+(get_entity_owner)(entity *ent) {
+ return __get_entity_owner(ent);
}
void
}
ident *
-get_entity_ld_ident (entity *ent)
-{
- assert(ent && ent->kind == k_entity);
- if (ent->ld_name == NULL)
- ent->ld_name = mangle_entity (ent);
- return ent->ld_name;
+(get_entity_ld_ident)(entity *ent) {
+ return __get_entity_ld_ident(ent);
}
void
-set_entity_ld_ident (entity *ent, ident *ld_ident) {
- assert(ent && ent->kind == k_entity);
- ent->ld_name = ld_ident;
+(set_entity_ld_ident)(entity *ent, ident *ld_ident) {
+ __set_entity_ld_ident(ent, ld_ident);
}
const char *
-get_entity_ld_name (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return get_id_str(get_entity_ld_ident(ent));
+(get_entity_ld_name)(entity *ent) {
+ return __get_entity_ld_name(ent);
}
-/*
-char *get_entity_ld_name (entity *);
-void set_entity_ld_name (entity *, char *ld_name);
-*/
-
type *
-get_entity_type (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->type = skip_tid(ent->type);
+(get_entity_type)(entity *ent) {
+ return __get_entity_type(ent);
}
void
-set_entity_type (entity *ent, type *type) {
- assert(ent && ent->kind == k_entity);
- ent->type = type;
+(set_entity_type)(entity *ent, type *type) {
+ __set_entity_type(ent, type);
}
-
ent_allocation
-get_entity_allocation (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->allocation;
+(get_entity_allocation)(entity *ent) {
+ return __get_entity_allocation(ent);
}
void
-set_entity_allocation (entity *ent, ent_allocation al) {
- assert(ent && ent->kind == k_entity);
- ent->allocation = al;
+(set_entity_allocation)(entity *ent, ent_allocation al) {
+ __set_entity_allocation(ent, al);
}
/* return the name of the visibility */
ent_visibility
-get_entity_visibility (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->visibility;
+(get_entity_visibility)(entity *ent) {
+ return __get_entity_visibility(ent);
}
void
}
ent_variability
-get_entity_variability (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->variability;
+(get_entity_variability)(entity *ent) {
+ return __get_entity_variability(ent);
}
void
}
ent_volatility
-get_entity_volatility (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->volatility;
+(get_entity_volatility)(entity *ent) {
+ return __get_entity_volatility(ent);
}
void
-set_entity_volatility (entity *ent, ent_volatility vol) {
- assert(ent && ent->kind == k_entity);
- ent->volatility = vol;
+(set_entity_volatility)(entity *ent, ent_volatility vol) {
+ __set_entity_volatility(ent, vol);
}
/* return the name of the volatility */
}
peculiarity
-get_entity_peculiarity (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->peculiarity;
+(get_entity_peculiarity)(entity *ent) {
+ return __get_entity_peculiarity(ent);
}
void
-set_entity_peculiarity (entity *ent, peculiarity pec) {
- assert(ent && ent->kind == k_entity);
- /* @@@ why peculiarity only for methods? */
- assert(is_method_type(ent->type));
- ent->peculiarity = pec;
+(set_entity_peculiarity)(entity *ent, peculiarity pec) {
+ __set_entity_peculiarity(ent, pec);
}
/* return the name of the peculiarity */
#undef X
}
+/* Get the entity's stickyness */
+ent_stickyness
+(get_entity_stickyness)(entity *ent) {
+ return __get_entity_stickyness(ent);
+}
+
+/* Set the entity's stickyness */
+void
+(set_entity_stickyness)(entity *ent, ent_stickyness stickyness) {
+ __set_entity_stickyness(ent, stickyness);
+}
+
/* Set has no effect for existent entities of type method. */
ir_node *
get_atomic_ent_value(entity *ent)
case iro_Unknown:
return true; break;
case iro_Add:
- if (is_irn_const_expression(get_Add_left(n)))
- return is_irn_const_expression(get_Add_right(n));
+ case iro_Sub:
+ case iro_Mul:
+ case iro_And:
+ case iro_Or:
+ case iro_Eor:
+ if (is_irn_const_expression(get_binop_left(n)))
+ return is_irn_const_expression(get_binop_right(n));
case iro_Conv:
case iro_Cast:
return is_irn_const_expression(get_irn_n(n, 0));
case iro_Const:
nn = new_Const(m, get_Const_tarval(n)); break;
case iro_SymConst:
- nn = new_SymConst(get_SymConst_type_or_id(n), get_SymConst_kind(n)); break;
+
+ nn = new_SymConst(get_SymConst_type_or_id(n), get_SymConst_kind(n));
+ break;
case iro_Add:
nn = new_Add(copy_const_value(get_Add_left(n)),
copy_const_value(get_Add_right(n)), m); break;
+ case iro_Sub:
+ nn = new_Sub(copy_const_value(get_Sub_left(n)),
+ copy_const_value(get_Sub_right(n)), m); break;
+ case iro_Mul:
+ nn = new_Mul(copy_const_value(get_Mul_left(n)),
+ copy_const_value(get_Mul_right(n)), m); break;
+ case iro_And:
+ nn = new_And(copy_const_value(get_And_left(n)),
+ copy_const_value(get_And_right(n)), m); break;
+ case iro_Or:
+ nn = new_Or(copy_const_value(get_Or_left(n)),
+ copy_const_value(get_Or_right(n)), m); break;
+ case iro_Eor:
+ nn = new_Eor(copy_const_value(get_Eor_left(n)),
+ copy_const_value(get_Eor_right(n)), m); break;
case iro_Cast:
nn = new_Cast(copy_const_value(get_Cast_op(n)), get_Cast_type(n)); break;
case iro_Conv:
}
int
-get_entity_offset (entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->offset;
+(get_entity_offset_bytes)(entity *ent) {
+ return __get_entity_offset_bytes(ent);
+}
+
+int
+(get_entity_offset_bits)(entity *ent) {
+ return __get_entity_offset_bits(ent);
}
void
-set_entity_offset (entity *ent, int offset) {
- assert(ent && ent->kind == k_entity);
- ent->offset = offset;
+(set_entity_offset_bytes)(entity *ent, int offset) {
+ __set_entity_offset_bytes(ent, offset);
}
void
-add_entity_overwrites (entity *ent, entity *overwritten) {
+(set_entity_offset_bits)(entity *ent, int offset) {
+ __set_entity_offset_bits(ent, offset);
+}
+
+void
+add_entity_overwrites(entity *ent, entity *overwritten) {
assert(ent && is_class_type(get_entity_owner(ent)));
- ARR_APP1 (entity *, ent->overwrites, overwritten);
- ARR_APP1 (entity *, overwritten->overwrittenby, ent);
+ ARR_APP1(entity *, ent->overwrites, overwritten);
+ ARR_APP1(entity *, overwritten->overwrittenby, ent);
}
int
-get_entity_n_overwrites (entity *ent) {
+get_entity_n_overwrites(entity *ent) {
assert(ent && is_class_type(get_entity_owner(ent)));
- return (ARR_LEN (ent->overwrites));
+ return (ARR_LEN(ent->overwrites));
}
int
/* A link to store intermediate information */
void *
-get_entity_link(entity *ent) {
- assert(ent && ent->kind == k_entity);
- return ent->link;
+(get_entity_link)(entity *ent) {
+ return __get_entity_link(ent);
}
void
-set_entity_link(entity *ent, void *l) {
- assert(ent && ent->kind == k_entity);
- ent->link = l;
+(set_entity_link)(entity *ent, void *l) {
+ __set_entity_link(ent, l);
}
ir_graph *
-get_entity_irg(entity *ent) {
- assert(ent && ent->kind == k_entity);
- assert(is_method_type(ent->type));
- return ent->irg;
+(get_entity_irg)(entity *ent) {
+ return __get_entity_irg(ent);
}
void
* Methode selbst nicht mehr aufgerufen werden kann, die Entität
* aber erhalten bleiben soll. */
/* assert(irg); */
- assert(ent->peculiarity == peculiarity_existent);
+ assert((irg && ent->peculiarity == peculiarity_existent) ||
+ (!irg && ent->peculiarity == peculiarity_description) ||
+ (!irg && ent->peculiarity == peculiarity_inherited));
ent->irg = irg;
}
-int is_entity (void *thing) {
- assert(thing);
- if (get_kind(thing) == k_entity)
- return 1;
- else
- return 0;
+int
+(is_entity)(void *thing) {
+ return __is_entity(thing);
}
int is_atomic_entity(entity *ent) {
is_array_type(t) || is_union_type(t));
}
-/* @@@ not implemnted!!! */
+/**
+ * @todo not implemnted!!! */
bool equal_entity(entity *ent1, entity *ent2) {
printf(" calling unimplemented equal entity!!! \n");
return true;
return res;
}
-/* Returns the dynamically referenced entity if the static entity and the
- * dynamic type are given.
- * Search downwards in overwritten tree. */
+/** Resolve polymorphy in the inheritance relation.
+ *
+ * Returns the dynamically referenced entity if the static entity and the
+ * dynamic type are given.
+ * Search downwards in overwritten tree. */
entity *resolve_ent_polymorphy(type *dynamic_class, entity* static_ent) {
entity *res;
assert(static_ent && static_ent->kind == k_entity);
dump_entity(static_ent);
dump_type(get_entity_owner(static_ent));
dump_type(dynamic_class);
-
}
assert(res);
return res;
for (i = 0; i < get_compound_ent_n_values(ent); ++i) {
compound_graph_path *path = get_compound_ent_value_path(ent, i);
entity *ent0 = get_compound_graph_path_node(path, 0);
- printf("\n %2d %s", get_entity_offset(ent0), get_entity_name(ent0));
+ printf("\n %3d %s", get_entity_offset_bits(ent0), get_entity_name(ent0));
for (j = 1; j < get_compound_graph_path_length(path); ++j)
printf(".%s", get_entity_name(get_compound_graph_path_node(path, j)));
printf("\t = ");
printf("\n peculiarity: %s", get_peculiarity_string(get_entity_peculiarity(ent)));
printf("\n ld_name: %s", ent->ld_name ? get_entity_ld_name(ent) : "no yet set");
- printf("\n offset: %d", get_entity_offset(ent));
+ printf("\n offset: %d", get_entity_offset_bits(ent));
if (is_method_type(get_entity_type(ent))) {
if (get_entity_irg(ent)) /* can be null */
{ printf ("\n irg = %ld", get_irg_graph_nr(get_entity_irg(ent))); }