[pypy-svn] r18396 - in pypy/dist/pypy/translator/c: . test
arigo at codespeak.net
arigo at codespeak.net
Tue Oct 11 15:02:02 CEST 2005
Author: arigo
Date: Tue Oct 11 15:01:59 2005
New Revision: 18396
Modified:
pypy/dist/pypy/translator/c/stackless.py
pypy/dist/pypy/translator/c/test/test_standalone.py
Log:
Void special case: avoid generating code like 'return (void)save_frame(...);'
Modified: pypy/dist/pypy/translator/c/stackless.py
==============================================================================
--- pypy/dist/pypy/translator/c/stackless.py (original)
+++ pypy/dist/pypy/translator/c/stackless.py Tue Oct 11 15:01:59 2005
@@ -213,11 +213,15 @@
savelabel = 'save_%d' % len(self.savelines)
arguments = ['%d' % stacklessdata.globalstatecounter] + vars
stacklessdata.globalstatecounter += 1
- self.savelines.append('%s: return (%s) save_%s(%s);' % (
- savelabel,
- self.lltypename(self.graph.getreturnvar()).replace('@', ''),
- structname,
- ', '.join(arguments)))
+ savecall = 'save_%s(%s);' % (structname, ', '.join(arguments))
+ retvar = self.graph.getreturnvar()
+ if retvar.concretetype is lltype.Void:
+ savecall += ' return;'
+ else:
+ savecall = 'return (%s) %s' % (
+ self.lltypename(retvar).replace('@', ''),
+ savecall)
+ self.savelines.append('%s: %s' % (savelabel, savecall))
# generate the resume block, e.g.
# case 1:
Modified: pypy/dist/pypy/translator/c/test/test_standalone.py
==============================================================================
--- pypy/dist/pypy/translator/c/test/test_standalone.py (original)
+++ pypy/dist/pypy/translator/c/test/test_standalone.py Tue Oct 11 15:01:59 2005
@@ -27,11 +27,18 @@
def test_stack_unwind():
+ def g1():
+ "just to check Void special cases around the code"
+ def g2(ignored):
+ g1()
def f(n):
+ g1()
if n > 0:
- return f(n-1)
+ res = f(n-1)
else:
- return stack_frames_depth()
+ res = stack_frames_depth()
+ g2(g1)
+ return res
def entry_point(argv):
count0 = f(0)
count10 = f(10)
More information about the Pypy-commit
mailing list