From: Jean Privat Date: Fri, 19 Jul 2013 20:34:42 +0000 (-0400) Subject: phase: framework for global phases X-Git-Tag: v0.6~17 X-Git-Url: http://nitlanguage.org phase: framework for global phases Signed-off-by: Jean Privat --- diff --git a/src/frontend.nit b/src/frontend.nit index d219ad8..9dc6493 100644 --- a/src/frontend.nit +++ b/src/frontend.nit @@ -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 + diff --git a/src/phase.nit b/src/phase.nit index 667ba43..df35038 100644 --- a/src/phase.nit +++ b/src/phase.nit @@ -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)