X-Git-Url: http://nitlanguage.org diff --git a/src/test_phase.nit b/src/test_phase.nit index 9898913..767cf95 100644 --- a/src/test_phase.nit +++ b/src/test_phase.nit @@ -14,12 +14,38 @@ # Stub for loading a runing phases on a bunch of modules # -# The point is to refine this module is executable that does things. -# One simple way is to use the `-m` option of engines plug various phases. +# The point is to refine this module in executable that does things. +# One simple way is to use the `-m` option of engines to plug various phases. +# +# One other way is to redefine `do_work`. See `test_test_phase.nit`. module test_phase import modelbuilder +redef class ToolContext + var default_phase = new DefaultPhase(self, null) +end + +# Empty phase that delegates `process_mainmodule` to the global `do_work`. +class DefaultPhase + super Phase + redef fun process_mainmodule(mainmodule, given_mmodules) do + do_work(mainmodule, given_mmodules, toolcontext.modelbuilder) + end +end + +# Easy entry point to prototype a specific work or proof-of-concept. +# +# Complex or mature work should use the full `phase` framework to enable +# combination and orcherstration of works. +# +# * `mainmodule` is the bottom main module (possibly implicit). +# * `given_mmodules` is the exact list of module from the command line. +# * `modelbuilder` is the context that contains a lot of things. +# +# @toimplement +fun do_work(mainmodule: MModule, given_mmodules: SequenceRead[MModule], modelbuilder: ModelBuilder) do end + # Create a tool context to handle options and paths var toolcontext = new ToolContext toolcontext.tooldescription = "Usage: [OPTION]... ..." @@ -36,20 +62,6 @@ var model = new Model var modelbuilder = new ModelBuilder(model, toolcontext) # Here we load an process all modules passed on the command line -var mmodules = modelbuilder.parse(arguments) +var mmodules = modelbuilder.parse_full(arguments) modelbuilder.run_phases - -if mmodules.length == 0 then - return -end - -var mainmodule: MModule -if mmodules.length == 1 then - mainmodule = mmodules.first -else - # We need a main module, so we build it by importing all modules - mainmodule = new MModule(model, null, "
", new Location(null, 0, 0, 0, 0)) - mainmodule.set_imported_mmodules(mmodules) -end - -toolcontext.run_global_phases(mainmodule) +toolcontext.run_global_phases(mmodules)