# HG changeset patch # User Paul Boddie # Date 1488981246 -3600 # Node ID f355f9f6647cd5dfc825f70ba38c4d7842075644 # Parent 52cf52febe306a1e7ea2686ca5464489c9c86857# Parent c94d43f85d6f105720547da262eea1f0d8caf045 Merged changes from the default branch. diff -r 52cf52febe30 -r f355f9f6647c deducer.py --- a/deducer.py Wed Mar 08 00:50:13 2017 +0100 +++ b/deducer.py Wed Mar 08 14:54:06 2017 +0100 @@ -943,8 +943,7 @@ # Get aliased names with details of their accesses. - for name_path, all_aliases in self.importer.all_aliased_names.items(): - path, name = name_path.rsplit(".", 1) + for (path, name), all_aliases in self.importer.all_aliased_names.items(): # For each version of the name, obtain the access location. @@ -1714,12 +1713,11 @@ None if no such references exist. """ - location, name, attrnames, version = access_location - path = get_name_path(location, name) + path, name, attrnames, version = access_location # Use initialiser information, if available. - refs = self.importer.all_initialised_names.get(path) + refs = self.importer.all_initialised_names.get((path, name)) if refs and refs.has_key(version): return refs[version] else: diff -r 52cf52febe30 -r f355f9f6647c modules.py --- a/modules.py Wed Mar 08 00:50:13 2017 +0100 +++ b/modules.py Wed Mar 08 14:54:06 2017 +0100 @@ -479,20 +479,20 @@ f.readline() # "initialised names:" line = f.readline().rstrip() while line: - name, version, value = self._get_fields(line, 3) - init_item(self.initialised_names, name, dict) - self.initialised_names[name][int(version)] = decode_reference(value) + path, name, version, value = self._get_fields(line, 4) + init_item(self.initialised_names, (path, name), dict) + self.initialised_names[(path, name)][int(version)] = decode_reference(value) line = f.readline().rstrip() def _get_aliased_names(self, f): f.readline() # "aliased names:" line = f.readline().rstrip() while line: - name, version, path, original_name, attrnames, number = self._get_fields(line, 6) - init_item(self.aliased_names, name, dict) + path, name, version, original_path, original_name, attrnames, number = self._get_fields(line, 7) + init_item(self.aliased_names, (path, name), dict) if number == "{}": number = None else: number = int(number) - self.aliased_names[name][int(version)] = (path, original_name, attrnames != "{}" and attrnames or None, number) + self.aliased_names[(path, name)][int(version)] = (original_path, original_name, attrnames != "{}" and attrnames or None, number) line = f.readline().rstrip() def _get_function_parameters(self, f): @@ -746,22 +746,22 @@ print >>f, "initialised names:" assignments = self.initialised_names.items() assignments.sort() - for name, refs in assignments: + for (path, name), refs in assignments: versions = refs.items() versions.sort() for version, ref in versions: - print >>f, name, version, ref + print >>f, path, name, version, ref print >>f print >>f, "aliased names:" assignments = self.aliased_names.items() assignments.sort() - for name, aliases in assignments: + for (path, name), aliases in assignments: versions = aliases.items() versions.sort() for version, alias in versions: - path, original_name, attrnames, number = alias - print >>f, name, version, path, original_name, attrnames or "{}", number is None and "{}" or number + original_path, original_name, attrnames, number = alias + print >>f, path, name, version, original_path, original_name, attrnames or "{}", number is None and "{}" or number print >>f print >>f, "function parameters:" diff -r 52cf52febe30 -r f355f9f6647c resolving.py --- a/resolving.py Wed Mar 08 00:50:13 2017 +0100 +++ b/resolving.py Wed Mar 08 14:54:06 2017 +0100 @@ -240,11 +240,6 @@ # Resolve values for each name in a scope. for name, values in name_initialisers.items(): - if path == self.name: - assigned_path = name - else: - assigned_path = "%s.%s" % (path, name) - initialised_names = {} aliased_names = {} @@ -350,9 +345,9 @@ initialised_names[i] = ref if initialised_names: - self.initialised_names[assigned_path] = initialised_names + self.initialised_names[(path, name)] = initialised_names if aliased_names: - self.aliased_names[assigned_path] = aliased_names + self.aliased_names[(path, name)] = aliased_names def resolve_literals(self): @@ -364,7 +359,7 @@ for constant, n in constants.items(): objpath = "%s.$c%d" % (path, n) _constant, value_type, encoding = self.constant_values[objpath] - self.initialised_names[objpath] = {0 : Reference("", value_type)} + self.initialised_names[(path, objpath)] = {0 : Reference("", value_type)} # Get the literals defined in each namespace. @@ -372,7 +367,7 @@ for n in range(0, literals): objpath = "%s.$C%d" % (path, n) value_type = self.literal_types[objpath] - self.initialised_names[objpath] = {0 : Reference("", value_type)} + self.initialised_names[(path, objpath)] = {0 : Reference("", value_type)} # Object resolution.