res->volatility = volatility_non_volatile;
res->stickyness = stickyness_unsticky;
res->peculiarity = peculiarity_existent;
+ res->address_taken = ir_address_taken_unknown;
res->final = 0;
res->compiler_gen = 0;
res->offset = -1;
} /* set_entity_peculiarity */
/* Checks if an entity cannot be overridden anymore. */
-int (get_entity_final)(const ir_entity *ent) {
- return _get_entity_final(ent);
-} /* get_entity_final */
+int (is_entity_final)(const ir_entity *ent) {
+ return _is_entity_final(ent);
+} /* is_entity_final */
/* Sets/resets the final flag of an entity. */
void (set_entity_final)(ir_entity *ent, int final) {
- _set_entity_final(ent, final);
-}
+ _set_entity_final(ent, final);
+} /* set_entity_final */
/* Checks if an entity is compiler generated */
-int is_entity_compiler_generated(const ir_entity *ent) {
- assert(is_entity(ent));
- return ent->compiler_gen;
+int (is_entity_compiler_generated)(const ir_entity *ent) {
+ return _is_entity_compiler_generated(ent);
} /* is_entity_compiler_generated */
/* Sets/resets the compiler generated flag */
-void set_entity_compiler_generated(ir_entity *ent, int flag) {
- assert(is_entity(ent));
- ent->compiler_gen = flag ? 1 : 0;
+void (set_entity_compiler_generated)(ir_entity *ent, int flag) {
+ _set_entity_compiler_generated(ent, flag);
} /* set_entity_compiler_generated */
+/* Checks if the address of an entity was taken. */
+ir_address_taken_state (get_entity_address_taken)(const ir_entity *ent) {
+ return _get_entity_address_taken(ent);
+} /* is_entity_address_taken */
+
+/* Sets/resets the address taken flag. */
+void (set_entity_address_taken)(ir_entity *ent, ir_address_taken_state flag) {
+ _set_entity_address_taken(ent, flag);
+} /* set_entity_address_taken */
+
/* Get the entity's stickyness */
ir_stickyness
(get_entity_stickyness)(const ir_entity *ent) {
void set_entity_peculiarity(ir_entity *ent, ir_peculiarity pec);
/** Checks if an entity cannot be overridden anymore. */
-int get_entity_final(const ir_entity *ent);
+int is_entity_final(const ir_entity *ent);
/** Sets/resets the final flag of an entity. */
-void set_entity_final(ir_entity *ent, int final);
+void set_entity_final(ir_entity *ent, int final);
/** Checks if an entity is compiler generated. */
int is_entity_compiler_generated(const ir_entity *ent);
/** Sets/resets the compiler generated flag. */
void set_entity_compiler_generated(ir_entity *ent, int flag);
+/**
+ * The state of the address_taken flag.
+ */
+typedef enum {
+ ir_address_not_taken = 0, /**< The address is NOT taken. */
+ ir_address_taken_unknown = 1, /**< The state of the address taken flag is unknown. */
+ ir_address_taken = 2 /**< The address IS taken. */
+} ir_address_taken_state;
+
+/** Return the state of the address taken flag of an entity. */
+ir_address_taken_state get_entity_address_taken(const ir_entity *ent);
+
+/** Sets/resets the state of the address taken flag of an entity. */
+void set_entity_address_taken(ir_entity *ent, ir_address_taken_state flag);
+
/* -- Representation of constant values of entities -- */
/**
* Returns true if the the node is representable as code on
ir_type *type; /**< The type of this entity, e.g., a method type, a
basic type of the language or a class itself. */
ir_type *owner; /**< The compound type (e.g. class type) this entity belongs to. */
- ir_allocation allocation:3; /**< Distinguishes static and dynamically allocated
- entities and some further cases. */
- ir_visibility visibility:3; /**< Specifies visibility to external program
- fragments. */
- ir_variability variability:3; /**< Specifies variability of entities content. */
- ir_volatility volatility:2; /**< Specifies volatility of entities content. */
- ir_stickyness stickyness:2; /**< Specifies whether this entity is sticky. */
- ir_peculiarity peculiarity:3; /**< The peculiarity of this entity. */
+ ir_allocation allocation:3; /**< Distinguishes static and dynamically allocated
+ entities and some further cases. */
+ ir_visibility visibility:3; /**< Specifies visibility to external program fragments. */
+ ir_variability variability:3; /**< Specifies variability of entities content. */
+ ir_volatility volatility:2; /**< Specifies volatility of entities content. */
+ ir_stickyness stickyness:2; /**< Specifies whether this entity is sticky. */
+ ir_peculiarity peculiarity:3; /**< The peculiarity of this entity. */
+ ir_address_taken_state address_taken:2; /**< A flag that can be set to mark address taken entities. */
unsigned final:1; /**< If set, this entity cannot be overridden. */
unsigned compiler_gen:1; /**< If set, this entity was compiler generated. */
int offset; /**< Offset in bytes for this entity. Fixed when layout
}
static INLINE int
-_get_entity_final(const ir_entity *ent) {
+_is_entity_final(const ir_entity *ent) {
assert(ent && ent->kind == k_entity);
return (int)ent->final;
}
ent->final = final ? 1 : 0;
}
+static INLINE int
+_is_entity_compiler_generated(const ir_entity *ent) {
+ assert(ent && ent->kind == k_entity);
+ return ent->compiler_gen;
+}
+
+static INLINE void
+_set_entity_compiler_generated(ir_entity *ent, int flag) {
+ assert(ent && ent->kind == k_entity);
+ ent->compiler_gen = flag ? 1 : 0;
+}
+
+static INLINE ir_address_taken_state
+_get_entity_address_taken(const ir_entity *ent) {
+ assert(ent && ent->kind == k_entity);
+ return ent->address_taken;
+}
+
+static INLINE void
+_set_entity_address_taken(ir_entity *ent, ir_address_taken_state flag) {
+ assert(ent && ent->kind == k_entity);
+ ent->address_taken = flag;
+}
+
static INLINE int
_get_entity_offset(const ir_entity *ent) {
assert(ent && ent->kind == k_entity);
#define set_entity_peculiarity(ent, pec) _set_entity_peculiarity(ent, pec)
#define get_entity_stickyness(ent) _get_entity_stickyness(ent)
#define set_entity_stickyness(ent, stickyness) _set_entity_stickyness(ent, stickyness)
-#define get_entity_final(ent) _get_entity_final(ent)
+#define is_entity_final(ent) _is_entity_final(ent)
#define set_entity_final(ent, final) _set_entity_final(ent, final)
+#define is_entity_compiler_generated(ent) _is_entity_compiler_generated(ent)
+#define set_entity_compiler_generated(ent, flag) _set_entity_compiler_generated(ent, flag)
+#define get_entity_address_taken(ent) _get_entity_address_taken(ent)
+#define set_entity_address_taken(ent, flag) _set_entity_address_taken(ent, flag)
#define get_entity_offset(ent) _get_entity_offset(ent)
#define set_entity_offset(ent, offset) _set_entity_offset(ent, offset)
#define get_entity_offset_bits_remainder(ent) _get_entity_offset_bits_remainder(ent)