1.1 --- a/micropython/inspect.py Sat Jun 09 18:27:00 2012 +0200
1.2 +++ b/micropython/inspect.py Sat Jun 09 18:28:02 2012 +0200
1.3 @@ -462,7 +462,23 @@
1.4
1.5 def TEST_OP(self, node):
1.6 self.use_name("__bool__", node)
1.7 - return self.OP(node)
1.8 + self.new_branchpoint()
1.9 +
1.10 + # Propagate attribute usage to branches.
1.11 + # Each node starts a new conditional region, effectively making a deeply
1.12 + # nested collection of if-like statements.
1.13 +
1.14 + for n in node.nodes:
1.15 + self.new_branch(n)
1.16 + self.dispatch(n)
1.17 +
1.18 + # The nested regions must be terminated.
1.19 +
1.20 + for n in node.nodes:
1.21 + self.shelve_branch()
1.22 +
1.23 + self.merge_branches()
1.24 + return make_instance()
1.25
1.26 # Generic support for classes of operations.
1.27
1.28 @@ -1158,7 +1174,10 @@
1.29 def visitName(self, node):
1.30 return self.get_namespace().get_using_node(node.name, node) or make_instance()
1.31
1.32 - visitNot = TEST_OP
1.33 + def visitNot(self, node):
1.34 + self.use_name("__bool__", node)
1.35 + self.dispatch(node.expr)
1.36 + return make_instance()
1.37
1.38 visitOr = TEST_OP
1.39