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
+
# 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)