lib/standard: Got rid of FDStream, reified under FStream
[nit.git] / src / phase.nit
index 367cffa..2011cd8 100644 (file)
@@ -71,6 +71,9 @@ redef class ToolContext
                return phases
        end
 
+       # Set of already analyzed modules.
+       private var phased_modules = new HashSet[AModule]
+
        # Run all registered phases on a set of modules
        fun run_phases(nmodules: Collection[AModule])
        do
@@ -85,6 +88,9 @@ redef class ToolContext
                end
 
                for nmodule in nmodules do
+                       if phased_modules.has(nmodule) then continue
+                       phased_modules.add nmodule
+
                        self.info("Semantic analysis module {nmodule.location.file.filename}", 2)
 
                        var vannot = new AnnotationPhaseVisitor
@@ -126,6 +132,8 @@ redef class ToolContext
 
                var time1 = get_time
                self.info("*** END SEMANTIC ANALYSIS: {time1-time0} ***", 2)
+
+               errors_info
        end
 
        fun phase_process_npropdef(phase: Phase, npropdef: APropdef)
@@ -155,13 +163,16 @@ abstract class Phase
        var toolcontext: ToolContext
 
        # The dependence relation of the phase with the other phases
-       var in_hierarchy: POSetElement[Phase]
+       var in_hierarchy: POSetElement[Phase] is noinit
+
+       # The explicit dependences, used to initialize `in_importation`
+       var depends: nullable Collection[Phase]
 
        # Initialize and register a phase to the toolcontext
-       init(toolcontext: ToolContext, depends: nullable Collection[Phase])
+       init
        do
-               self.toolcontext = toolcontext
                in_hierarchy = toolcontext.phases.add_node(self)
+               var depends = self.depends
                if depends != null then
                        for d in depends do
                                toolcontext.phases.add_edge(self, d)
@@ -174,7 +185,9 @@ abstract class Phase
 
        # Is the phase globally disabled?
        # A disabled phase is not called automatically called by `ToolContext::run_phases` and cie.
-       var disabled = false
+       #
+       # Warning: disabling a phase may cause subsequent phases to work in a degraded way or to fail.
+       var disabled = false is writable
 
        # Specific actions to execute on the whole tree of a module
        # @toimplement