type *tp; /**< The type this path belongs to. */
int len; /**< length of the path */
int *arr_indicees; /**< List of array indicees. To compute position of
- array elements */
+ array elements */
entity *nodes[1]; /**< List of entities of length len to express the
- access path. */
+ access path. */
};
/** the type of an entity */
ent_volatility volatility; /**< Specifies volatility of entities content */
ent_stickyness stickyness; /**< Specifies whether this entity is sticky */
int offset; /**< Offset in bits for this entity. Fixed when layout
- of owner is determined. */
+ of owner is determined. */
void *link; /**< To store some intermediate information */
unsigned long visit; /**< visited counter for walks of the type information */
struct dbg_info* dbi; /**< A pointer to information for debug support. */
/* ------------- fields for compound entities ---------------*/
ir_node **values; /**< constant values of compound entities. Only available if
- variablility not uninitialized. Must be set for variability constant
+ variablility not uninitialized. Must be set for variability constant
*/
compound_graph_path **val_paths; /**< paths corresponding to constant values. Only available if
- variablility not uninitialized. Must be set for variability constant */
+ variablility not uninitialized. Must be set for variability constant */
/* ------------- fields for entities owned by a class type ---------------*/
enum peculiarity peculiarity;
ir_graph *irg; /**< If (type == method_type) this is the corresponding irg.
- The ir_graph constructor automatically sets this field.
- Yes, it must be here. */
+ The ir_graph constructor automatically sets this field.
+ Yes, it must be here. */
/* ------------- fields for analyses ---------------*/
- ir_node **accesses; /**< accessing nodes: loads, stores. */
#ifdef DEBUG_libfirm
int nr; /**< a unique node number for each node to make output
- readable. */
-#endif
+ readable. */
+ char *c_name; /**< Since idents are ipaque, provide the name in cleartext */
+# endif /* DEBUG_libfirm */
};
+
+
/* ----------------------- inline functions ------------------------ */
static INLINE int
-__is_entity(void *thing) {
+__is_entity(const void *thing) {
return get_kind(thing) == k_entity;
}
static INLINE const char *
-__get_entity_name(entity *ent) {
+__get_entity_name(const entity *ent) {
assert(ent && ent->kind == k_entity);
return get_id_str(get_entity_ident(ent));
}
static INLINE ident *
-__get_entity_ident(entity *ent) {
+__get_entity_ident(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->name;
}
}
static INLINE ent_allocation
-__get_entity_allocation(entity *ent) {
+__get_entity_allocation(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->allocation;
}
}
static INLINE ent_visibility
-__get_entity_visibility(entity *ent) {
+__get_entity_visibility(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->visibility;
}
static INLINE ent_variability
-__get_entity_variability(entity *ent) {
+__get_entity_variability(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->variability;
}
static INLINE ent_volatility
-__get_entity_volatility(entity *ent) {
+__get_entity_volatility(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->volatility;
}
}
static INLINE peculiarity
-__get_entity_peculiarity(entity *ent) {
+__get_entity_peculiarity(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->peculiarity;
}
assert(ent && ent->kind == k_entity);
/* @@@ why peculiarity only for methods? */
assert(is_method_type(ent->type));
+
ent->peculiarity = pec;
}
static INLINE ent_stickyness
-__get_entity_stickyness(entity *ent) {
+__get_entity_stickyness(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->stickyness;
}
}
static INLINE int
-__get_entity_offset_bits(entity *ent) {
+__get_entity_offset_bits(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->offset;
}
static INLINE int
-__get_entity_offset_bytes(entity *ent) {
+__get_entity_offset_bytes(const entity *ent) {
int bits = __get_entity_offset_bits(ent);
if (bits & 7) return -1;
}
static INLINE void *
-__get_entity_link(entity *ent) {
+__get_entity_link(const entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->link;
}
}
static INLINE ir_graph *
-__get_entity_irg(entity *ent) {
+__get_entity_irg(const entity *ent) {
assert(ent && ent->kind == k_entity);
- assert(is_method_type(ent->type));
+ assert(ent == unknown_entity || is_method_type(ent->type));
return ent->irg;
}