* Creates a new type representation.
*/
ir_type *
-new_type(tp_op *type_op, ir_mode *mode, ident *name, dbg_info *db) {
+new_type(const tp_op *type_op, ir_mode *mode, ident *name, dbg_info *db) {
ir_type *res;
int node_size;
return method->attr.ma.params[pos].ent;
}
+/*
+ * Sets the type that represents the copied value arguments.
+ */
+void set_method_value_param_type(ir_type *method, ir_type *tp) {
+ int i, n;
+
+ assert(method && (method->type_op == type_method));
+ assert(is_value_param_type(tp));
+ assert(get_method_n_params(method) == get_struct_n_members(tp));
+
+ method->attr.ma.value_params = tp;
+
+ n = get_struct_n_members(tp);
+ for (i = 0; i < n; i++)
+ {
+ ir_entity *ent = get_struct_member(tp, i);
+ method->attr.ma.params[i].ent = ent;
+ }
+}
+
/*
* Returns a type that represents the copied value arguments.
*/
}
/* Returns the null-terminated name of this variadicity. */
-const char *get_variadicity_name(variadicity vari) {
+const char *get_variadicity_name(ir_variadicity vari) {
#define X(a) case a: return #a
switch (vari) {
X(variadicity_non_variadic);
#undef X
}
-variadicity get_method_variadicity(const ir_type *method) {
+ir_variadicity get_method_variadicity(const ir_type *method) {
assert(method && (method->type_op == type_method));
return method->attr.ma.variadicity;
}
-void set_method_variadicity(ir_type *method, variadicity vari) {
+void set_method_variadicity(ir_type *method, ir_variadicity vari) {
assert(method && (method->type_op == type_method));
method->attr.ma.variadicity = vari;
}
return tp->flags & tf_lowered_type;
}
+/* Makes a new value type. */
+ir_type *new_type_value(ident *name) {
+ 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);
+
+ return res;
+}
+
/* Makes a new frame type. */
ir_type *new_type_frame(ident *name) {
ir_type *res = new_type_class(name);