From ead0ff0f556cb6505d63f61f6a5fe53b78c05995 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Tue, 31 Jan 2017 13:54:26 -0500 Subject: [PATCH] nitc: first_real_mmodule is now explicitly set. This solve the issue where `nitc foo.nit -m subfoo.nit` program is named `subfoo` instead of `foo`. Signed-off-by: Jean Privat --- src/mixin.nit | 2 ++ src/model/mmodule.nit | 16 +++++++--------- src/modelbuilder.nit | 1 + 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/mixin.nit b/src/mixin.nit index 508fc67..1e39970 100644 --- a/src/mixin.nit +++ b/src/mixin.nit @@ -46,10 +46,12 @@ redef class ToolContext var location = mainmodule.location var model = mainmodule.model + # Create a fictive module if needed if mainmodule == mmodules.first then mainmodule = new MModule(model, null, mainmodule.name + "-d", location) mainmodule.set_imported_mmodules(mmodules) mainmodule.is_fictive = true + mainmodule.first_real_mmodule = mmodules.first end var recv = mainmodule.sys_type diff --git a/src/model/mmodule.nit b/src/model/mmodule.nit index 4cdd340..44eaffb 100644 --- a/src/model/mmodule.nit +++ b/src/model/mmodule.nit @@ -251,15 +251,13 @@ class MModule # Is `self` a unit test module used by `nitunit`? var is_test_suite: Bool = false is writable - # Get the first non `is_fictive` module greater than self - fun first_real_mmodule: MModule - do - var mmodule = self - while mmodule.is_fictive do - mmodule = mmodule.in_importation.direct_greaters.first - end - return mmodule - end + # Get the non-`is_fictive` module on which `self` is based on. + # + # On non-fictive module, this returns `self`. + # On fictive modules, this is used to refer the module which `self` is based on. + # + # This attribute should be set when a fictive module is created. See `is_fictive`. + var first_real_mmodule: MModule = self is writable redef fun parent_concern do return mgroup end diff --git a/src/modelbuilder.nit b/src/modelbuilder.nit index 671fcd0..100aef1 100644 --- a/src/modelbuilder.nit +++ b/src/modelbuilder.nit @@ -44,6 +44,7 @@ redef class ToolContext # We need a main module, so we build it by importing all modules mainmodule = new MModule(modelbuilder.model, null, mmodules.first.name + "-m", new Location(mmodules.first.location.file, 0, 0, 0, 0)) mainmodule.is_fictive = true + mainmodule.first_real_mmodule = mmodules.first.first_real_mmodule mainmodule.set_imported_mmodules(mmodules) modelbuilder.apply_conditional_importations(mainmodule) modelbuilder.run_phases -- 1.7.9.5