# HG changeset patch # User Paul Boddie # Date 1490912221 -7200 # Node ID d7093295564541b526e9622df43db12b7db3be8f # Parent 70525f8ca6315b58c4ad434588a9fee681e83e5d Fixed non-recognition of deferred references in non-module, non-function scopes. diff -r 70525f8ca631 -r d70932955645 inspector.py --- a/inspector.py Thu Mar 30 19:41:24 2017 +0200 +++ b/inspector.py Fri Mar 31 00:17:01 2017 +0200 @@ -132,9 +132,9 @@ key = "%s.%s" % (path, name) - # Find local definitions (within dynamic namespaces). + # Find local definitions. - ref = self.get_resolved_object(key) + ref = self.get_resolved_object(key, True) if ref: self.set_name_reference(key, ref) continue @@ -1287,13 +1287,11 @@ # Function local names. elif self.in_function: - path = self.get_object_path(name) self.set_function_local(name, init_value) # Other namespaces (classes). else: - path = self.get_object_path(name) self.set_name(name, init_value) def set_name(self, name, ref=None): diff -r 70525f8ca631 -r d70932955645 resolving.py --- a/resolving.py Thu Mar 30 19:41:24 2017 +0200 +++ b/resolving.py Fri Mar 31 00:17:01 2017 +0200 @@ -431,7 +431,7 @@ # Object resolution. - def get_resolved_object(self, path): + def get_resolved_object(self, path, defer=False): """ Get the details of an object with the given 'path' within this module. @@ -442,7 +442,7 @@ if self.objects.has_key(path): ref = self.objects[path] - if ref.has_kind(""): + if not defer and ref.has_kind(""): return None else: return ref diff -r 70525f8ca631 -r d70932955645 tests/attr_class.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/attr_class.py Fri Mar 31 00:17:01 2017 +0200 @@ -0,0 +1,43 @@ +class SignalState: + Red = 1 + Amber = 2 + Green = 3 + AmberAgain = 4 + Off = None + +class Signal: + def __init__(self): + self.disable() + + def enable(self): + self.state = SignalState.Red + + def disable(self): + self.state = SignalState.Off + + def next(self): + if self.state == SignalState.Red: + self.state = SignalState.Amber + elif self.state == SignalState.Amber: + self.state = SignalState.Green + elif self.state == SignalState.Green: + self.state = SignalState.AmberAgain + elif self.state == SignalState.AmberAgain: + self.state = SignalState.Red + else: + self.state = SignalState.Off + +s = Signal() +print s.state # None +s.next() +print s.state # None +s.enable() +print s.state # 1 +s.next() +print s.state # 2 +s.next() +print s.state # 3 +s.next() +print s.state # 4 +s.next() +print s.state # 1