[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