X-Git-Url: http://nitlanguage.org diff --git a/src/separate_erasure_compiler.nit b/src/separate_erasure_compiler.nit index 5758950..a5d353d 100644 --- a/src/separate_erasure_compiler.nit +++ b/src/separate_erasure_compiler.nit @@ -32,7 +32,7 @@ redef class ToolContext end redef class ModelBuilder - fun run_separate_erasure_compiler(mainmodule: MModule, runtime_type_analysis: RapidTypeAnalysis) + fun run_separate_erasure_compiler(mainmodule: MModule, runtime_type_analysis: nullable RapidTypeAnalysis) do var time0 = get_time self.toolcontext.info("*** GENERATING C ***", 1) @@ -76,7 +76,7 @@ class SeparateErasureCompiler private var class_layout: nullable Layout[MClass] protected var vt_layout: nullable Layout[MVirtualTypeProp] - init(mainmodule: MModule, mmbuilder: ModelBuilder, runtime_type_analysis: RapidTypeAnalysis) do + init(mainmodule: MModule, mmbuilder: ModelBuilder, runtime_type_analysis: nullable RapidTypeAnalysis) do super var mclasses = new HashSet[MClass].from(mmbuilder.model.mclasses) @@ -98,9 +98,20 @@ class SeparateErasureCompiler self.class_layout = layout_builder.build_layout(mclasses) self.class_tables = self.build_class_typing_tables(mclasses) + # lookup vt to build layout with + var vts = new HashMap[MClass, Set[MVirtualTypeProp]] + for mclass in mclasses do + vts[mclass] = new HashSet[MVirtualTypeProp] + for mprop in self.mainmodule.properties(mclass) do + if mprop isa MVirtualTypeProp then + vts[mclass].add(mprop) + end + end + end + # vt coloration - var vt_coloring = new MVirtualTypePropColorer(mainmodule, class_colorer) - var vt_layout = vt_coloring.build_layout(mclasses) + var vt_coloring = new MPropertyColorer[MVirtualTypeProp](mainmodule, class_colorer) + var vt_layout = vt_coloring.build_layout(vts) self.vt_tables = build_vt_tables(mclasses, vt_layout) self.vt_layout = vt_layout end @@ -322,8 +333,6 @@ class SeparateErasureCompiler self.generate_init_attr(v, res, mtype) v.add("return {res};") v.add("\}") - - generate_check_init_instance(mtype) end private fun build_class_vts_table(mclass: MClass): Bool do @@ -593,7 +602,6 @@ class SeparateErasureCompilerVisitor end var length = self.int_instance(array.length) self.send(self.get_property("with_native", arraytype), [res, nat, length]) - self.check_init_instance(res, arraytype) self.add("\}") return res end