[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