#include "config.h"
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
+#include <string.h>
+#include <stdlib.h>
#include <stddef.h>
#include "type_t.h"
* 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;
}
ir_graph *rem = current_ir_graph;
current_ir_graph = get_const_code_irg();
set_array_bounds(array, dimension,
- new_Const(mode_Iu, new_tarval_from_long (lower_bound, mode_Iu)),
- new_Const(mode_Iu, new_tarval_from_long (upper_bound, mode_Iu )));
+ new_Const_long(mode_Iu, lower_bound),
+ new_Const_long(mode_Iu, upper_bound));
current_ir_graph = rem;
}
ir_graph *rem = current_ir_graph;
current_ir_graph = get_const_code_irg();
set_array_lower_bound(array, dimension,
- new_Const(mode_Iu, new_tarval_from_long (lower_bound, mode_Iu)));
+ new_Const_long(mode_Iu, lower_bound));
current_ir_graph = rem;
}
void
ir_graph *rem = current_ir_graph;
current_ir_graph = get_const_code_irg();
set_array_upper_bound(array, dimension,
- new_Const(mode_Iu, new_tarval_from_long (upper_bound, mode_Iu)));
+ new_Const_long(mode_Iu, upper_bound));
current_ir_graph = rem;
}
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);