From: Jean Privat Date: Tue, 31 Jan 2017 19:35:11 +0000 (-0500) Subject: modelbuilder: add `inject_module_subimportation` to inject importation. X-Git-Url: http://nitlanguage.org modelbuilder: add `inject_module_subimportation` to inject importation. Signed-off-by: Jean Privat --- diff --git a/src/loader.nit b/src/loader.nit index deb895a..32749aa 100644 --- a/src/loader.nit +++ b/src/loader.nit @@ -1045,7 +1045,7 @@ redef class ModelBuilder # (and `build_module_importation` that calls it). # # TODO (when the loader will be rewritten): use a better representation and move up rules in the model. - private var conditional_importations = new Array[SequenceRead[MModule]] + var conditional_importations = new Array[SequenceRead[MModule]] # Extends the current importations according to imported rules about conditional importation fun apply_conditional_importations(mmodule: MModule) diff --git a/src/modelbuilder.nit b/src/modelbuilder.nit index a924c63..132c024 100644 --- a/src/modelbuilder.nit +++ b/src/modelbuilder.nit @@ -101,4 +101,22 @@ redef class ModelBuilder end end + # Load module `filename` and add it as a conditional importation of `mmodule`. + # + # This means that current (and future) submodules of `module` will also import `filename`. + fun inject_module_subimportation(mmodule: MModule, filename: String) + do + var am = load_module(filename) + if am == null then return # forward error + var mm = am.mmodule + if mm == null then return # forward error + # Add the new module before the existing submodules in the hierarchy + for subm in mmodule.in_importation.direct_smallers do + subm.set_imported_mmodules([mm]) + end + # Register the new module as a conditional_importations for future submodules + conditional_importations.add([mm, mmodule]) + # Register the new amodule to be processed by `run_phases` + toolcontext.todo_nmodules.unshift am + end end