self.option_context.add_option(self.opt_erasure, self.opt_no_check_erasure_cast, opt_rta)
end
+ redef fun process_options(args)
+ do
+ super
+
+ if opt_no_check_all.value then
+ opt_no_check_erasure_cast.value = true
+ end
+ end
+
var erasure_compiler_phase = new ErasureCompilerPhase(self, null)
end
# The main function of the C
compiler.new_file("{mainmodule.name}.main")
+ compiler.compile_nitni_global_ref_functions
compiler.compile_main_function
# compile methods
super
# Class coloring
- var mclasses = new HashSet[MClass].from(mmbuilder.model.mclasses)
var poset = mainmodule.flatten_mclass_hierarchy
+ var mclasses = new HashSet[MClass].from(poset)
var colorer = new POSetColorer[MClass]
colorer.colorize(poset)
class_ids = colorer.ids
v.require_declaration("class_{c_name}")
v.add("{res}->class = &class_{c_name};")
self.generate_init_attr(v, res, mtype)
+ v.set_finalizer res
v.add("return {res};")
end
v.add("\}")
return res
end
- redef fun array_instance(array, elttype)
+ redef fun native_array_instance(elttype, length)
do
var nclass = self.get_class("NativeArray")
- elttype = self.anchor(elttype)
- var arraytype = self.get_class("Array").get_mtype([elttype])
- var res = self.init_instance(arraytype)
- self.add("\{ /* {res} = array_instance Array[{elttype}] */")
- var nat = self.new_var(self.get_class("NativeArray").get_mtype([elttype]))
- nat.is_exact = true
+ var mtype = nclass.get_mtype([elttype])
+ var res = self.new_var(mtype)
+ res.is_exact = true
self.require_declaration("NEW_{nclass.c_name}")
- self.add("{nat} = NEW_{nclass.c_name}({array.length});")
- for i in [0..array.length[ do
- var r = self.autobox(array[i], self.object_type)
- self.add("((struct instance_{nclass.c_instance_name}*){nat})->values[{i}] = (val*) {r};")
- end
- var length = self.int_instance(array.length)
- self.send(self.get_property("with_native", arraytype), [res, nat, length])
- self.add("\}")
+ self.add("{res} = NEW_{nclass.c_name}({length});")
return res
end