nitc: first_real_mmodule is now explicitly set.
authorJean Privat <jean@pryen.org>
Tue, 31 Jan 2017 18:54:26 +0000 (13:54 -0500)
committerJean Privat <jean@pryen.org>
Thu, 2 Feb 2017 18:51:14 +0000 (13:51 -0500)
This solve the issue where `nitc foo.nit -m subfoo.nit` program
is named `subfoo` instead of `foo`.

Signed-off-by: Jean Privat <jean@pryen.org>

src/mixin.nit
src/model/mmodule.nit
src/modelbuilder.nit

index 508fc67..1e39970 100644 (file)
@@ -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
index 4cdd340..44eaffb 100644 (file)
@@ -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
index 671fcd0..100aef1 100644 (file)
@@ -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