compiler: move compilation stuff from modelbuilder to the compiler
[nit.git] / src / compiler / separate_erasure_compiler.nit
index af3a43c..e26a73d 100644 (file)
@@ -20,11 +20,11 @@ intrude import separate_compiler
 # Add separate erased compiler specific options
 redef class ToolContext
        # --erasure
-       var opt_erasure: OptionBool = new OptionBool("Erase generic types", "--erasure")
+       var opt_erasure = new OptionBool("Erase generic types", "--erasure")
        # --rta
        var opt_rta = new OptionBool("Activate RTA (implicit with --global and --separate)", "--rta")
        # --no-check-erasure-cast
-       var opt_no_check_erasure_cast: OptionBool = new OptionBool("Disable implicit casts on unsafe return with erasure-typing policy (dangerous)", "--no-check-erasure-cast")
+       var opt_no_check_erasure_cast = new OptionBool("Disable implicit casts on unsafe return with erasure-typing policy (dangerous)", "--no-check-erasure-cast")
 
        redef init
        do
@@ -65,33 +65,8 @@ redef class ModelBuilder
                self.toolcontext.info("*** GENERATING C ***", 1)
 
                var compiler = new SeparateErasureCompiler(mainmodule, self, runtime_type_analysis)
-               compiler.compile_header
-
-               # compile class structures
-               self.toolcontext.info("Property coloring", 2)
-               compiler.new_file("{mainmodule.name}.tables")
-               compiler.do_property_coloring
-               for m in mainmodule.in_importation.greaters do
-                       for mclass in m.intro_mclasses do
-                               compiler.compile_class_to_c(mclass)
-                       end
-               end
-               compiler.compile_color_consts(compiler.vt_colors)
-
-               # The main function of the C
-               compiler.new_file("{mainmodule.name}.main")
-               compiler.compile_nitni_global_ref_functions
-               compiler.compile_main_function
-
-               # compile methods
-               for m in mainmodule.in_importation.greaters do
-                       self.toolcontext.info("Generate C for module {m}", 2)
-                       compiler.new_file("{m.name}.sep")
-                       compiler.compile_module_to_c(m)
-               end
-
+               compiler.do_compilation
                compiler.display_stats
-
                var time1 = get_time
                self.toolcontext.info("*** END GENERATING C: {time1-time0} ***", 2)
                write_and_make(compiler)
@@ -101,12 +76,11 @@ end
 class SeparateErasureCompiler
        super SeparateCompiler
 
-       private var class_ids: Map[MClass, Int]
-       private var class_colors: Map[MClass, Int]
-       protected var vt_colors: Map[MVirtualTypeProp, Int]
+       private var class_ids: Map[MClass, Int] is noinit
+       private var class_colors: Map[MClass, Int] is noinit
+       protected var vt_colors: Map[MVirtualTypeProp, Int] is noinit
 
-       init(mainmodule: MModule, mmbuilder: ModelBuilder, runtime_type_analysis: nullable RapidTypeAnalysis) do
-               super
+       init do
 
                # Class coloring
                var poset = mainmodule.flatten_mclass_hierarchy
@@ -226,7 +200,7 @@ class SeparateErasureCompiler
                var v = self.new_visitor
 
                var rta = runtime_type_analysis
-               var is_dead = mclass.kind == abstract_kind or mclass.kind == interface_kind
+               var is_dead = false # mclass.kind == abstract_kind or mclass.kind == interface_kind
                if not is_dead and rta != null and not rta.live_classes.has(mclass) and mtype.ctype == "val*" and mclass.name != "NativeArray" then
                        is_dead = true
                end
@@ -434,12 +408,17 @@ class SeparateErasureCompiler
                end
        end
 
+       redef fun compile_types
+       do
+               compile_color_consts(vt_colors)
+       end
+
        redef fun new_visitor do return new SeparateErasureCompilerVisitor(self)
 
        # Stats
 
-       private var class_tables: Map[MClass, Array[nullable MClass]]
-       private var vt_tables: Map[MClass, Array[nullable MPropDef]]
+       private var class_tables: Map[MClass, Array[nullable MClass]] is noinit
+       private var vt_tables: Map[MClass, Array[nullable MPropDef]] is noinit
 
        redef fun display_sizes
        do
@@ -549,7 +528,6 @@ class SeparateErasureCompilerVisitor
                end
 
                var class_ptr
-               var type_table
                if value.mtype.ctype == "val*" then
                        class_ptr = "{value}->class->"
                else