1.1 --- a/importer.py Wed Sep 28 22:59:21 2016 +0200
1.2 +++ b/importer.py Thu Sep 29 15:21:55 2016 +0200
1.3 @@ -329,6 +329,17 @@
1.4 del self.modules[name]
1.5 self.removed[name] = module
1.6
1.7 + # Collect redundant objects.
1.8 +
1.9 + for module in self.removed.values():
1.10 + module.collect()
1.11 +
1.12 + # Assert module objects where aliases have been removed.
1.13 +
1.14 + for name in self.required:
1.15 + if not self.objects.has_key(name):
1.16 + self.objects[name] = Reference("<module>", name)
1.17 +
1.18 return m
1.19
1.20 def finalise(self):
2.1 --- a/modules.py Wed Sep 28 22:59:21 2016 +0200
2.2 +++ b/modules.py Thu Sep 29 15:21:55 2016 +0200
2.3 @@ -122,6 +122,7 @@
2.4 del self.importer.all_module_attrs[self.name]
2.5
2.6 for name in self.classes.keys():
2.7 + del self.importer.classes[name]
2.8 del self.importer.all_class_attrs[name]
2.9 del self.importer.all_instance_attrs[name]
2.10 del self.importer.all_instance_attr_constants[name]
2.11 @@ -150,10 +151,22 @@
2.12 # Remove this module's objects from the importer. Objects are
2.13 # automatically propagated when defined.
2.14
2.15 + ref = self.importer.objects.get(self.name)
2.16 + if ref and ref.has_kind("<module>"):
2.17 + del self.importer.objects[self.name]
2.18 +
2.19 for name, ref in self.objects.items():
2.20 if not ref.has_kind("<module>"):
2.21 del self.importer.objects[name]
2.22
2.23 + def collect(self):
2.24 +
2.25 + "Collect removed objects."
2.26 +
2.27 + for name, ref in self.objects.items():
2.28 + if not self.importer.objects.has_key(ref.get_origin()) and self.importer.objects.has_key(name):
2.29 + del self.importer.objects[name]
2.30 +
2.31 def propagate_attrs(self):
2.32
2.33 "Derive attributes from the class and module member details."