- #Build instance struct
- #extern const struct instance_array__NativeArray instance_array__NativeArray;
- self.header.add_decl("struct instance_{c_name} \{")
- self.header.add_decl("const struct class *class;")
- self.header.add_decl("nitattribute_t attrs[{attrs.length}];")
- if is_native_array then
- # NativeArrays are just a instance header followed by an array of values
- self.header.add_decl("val* values[0];")
+ #Build NEW
+ self.provide_declaration("NEW_{c_name}", "{mtype.ctype} NEW_{c_name}(int length);")
+ v.add_decl("/* allocate {mtype} */")
+ v.add_decl("{mtype.ctype} NEW_{c_name}(int length) \{")
+ var res = v.get_name("self")
+ v.add_decl("struct instance_{c_name} *{res};")
+ var mtype_elt = mtype.arguments.first
+ v.add("{res} = nit_alloc(sizeof(struct instance_{c_name}) + length*sizeof({mtype_elt.ctype}));")
+ v.require_declaration("class_{c_name}")
+ v.add("{res}->class = &class_{c_name};")
+ v.add("{res}->length = length;")
+ v.add("return (val*){res};")
+ v.add("\}")
+ return