[pypy-svn] rev 1511 - in pypy/trunk/src/pypy/translator: . test

arigo at codespeak.net arigo at codespeak.net
Wed Oct 1 19:54:46 CEST 2003


Author: arigo
Date: Wed Oct  1 19:54:45 2003
New Revision: 1511

Modified:
   pypy/trunk/src/pypy/translator/genpyrex.py
   pypy/trunk/src/pypy/translator/test/test_pyrextrans.py
   pypy/trunk/src/pypy/translator/test/test_typedpyrex.py
Log:
Check-in


Modified: pypy/trunk/src/pypy/translator/genpyrex.py
==============================================================================
--- pypy/trunk/src/pypy/translator/genpyrex.py	(original)
+++ pypy/trunk/src/pypy/translator/genpyrex.py	Wed Oct  1 19:54:45 2003
@@ -100,14 +100,49 @@
         
         self.putline('cinline "Label%s:"' % blockids[block])
         for op in block.operations:
-            opsymbol = self.ops[op.opname] 
-            arity = self.oparity[op.opname]
-            assert(arity == len(op.args))
             argnames = [self._str(arg, block) for arg in op.args]
-            if arity == 1 or arity == 3 or "a" <= opsymbol[0] <= "z":
-                self.putline("%s = %s(%s)" % (self._str(op.result, block), opsymbol, ", ".join(argnames)))
+            resultname = self._str(op.result, block)
+            # XXX refactor me
+            if op.opname == 'next_and_flag':
+                self.putline("try:")
+                self.putline("    _nextval = %s.next()" % argnames[0])
+                self.putline("except StopIteration:")
+                self.putline("    %s = None, 0" % resultname)
+                self.putline("else:")
+                self.putline("    %s = _nextval, 1" % resultname)
+            elif op.opname == 'getitem':
+                self.putline("%s = %s[%s]" % (resultname, argnames[0],
+                                              argnames[1]))
+            elif op.opname == 'newtuple':
+                self.putline("%s = (%s)" % (
+                    resultname, "".join([s+", " for s in argnames])))
+            elif op.opname == 'newlist':
+                self.putline("%s = [%s]" % (
+                    resultname, "".join([s+", " for s in argnames])))
+            elif op.opname == 'newdict':
+                pairs = []
+                for i in range(0, len(argnames), 2):
+                    pairs.append("%s: %s, " % (argnames[i], argnames[i+1]))
+                self.putline("%s = {%s}" % (resultname, "".join(pairs)))
+            elif op.opname == 'call':
+                self.putline("%s = %s(*%s, **%s)" % (resultname, argnames[0],
+                                                     argnames[1], argnames[2]))
             else:
-                self.putline("%s = %s %s %s" % (self._str(op.result, block), argnames[0], opsymbol, argnames[1]))
+                opsymbol = self.ops[op.opname]
+                arity = self.oparity[op.opname]
+                assert(arity == len(op.args))
+                if arity == 1 or arity == 3 or "a" <= opsymbol[0] <= "z":
+                    self.putline("%s = %s(%s)" % (resultname, opsymbol,
+                                                  ", ".join(argnames)))
+                elif opsymbol[-1] == '=':
+                    # in-place operator
+                    self.putline("%s = %s; %s += %s" % (
+                        resultname, argnames[0],
+                        resultname, argnames[1]))
+                else:
+                    # infix operator
+                    self.putline("%s = %s %s %s" % (resultname, argnames[0],
+                                                    opsymbol, argnames[1]))
 
         self.dispatchBranch(block, block.branch)
 

Modified: pypy/trunk/src/pypy/translator/test/test_pyrextrans.py
==============================================================================
--- pypy/trunk/src/pypy/translator/test/test_pyrextrans.py	(original)
+++ pypy/trunk/src/pypy/translator/test/test_pyrextrans.py	Wed Oct  1 19:54:45 2003
@@ -79,7 +79,7 @@
         lst.reverse()
         return lst
 
-    def dont_yet_test_poor_man_range(self):
+    def test_poor_man_range(self):
         poor_man_range = self.make_cfunc(self.poor_man_range)
         self.assertEquals(poor_man_range(10), range(10))
 

Modified: pypy/trunk/src/pypy/translator/test/test_typedpyrex.py
==============================================================================
--- pypy/trunk/src/pypy/translator/test/test_typedpyrex.py	(original)
+++ pypy/trunk/src/pypy/translator/test/test_typedpyrex.py	Wed Oct  1 19:54:45 2003
@@ -58,12 +58,12 @@
     def yast(lst):
         total = 0
         for z in lst:
-            total += z
+            total = total + z
         return total
 
-    def dont_test_yast(self):
+    def test_yast(self):
         yast = self.make_cfunc(self.yast, [list])
-        self.assertEquals(yast(range(11)), 66)
+        self.assertEquals(yast(range(12)), 66)
 
     #____________________________________________________
     def nested_whiles(i, j):
@@ -92,7 +92,7 @@
         lst.reverse()
         return lst
 
-    def dont_yet_test_poor_man_range(self):
+    def test_poor_man_range(self):
         poor_man_range = self.make_cfunc(self.poor_man_range, [int])
         self.assertEquals(poor_man_range(10), range(10))
 


More information about the Pypy-commit mailing list