1.1 --- a/inspector.py Sat Nov 12 23:27:04 2016 +0100
1.2 +++ b/inspector.py Sat Nov 12 23:29:32 2016 +0100
1.3 @@ -134,7 +134,12 @@
1.4 # Find predefined constant names before anything else.
1.5
1.6 if name in predefined_constants:
1.7 - ref = self.get_builtin(name)
1.8 +
1.9 + # Predefined constants are imported within the built-ins.
1.10 +
1.11 + ref = self.get_imported_name(key)
1.12 + if not ref:
1.13 + ref = self.get_builtin(name)
1.14 self.set_name_reference(key, ref)
1.15 continue
1.16
1.17 @@ -152,6 +157,13 @@
1.18 self.set_name_reference(key, ref)
1.19 continue
1.20
1.21 + # Find imported name.
1.22 +
1.23 + ref = self.get_imported_name(key)
1.24 + if ref:
1.25 + self.set_name_reference(key, ref)
1.26 + continue
1.27 +
1.28 # Find presumed built-in definitions.
1.29
1.30 ref = self.get_builtin(name)
1.31 @@ -550,11 +562,11 @@
1.32 if name == "*":
1.33 raise InspectError("Only explicitly specified names can be imported from modules.", path, n)
1.34
1.35 - # Explicit names.
1.36 + # Reference names instead of setting them as locals.
1.37
1.38 ref = self.import_name_from_module(name, module_name)
1.39 - value = ResolvedNameRef(alias or name, ref)
1.40 - self.set_general_local(alias or name, value)
1.41 + self.set_imported_name(alias or name, ref)
1.42 + self.record_name(alias or name)
1.43
1.44 def process_function_node(self, n, name):
1.45
1.46 @@ -857,10 +869,14 @@
1.47 access_number = self.record_access_details(n.name, None, False, False)
1.48 return LocalNameRef(n.name, access_number)
1.49
1.50 - # Possible global or built-in name.
1.51 + # Possible imported, global or built-in name.
1.52
1.53 else:
1.54 - return NameRef(n.name)
1.55 + ref = self.get_imported_name(n.name)
1.56 + if ref:
1.57 + return ResolvedNameRef(n.name, ref)
1.58 + else:
1.59 + return NameRef(n.name)
1.60
1.61 def process_operator_chain(self, nodes, fn):
1.62
1.63 @@ -1281,8 +1297,19 @@
1.64 ref = None
1.65
1.66 if not self.in_function and name not in predefined_constants:
1.67 +
1.68 + # Search for class namespace members.
1.69 +
1.70 if self.in_class:
1.71 ref = self.get_object(self.get_object_path(name), False)
1.72 +
1.73 + # Search for imported names.
1.74 +
1.75 + if not ref:
1.76 + ref = self.get_imported_name(name)
1.77 +
1.78 + # Search for globals or built-in names.
1.79 +
1.80 if not ref:
1.81 ref = self.get_global_or_builtin(name)
1.82