From c9f966eb9824879a65cf649077eaf1cabeafafcf Mon Sep 17 00:00:00 2001 From: keesbos Date: Thu, 8 Oct 2009 15:11:43 +0000 Subject: [PATCH] Added support for multiple compare (0 < n < 4) git-svn-id: https://pyjamas.svn.sourceforge.net/svnroot/pyjamas/trunk@1973 7a2bd370-bda8-463c-979e-2900ccfb811e --- CHANGELOG | 2 ++ examples/libtest/BoolTest.py | 19 +++++++++++++++++++ pyjs/src/pyjs/translator.py | 10 ++++++++++ 3 files changed, 31 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index f6144c958..e7543cbc4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ Changes made to Pyjamas since 0.6 --------------------------------- + * Add support for multiple compare (0 < n < 4) + * Add PUT and DELETE into XMLHttpRequest (thanks to Nick ) * Added for in tuple diff --git a/examples/libtest/BoolTest.py b/examples/libtest/BoolTest.py index 499d51d3a..20c722da8 100644 --- a/examples/libtest/BoolTest.py +++ b/examples/libtest/BoolTest.py @@ -105,6 +105,25 @@ def testIfStatement(self): self.fail("'[] and not {}' shoul evaluate to False") else: self.assertTrue(True) + if 0 < 1 < 2: + self.assertTrue(True) + else: + self.fail("if 0 < 1 < 2") + i = [0, 2, 4] + i = i.__iter__(); + if 0 < i.next() < 4: + self.fail("iter (0)") + else: + self.assertTrue(True) + if 0 < i.next() < 4: + self.assertTrue(True) + else: + self.fail("iter (2)") + if 0 < i.next() < 4: + self.fail("iter (4)") + else: + self.assertTrue(True) + def testWhileStatement(self): while([]): diff --git a/pyjs/src/pyjs/translator.py b/pyjs/src/pyjs/translator.py index b73180d4e..3f03c4248 100644 --- a/pyjs/src/pyjs/translator.py +++ b/pyjs/src/pyjs/translator.py @@ -2980,13 +2980,23 @@ def _compare(self, node, current_klass): lhs = self.expr(node.expr, current_klass) if len(node.ops) != 1: + cmp = [] + for op, rhs_node in node.ops: + rhsname = self.uniqid("$compare") + rhs = self.expr(rhs_node, current_klass) + rhs = "(%s = %s)" % (rhsname, rhs) + cmp.append(self.compare_code(op, lhs, rhs)) + lhs = rhsname + return "(%s)" % "&&".join(cmp) raise TranslationError( "only one ops supported (in _compare)", node, self.module_name) op = node.ops[0][0] rhs_node = node.ops[0][1] rhs = self.expr(rhs_node, current_klass) + return self.compare_code(op, lhs, rhs) + def compare_code(self, op, lhs, rhs): if op == "==": return self.inline_eq_code(lhs, rhs) if op == "!=":