build_value_type(ident *name, int len, tp_ent_pair *tps) {
int i;
ir_type *res = new_type_struct(name);
+ res->flags |= tf_value_param_type;
/* Remove type from type list. Must be treated differently than other types. */
remove_irp_type(res);
for (i = 0; i < len; i++) {
ir_type *elt_type = tps[i].tp ? tps[i].tp : res;
tps[i].ent = new_entity(res, mangle_u(name, get_type_ident(elt_type)), elt_type);
+ set_entity_allocation(tps[i].ent, allocation_parameter);
}
return res;
}
return tp->type_op->flags & TP_OP_FLAG_COMPOUND;
}
-/* Checks, whether a type is a frame ir_type */
+/* Checks, whether a type is a frame type */
int is_frame_type(const ir_type *tp) {
return tp->flags & tf_frame_type;
}
-/* Checks, whether a type is a lowered ir_type */
+/* Checks, whether a type is a value parameter type */
+int is_value_param_type(const ir_type *tp) {
+ return tp->flags & tf_value_param_type;
+}
+
+/* Checks, whether a type is a lowered type */
int is_lowered_type(const ir_type *tp) {
return tp->flags & tf_lowered_type;
}
*/
int is_frame_type(const ir_type *tp);
+/**
+ * Checks, whether a type is a value parameter type.
+ */
+int is_value_param_type(const ir_type *tp);
+
/**
* Checks, whether a type is a lowered type.
*/
/** Additional type flags. */
enum type_flags {
- tf_none = 0, /**< No flags. */
- tf_frame_type = 1, /**< Set if this is a frame type. */
- tf_lowered_type = 2, /**< Set if this is a lowered type. */
- tf_layout_fixed = 4 /**< Set if the layout of a type is fixed */
+ tf_none = 0, /**< No flags. */
+ tf_frame_type = 1, /**< Set if this is a frame type. */
+ tf_value_param_type = 2, /**< Set if this is a value param type. */
+ tf_lowered_type = 4, /**< Set if this is a lowered type. */
+ tf_layout_fixed = 8 /**< Set if the layout of a type is fixed */
};
/** the structure of a type */