1.1 --- a/generator.py Sat Jan 21 17:03:55 2017 +0100
1.2 +++ b/generator.py Sat Jan 21 23:56:28 2017 +0100
1.3 @@ -914,7 +914,7 @@
1.4
1.5 # Special cases.
1.6
1.7 - elif attrname in ("__file__", "__fname__", "__mname__", "__name__"):
1.8 + elif attrname in ("__file__", "__fname__", "__mname__", "__name__", "__oname__"):
1.9 path = ref.get_origin()
1.10 value_type = self.string_type
1.11
1.12 @@ -930,11 +930,11 @@
1.13 elif attrname in ("__fname__", "__name__"):
1.14 value = path.rsplit(".", 1)[-1]
1.15
1.16 - # Module names of classes and functions are derived from
1.17 + # Object names of classes and functions are derived from
1.18 # their object paths.
1.19
1.20 - elif attrname == "__mname__" and not ref.has_kind("<module>"):
1.21 - value = self.importer.get_module_provider(ref)
1.22 + elif attrname == "__oname__":
1.23 + value = path.rsplit(".", 1)[0]
1.24
1.25 # All other names just use the object path information.
1.26
2.1 --- a/importer.py Sat Jan 21 17:03:55 2017 +0100
2.2 +++ b/importer.py Sat Jan 21 23:56:28 2017 +0100
2.3 @@ -607,7 +607,7 @@
2.4
2.5 # NOTE: Consolidate this information in a common location.
2.6
2.7 - special_attributes = ("__args__", "__file__", "__fn__", "__fname__", "__mname__", "__name__")
2.8 + special_attributes = ("__args__", "__file__", "__fn__", "__fname__", "__mname__", "__name__", "__oname__")
2.9
2.10 def is_dynamic(self, ref):
2.11 return not ref or not ref.static() and not ref.is_constant_alias() and not ref.is_predefined_value()
3.1 --- a/inspector.py Sat Jan 21 17:03:55 2017 +0100
3.2 +++ b/inspector.py Sat Jan 21 23:56:28 2017 +0100
3.3 @@ -524,10 +524,10 @@
3.4 self.set_name("__fn__") # special instantiator attribute
3.5 self.set_name("__args__") # special instantiator attribute
3.6
3.7 - # Provide leafname and module name attributes.
3.8 + # Provide leafname and object name attributes.
3.9
3.10 self.set_name("__name__", self.get_constant("string", class_name.rsplit(".", 1)[-1]).reference())
3.11 - self.set_name("__mname__", self.get_constant("string", self.name).reference())
3.12 + self.set_name("__oname__", self.get_constant("string", class_name.rsplit(".", 1)[0]).reference())
3.13
3.14 self.process_structure_node(n.code)
3.15 self.exit_namespace()
3.16 @@ -646,11 +646,11 @@
3.17
3.18 self.enter_namespace(name)
3.19
3.20 - # Define leafname and module name attribute values for the function instance.
3.21 + # Define leafname and object name attribute values for the function instance.
3.22
3.23 ref = self.get_builtin_class("string")
3.24 self.reserve_constant(function_name, name, ref.get_origin())
3.25 - self.reserve_constant(function_name, self.name, ref.get_origin())
3.26 + self.reserve_constant(function_name, function_name.rsplit(".", 1)[0], ref.get_origin())
3.27
3.28 # Track attribute usage within the namespace.
3.29
4.1 --- a/lib/__builtins__/core.py Sat Jan 21 17:03:55 2017 +0100
4.2 +++ b/lib/__builtins__/core.py Sat Jan 21 23:56:28 2017 +0100
4.3 @@ -41,7 +41,7 @@
4.4
4.5 "Return a string representation."
4.6
4.7 - return str(buffer(["<", self.__mname__, ".", self.__name__, " instance>"]))
4.8 + return str(buffer(["<", self.__oname__, ".", self.__name__, " instance>"]))
4.9
4.10 __repr__ = __str__
4.11
4.12 @@ -82,7 +82,7 @@
4.13 self.__fn__ = None
4.14 self.__args__ = None
4.15 self.__fname__ = None
4.16 - self.__mname__ = None
4.17 + self.__oname__ = None
4.18
4.19 def __bool__(self):
4.20
4.21 @@ -94,7 +94,7 @@
4.22
4.23 "Return a string representation."
4.24
4.25 - return str(buffer([self.__mname__, ".", self.__fname__]))
4.26 + return str(buffer([self.__oname__, ".", self.__fname__]))
4.27
4.28 __repr__ = __str__
4.29
4.30 @@ -110,7 +110,7 @@
4.31
4.32 "Return a string representation."
4.33
4.34 - return self.__name__
4.35 + return str(buffer([self.__oname__, ".", self.__name__]))
4.36
4.37 __repr__ = __str__
4.38