#include "array.h"
+static ir_type *new_type(tp_op const *type_op, ir_mode *mode, type_dbg_info *db);
+
ir_type *get_none_type(void)
{
return irp->none_type;
_inc_master_type_visited();
}
-ir_type *new_type(const tp_op *type_op, ir_mode *mode, type_dbg_info *db)
+/**
+ * Creates a new type representation:
+ *
+ * @param type_op the kind of this type. May not be type_id.
+ * @param mode the mode to be used for this type, may be NULL
+ * @param db debug info
+ *
+ * @return A new type of the given type. The remaining private attributes are
+ * not initialized. The type is in state layout_undefined.
+ */
+static ir_type *new_type(tp_op const *type_op, ir_mode *mode, type_dbg_info *db)
{
ir_type *res;
size_t node_size;
void set_type_size_bytes(ir_type *tp, unsigned size)
{
const tp_op *tpop = get_type_tpop(tp);
-
- if (tpop->ops.set_type_size)
- tpop->ops.set_type_size(tp, size);
- else
- assert(0 && "Cannot set size for this type");
+ tpop->ops.set_type_size(tp, size);
}
unsigned get_type_alignment_bytes(ir_type *tp)
assert((get_mode_size_bits(mode_P_code) % 8 == 0) && "unorthodox modes not implemented");
res = new_type(type_method, mode_P_code, db);
- res->flags |= tf_layout_fixed;
- res->size = get_mode_size_bytes(mode_P_code);
- res->attr.ma.n_params = n_param;
- res->attr.ma.params = XMALLOCNZ(tp_ent_pair, n_param);
- res->attr.ma.n_res = n_res;
- res->attr.ma.res_type = XMALLOCNZ(tp_ent_pair, n_res);
- res->attr.ma.variadicity = variadicity_non_variadic;
- res->attr.ma.additional_properties = mtp_no_property;
+ res->flags |= tf_layout_fixed;
+ res->size = get_mode_size_bytes(mode_P_code);
+ res->attr.ma.n_params = n_param;
+ res->attr.ma.params = XMALLOCNZ(tp_ent_pair, n_param);
+ res->attr.ma.n_res = n_res;
+ res->attr.ma.res_type = XMALLOCNZ(tp_ent_pair, n_res);
+ res->attr.ma.variadicity = variadicity_non_variadic;
+ res->attr.ma.properties = mtp_no_property;
hook_new_type(res);
return res;
}
res = new_type(type_method, mode, db);
- res->flags = tp->flags;
- res->higher_type = tp->higher_type;
- res->size = tp->size;
- res->attr.ma.n_params = n_params;
- res->attr.ma.params = XMALLOCN(tp_ent_pair, n_params);
+ res->flags = tp->flags;
+ res->higher_type = tp->higher_type;
+ res->size = tp->size;
+ res->attr.ma.n_params = n_params;
+ res->attr.ma.params = XMALLOCN(tp_ent_pair, n_params);
memcpy(res->attr.ma.params, tp->attr.ma.params, n_params * sizeof(res->attr.ma.params[0]));
- res->attr.ma.n_res = n_res;
- res->attr.ma.res_type = XMALLOCN(tp_ent_pair, n_res);
+ res->attr.ma.n_res = n_res;
+ res->attr.ma.res_type = XMALLOCN(tp_ent_pair, n_res);
memcpy(res->attr.ma.res_type, tp->attr.ma.res_type, n_res * sizeof(res->attr.ma.res_type[0]));
- res->attr.ma.variadicity = tp->attr.ma.variadicity;
- res->attr.ma.additional_properties = tp->attr.ma.additional_properties;
- res->attr.ma.irg_calling_conv = tp->attr.ma.irg_calling_conv;
+ res->attr.ma.variadicity = tp->attr.ma.variadicity;
+ res->attr.ma.properties = tp->attr.ma.properties;
+ res->attr.ma.irg_calling_conv = tp->attr.ma.irg_calling_conv;
hook_new_type(res);
return res;
}
ir_node *node;
assert(array->type_op == type_array);
node = array->attr.aa.lower_bound[dimension];
- assert(is_Const(node));
return get_tarval_long(get_Const_tarval(node));
}
ir_node *node;
assert(array->type_op == type_array);
node = array->attr.aa.upper_bound[dimension];
- assert(is_Const(node));
return get_tarval_long(get_Const_tarval(node));
}