phase: framework for global phases
authorJean Privat <jean@pryen.org>
Fri, 19 Jul 2013 20:34:42 +0000 (16:34 -0400)
committerJean Privat <jean@pryen.org>
Sat, 20 Jul 2013 11:28:19 +0000 (07:28 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/frontend.nit
src/phase.nit

index d219ad8..9dc6493 100644 (file)
@@ -36,4 +36,19 @@ redef class ToolContext
                phases.add_edge(scope_phase, simple_misc_analysis_phase)
                return true
        end
+
+       fun run_global_phases(mainmodule: MModule)
+       do
+               for phase in phases_list do
+                       phase.process_mainmodule(mainmodule)
+               end
+       end
 end
+
+redef class Phase
+       # Specific action to execute on the whole program
+       # Called by the `ToolContext::run_global_phases`
+       # @toimplement
+       fun process_mainmodule(mainmodule: MModule) do end
+end
+
index 667ba43..df35038 100644 (file)
@@ -27,14 +27,21 @@ redef class ToolContext
        # it is often simpler to use the constructor in `Phase`
        var phases = new POSet[Phase]
 
+       fun phases_list: Sequence[Phase]
+       do
+               var phases = self.phases.to_a
+               self.phases.sort(phases)
+               return phases
+       end
+
        # Run all registered phases on a set of modules
        fun run_phases(nmodules: Collection[AModule])
        do
                var time0 = get_time
                self.info("*** SEMANTIC ANALYSIS ***", 1)
                #phases.show_dot
-               var phases = self.phases.to_a
-               self.phases.sort(phases)
+
+               var phases = phases_list
 
                for phase in phases do
                        self.info(" registered phases: {phase.class_name}", 2)