1.1 --- a/deducer.py Wed Mar 08 00:49:56 2017 +0100
1.2 +++ b/deducer.py Wed Mar 08 14:53:01 2017 +0100
1.3 @@ -943,8 +943,7 @@
1.4
1.5 # Get aliased names with details of their accesses.
1.6
1.7 - for name_path, all_aliases in self.importer.all_aliased_names.items():
1.8 - path, name = name_path.rsplit(".", 1)
1.9 + for (path, name), all_aliases in self.importer.all_aliased_names.items():
1.10
1.11 # For each version of the name, obtain the access location.
1.12
1.13 @@ -1714,12 +1713,11 @@
1.14 None if no such references exist.
1.15 """
1.16
1.17 - location, name, attrnames, version = access_location
1.18 - path = get_name_path(location, name)
1.19 + path, name, attrnames, version = access_location
1.20
1.21 # Use initialiser information, if available.
1.22
1.23 - refs = self.importer.all_initialised_names.get(path)
1.24 + refs = self.importer.all_initialised_names.get((path, name))
1.25 if refs and refs.has_key(version):
1.26 return refs[version]
1.27 else:
2.1 --- a/modules.py Wed Mar 08 00:49:56 2017 +0100
2.2 +++ b/modules.py Wed Mar 08 14:53:01 2017 +0100
2.3 @@ -479,20 +479,20 @@
2.4 f.readline() # "initialised names:"
2.5 line = f.readline().rstrip()
2.6 while line:
2.7 - name, version, value = self._get_fields(line, 3)
2.8 - init_item(self.initialised_names, name, dict)
2.9 - self.initialised_names[name][int(version)] = decode_reference(value)
2.10 + path, name, version, value = self._get_fields(line, 4)
2.11 + init_item(self.initialised_names, (path, name), dict)
2.12 + self.initialised_names[(path, name)][int(version)] = decode_reference(value)
2.13 line = f.readline().rstrip()
2.14
2.15 def _get_aliased_names(self, f):
2.16 f.readline() # "aliased names:"
2.17 line = f.readline().rstrip()
2.18 while line:
2.19 - name, version, path, original_name, attrnames, number = self._get_fields(line, 6)
2.20 - init_item(self.aliased_names, name, dict)
2.21 + path, name, version, original_path, original_name, attrnames, number = self._get_fields(line, 7)
2.22 + init_item(self.aliased_names, (path, name), dict)
2.23 if number == "{}": number = None
2.24 else: number = int(number)
2.25 - self.aliased_names[name][int(version)] = (path, original_name, attrnames != "{}" and attrnames or None, number)
2.26 + self.aliased_names[(path, name)][int(version)] = (original_path, original_name, attrnames != "{}" and attrnames or None, number)
2.27 line = f.readline().rstrip()
2.28
2.29 def _get_function_parameters(self, f):
2.30 @@ -746,22 +746,22 @@
2.31 print >>f, "initialised names:"
2.32 assignments = self.initialised_names.items()
2.33 assignments.sort()
2.34 - for name, refs in assignments:
2.35 + for (path, name), refs in assignments:
2.36 versions = refs.items()
2.37 versions.sort()
2.38 for version, ref in versions:
2.39 - print >>f, name, version, ref
2.40 + print >>f, path, name, version, ref
2.41
2.42 print >>f
2.43 print >>f, "aliased names:"
2.44 assignments = self.aliased_names.items()
2.45 assignments.sort()
2.46 - for name, aliases in assignments:
2.47 + for (path, name), aliases in assignments:
2.48 versions = aliases.items()
2.49 versions.sort()
2.50 for version, alias in versions:
2.51 - path, original_name, attrnames, number = alias
2.52 - print >>f, name, version, path, original_name, attrnames or "{}", number is None and "{}" or number
2.53 + original_path, original_name, attrnames, number = alias
2.54 + print >>f, path, name, version, original_path, original_name, attrnames or "{}", number is None and "{}" or number
2.55
2.56 print >>f
2.57 print >>f, "function parameters:"
3.1 --- a/resolving.py Wed Mar 08 00:49:56 2017 +0100
3.2 +++ b/resolving.py Wed Mar 08 14:53:01 2017 +0100
3.3 @@ -240,11 +240,6 @@
3.4 # Resolve values for each name in a scope.
3.5
3.6 for name, values in name_initialisers.items():
3.7 - if path == self.name:
3.8 - assigned_path = name
3.9 - else:
3.10 - assigned_path = "%s.%s" % (path, name)
3.11 -
3.12 initialised_names = {}
3.13 aliased_names = {}
3.14
3.15 @@ -350,9 +345,9 @@
3.16 initialised_names[i] = ref
3.17
3.18 if initialised_names:
3.19 - self.initialised_names[assigned_path] = initialised_names
3.20 + self.initialised_names[(path, name)] = initialised_names
3.21 if aliased_names:
3.22 - self.aliased_names[assigned_path] = aliased_names
3.23 + self.aliased_names[(path, name)] = aliased_names
3.24
3.25 def resolve_literals(self):
3.26
3.27 @@ -364,7 +359,7 @@
3.28 for constant, n in constants.items():
3.29 objpath = "%s.$c%d" % (path, n)
3.30 _constant, value_type, encoding = self.constant_values[objpath]
3.31 - self.initialised_names[objpath] = {0 : Reference("<instance>", value_type)}
3.32 + self.initialised_names[(path, objpath)] = {0 : Reference("<instance>", value_type)}
3.33
3.34 # Get the literals defined in each namespace.
3.35
3.36 @@ -372,7 +367,7 @@
3.37 for n in range(0, literals):
3.38 objpath = "%s.$C%d" % (path, n)
3.39 value_type = self.literal_types[objpath]
3.40 - self.initialised_names[objpath] = {0 : Reference("<instance>", value_type)}
3.41 + self.initialised_names[(path, objpath)] = {0 : Reference("<instance>", value_type)}
3.42
3.43 # Object resolution.
3.44