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
# 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
# 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