# HG changeset patch # User Paul Boddie # Date 1193965261 -3600 # Node ID 5b24a64d2551da2093f534f2f0a19243fbbf8cfc # Parent 57151b9b2b54c15f5bfded40321f6dc4a7cde645 Fixed instance attribute name caching. Changed remaining external namespace accesses. diff -r 57151b9b2b54 -r 5b24a64d2551 micropython/inspect.py --- a/micropython/inspect.py Fri Nov 02 01:50:43 2007 +0100 +++ b/micropython/inspect.py Fri Nov 02 02:01:01 2007 +0100 @@ -51,6 +51,9 @@ def __delitem__(self, name): del self.namespace[name] + def has_key(self, name): + return self.namespace.has_key(name) + def keys(self): return self.namespace.keys() @@ -103,7 +106,7 @@ self.instattr = set() # instance attributes self.all_instattr = None # cache for instance_attributes - self.all_instattr_names = [] # from all_instattr + self.all_instattr_names = None # from all_instattr self.classattr = None # cache for class_attributes self.classattr_names = None # from classattr self.all_classattr = None # cache for all_class_attributes @@ -138,7 +141,7 @@ if self.classattr is None: self.classattr = {} - self.classattr_names = self.namespace.keys() + self.classattr_names = self.keys() for i, name in enumerate(self.classattr_names): self.classattr[name] = Attr(i, self, self[name]) @@ -259,7 +262,7 @@ ) def make_global(self, name): - if name not in self.argnames and not self.namespace.has_key(name): + if name not in self.argnames and not self.has_key(name): self.globals.add(name) else: raise InspectError, "Name %r is global and local in %r" % (name, self) @@ -283,7 +286,7 @@ if self.localnames is None: self.localnames = {} start = len(self.argnames) - for i, name in enumerate(self.namespace.keys()): + for i, name in enumerate(self.keys()): self.localnames[name] = Attr(start + i, None) return self.localnames @@ -310,6 +313,9 @@ def all_class_attributes(self): return {} + def instance_attributes(self): + return {} + def __repr__(self): return "UnresolvedName(%r, %r)" % (self.name, self.parent_name) @@ -364,7 +370,7 @@ self.module = module processed = self.dispatch(module) - if self.namespace.has_key("__all__"): + if self.has_key("__all__"): all = self["__all__"] if isinstance(all, compiler.ast.List): for n in all.nodes: @@ -375,7 +381,7 @@ "Vacuum the module namespace, removing unloaded module references." - for name, value in self.namespace.items(): + for name, value in self.items(): if isinstance(value, Module) and not value.loaded: del self[name] @@ -401,7 +407,7 @@ if self.modattr is None: self.modattr = {} - self.modattr_names = self.namespace.keys() + self.modattr_names = self.keys() for i, name in enumerate(self.modattr_names): self.modattr[name] = Attr(i, self, self[name]) @@ -651,7 +657,7 @@ name = node.name if name == "self": return Self() - elif self.namespace.has_key(name): + elif self.has_key(name): return self[name] elif builtins_namespace.has_key(name): return builtins_namespace[name]