X-Git-Url: http://nitlanguage.org diff --git a/src/model/mmodule.nit b/src/model/mmodule.nit index 8020cc3..d88a0ba 100644 --- a/src/model/mmodule.nit +++ b/src/model/mmodule.nit @@ -76,6 +76,14 @@ class MModule # The group of module in the project if any var mgroup: nullable MGroup + # The project of the module if any + # Safe alias for `mgroup.mproject` + fun mproject: nullable MProject + do + var g = mgroup + if g == null then return null else return g.mproject + end + # The short name of the module redef var name: String @@ -104,6 +112,22 @@ class MModule end end + # The namespace used for entities according to their visibility `v`. + # + # Public entities use only the project as a namespace. + # Private entities use the `full_name` (i.e. "project::module") + # + # This method is used by entities to implement their `full_name`. + fun namespace_for(v: MVisibility): String do + if v <= private_visibility then return full_name + var mgroup = self.mgroup + if mgroup == null then + return full_name + else + return mgroup.mproject.full_name + end + end + # Return the name of the global C identifier associated to `self`. # This name is used to prefix files and other C identifiers associated with `self`. redef var c_name: String is lazy do @@ -117,6 +141,19 @@ class MModule return res end + # C identifier version of `namespace_for`. + # See `c_name` + # + # This method is used by entities to implement their `c_name`. + fun c_namespace_for(v: MVisibility): String do + if v <= private_visibility then return c_name + var mgroup = self.mgroup + if mgroup == null then + return c_name + else + return mgroup.mproject.c_name + end + end # Create a new empty module and register it to a model init @@ -129,12 +166,6 @@ class MModule assert mgroup.default_mmodule == null mgroup.default_mmodule = self end - # placebo for old module nesting hierarchy - var direct_owner = mgroup.default_mmodule - if direct_owner == self then - # The potential owner is the default_mmodule of the parent group - if mgroup.parent != null then direct_owner = mgroup.parent.default_mmodule - end end self.in_importation = model.mmodule_importation_hierarchy.add_node(self) end