1.1 --- a/micropython/__init__.py Tue Aug 30 23:36:08 2011 +0200
1.2 +++ b/micropython/__init__.py Tue Aug 30 23:38:04 2011 +0200
1.3 @@ -349,7 +349,7 @@
1.4 }
1.5
1.6 names_always_used = [
1.7 - "bool", "__call__", "__bool__"
1.8 + "bool", "__call__"
1.9 ]
1.10
1.11 def __init__(self, path=None, verbose=0, optimisations=None):
2.1 --- a/micropython/ast.py Tue Aug 30 23:36:08 2011 +0200
2.2 +++ b/micropython/ast.py Tue Aug 30 23:38:04 2011 +0200
2.3 @@ -790,6 +790,8 @@
2.4
2.5 self.set_block(exit_block)
2.6
2.7 + def visitIfExp(self, node): raise TranslationNotImplementedError("IfExp")
2.8 +
2.9 def visitPass(self, node): pass
2.10
2.11 def visitPrint(self, node):
3.1 --- a/micropython/inspect.py Tue Aug 30 23:36:08 2011 +0200
3.2 +++ b/micropython/inspect.py Tue Aug 30 23:38:04 2011 +0200
3.3 @@ -424,11 +424,19 @@
3.4 self.NOP(node)
3.5 self.abandon_branch()
3.6
3.7 + def TEST_NOP(self, node):
3.8 + self.use_name("__bool__", node)
3.9 + self.NOP(node)
3.10 +
3.11 def OP(self, node):
3.12 for n in node.getChildNodes():
3.13 self.dispatch(n)
3.14 return make_instance()
3.15
3.16 + def TEST_OP(self, node):
3.17 + self.use_name("__bool__", node)
3.18 + return self.OP(node)
3.19 +
3.20 # Generic support for classes of operations.
3.21
3.22 def _ensureOperators(self):
3.23 @@ -602,7 +610,7 @@
3.24
3.25 visitAdd = _visitBinary
3.26
3.27 - visitAnd = OP
3.28 + visitAnd = TEST_OP
3.29
3.30 visitAssert = NOP
3.31
3.32 @@ -787,6 +795,8 @@
3.33 # Accounting.
3.34 # NOTE: Replicates some code in micropython.ast.visitCompare.
3.35
3.36 + self.use_name("__bool__", node)
3.37 +
3.38 this_node = node
3.39
3.40 for op in node.ops:
3.41 @@ -936,6 +946,7 @@
3.42 # The name is recorded in an earlier process.
3.43
3.44 def visitIf(self, node):
3.45 + self.use_name("__bool__", node)
3.46 self.new_branchpoint()
3.47
3.48 # Propagate attribute usage to branches.
3.49 @@ -957,6 +968,7 @@
3.50 self.merge_branches()
3.51
3.52 def visitIfExp(self, node):
3.53 + self.use_name("__bool__", node)
3.54 self.new_branchpoint()
3.55
3.56 # Propagate attribute usage to branches.
3.57 @@ -1038,7 +1050,7 @@
3.58
3.59 self.merge_branches()
3.60
3.61 - visitListCompIf = NOP
3.62 + visitListCompIf = TEST_NOP
3.63
3.64 visitMod = _visitBinary
3.65
3.66 @@ -1054,9 +1066,9 @@
3.67 def visitName(self, node):
3.68 return self.get_namespace().get_using_node(node.name, node) or make_instance()
3.69
3.70 - visitNot = OP
3.71 + visitNot = TEST_OP
3.72
3.73 - visitOr = OP
3.74 + visitOr = TEST_OP
3.75
3.76 visitPass = NOP
3.77
3.78 @@ -1125,6 +1137,7 @@
3.79 visitUnarySub = _visitUnary
3.80
3.81 def visitWhile(self, node):
3.82 + self.use_name("__bool__", node)
3.83 self.new_branchpoint(node)
3.84
3.85 # Propagate attribute usage to branches.