# HG changeset patch # User Paul Boddie # Date 1475155315 -7200 # Node ID 7c75617c5c6ec9921f6b90b7e5499e4561bf1124 # Parent e5d076d40c1a8a9bf79cc7cddac95f27eb88d159 Attempt to improve module details removal, removing classes from importer records, removing modules from the object catalogue, and eliminating objects from removed modules. diff -r e5d076d40c1a -r 7c75617c5c6e importer.py --- a/importer.py Wed Sep 28 22:59:21 2016 +0200 +++ b/importer.py Thu Sep 29 15:21:55 2016 +0200 @@ -329,6 +329,17 @@ del self.modules[name] self.removed[name] = module + # Collect redundant objects. + + for module in self.removed.values(): + module.collect() + + # Assert module objects where aliases have been removed. + + for name in self.required: + if not self.objects.has_key(name): + self.objects[name] = Reference("", name) + return m def finalise(self): diff -r e5d076d40c1a -r 7c75617c5c6e modules.py --- a/modules.py Wed Sep 28 22:59:21 2016 +0200 +++ b/modules.py Thu Sep 29 15:21:55 2016 +0200 @@ -122,6 +122,7 @@ del self.importer.all_module_attrs[self.name] for name in self.classes.keys(): + del self.importer.classes[name] del self.importer.all_class_attrs[name] del self.importer.all_instance_attrs[name] del self.importer.all_instance_attr_constants[name] @@ -150,10 +151,22 @@ # Remove this module's objects from the importer. Objects are # automatically propagated when defined. + ref = self.importer.objects.get(self.name) + if ref and ref.has_kind(""): + del self.importer.objects[self.name] + for name, ref in self.objects.items(): if not ref.has_kind(""): del self.importer.objects[name] + def collect(self): + + "Collect removed objects." + + for name, ref in self.objects.items(): + if not self.importer.objects.has_key(ref.get_origin()) and self.importer.objects.has_key(name): + del self.importer.objects[name] + def propagate_attrs(self): "Derive attributes from the class and module member details."