[pypy-svn] r73084 - in pypy/branch/stackovf/pypy: rlib/test translator translator/c

arigo at codespeak.net arigo at codespeak.net
Mon Mar 29 17:13:21 CEST 2010


Author: arigo
Date: Mon Mar 29 17:13:19 2010
New Revision: 73084

Modified:
   pypy/branch/stackovf/pypy/rlib/test/test_rstackovf.py
   pypy/branch/stackovf/pypy/translator/c/node.py
   pypy/branch/stackovf/pypy/translator/exceptiontransform.py
Log:
Minimal changes to make the new test pass.
Needs reviewing.


Modified: pypy/branch/stackovf/pypy/rlib/test/test_rstackovf.py
==============================================================================
--- pypy/branch/stackovf/pypy/rlib/test/test_rstackovf.py	(original)
+++ pypy/branch/stackovf/pypy/rlib/test/test_rstackovf.py	Mon Mar 29 17:13:19 2010
@@ -27,3 +27,9 @@
     from pypy.rpython.test.test_llinterp import interpret
     res = interpret(f, [sys.maxint], type_system='ootype')
     assert res == 1
+
+def test_c_translation():
+    from pypy.translator.c.test.test_genc import compile
+    fn = compile(f, [int])
+    res = fn(sys.maxint)
+    assert res == 1

Modified: pypy/branch/stackovf/pypy/translator/c/node.py
==============================================================================
--- pypy/branch/stackovf/pypy/translator/c/node.py	(original)
+++ pypy/branch/stackovf/pypy/translator/c/node.py	Mon Mar 29 17:13:19 2010
@@ -11,6 +11,7 @@
 from pypy.translator.c.support import c_char_array_constant, barebonearray
 from pypy.translator.c.primitive import PrimitiveType, name_signed
 from pypy.rlib.rarithmetic import isinf, isnan
+from pypy.rlib.rstackovf import _StackOverflow
 from pypy.translator.c import extfunc
 from pypy.translator.tool.cbuild import ExternalCompilationInfo
 from py.builtin import BaseException
@@ -981,6 +982,8 @@
                 return 'PyExc_' + value.__name__
             if value is py.code._AssertionError:
                 return 'PyExc_AssertionError'
+            if value is _StackOverflow:
+                return 'PyExc_RuntimeError'
         raise Exception("don't know how to simply render py object: %r" %
                         (value, ))
     

Modified: pypy/branch/stackovf/pypy/translator/exceptiontransform.py
==============================================================================
--- pypy/branch/stackovf/pypy/translator/exceptiontransform.py	(original)
+++ pypy/branch/stackovf/pypy/translator/exceptiontransform.py	Mon Mar 29 17:13:19 2010
@@ -13,6 +13,7 @@
 from pypy.rlib.rarithmetic import r_uint, r_longlong, r_ulonglong
 from pypy.rlib.rarithmetic import r_singlefloat
 from pypy.rlib.debug import ll_assert
+from pypy.rlib.rstackovf import _StackOverflow
 from pypy.annotation import model as annmodel
 from pypy.rpython.annlowlevel import MixLevelHelperAnnotator
 from pypy.tool.sourcetools import func_with_new_name
@@ -60,8 +61,8 @@
         exc_data, null_type, null_value = self.setup_excdata()
 
         rclass = translator.rtyper.type_system.rclass
-        (runtime_error_ll_exc_type,
-         runtime_error_ll_exc) = self.get_builtin_exception(RuntimeError)
+        (stackovf_ll_exc_type,
+         stackovf_ll_exc) = self.get_builtin_exception(_StackOverflow)
         (assertion_error_ll_exc_type,
          assertion_error_ll_exc) = self.get_builtin_exception(AssertionError)
         (n_i_error_ll_exc_type,
@@ -114,8 +115,8 @@
                 exc_data.exc_type = rclass.ll_inst_type(evalue)
                 exc_data.exc_value = evalue
 
-        def rpyexc_raise_runtime_error():
-            rpyexc_raise(runtime_error_ll_exc_type, runtime_error_ll_exc)
+        def rpyexc_raise_stack_overflow():
+            rpyexc_raise(stackovf_ll_exc_type, stackovf_ll_exc)
 
         self.rpyexc_occured_ptr = self.build_func(
             "RPyExceptionOccurred",
@@ -151,9 +152,9 @@
             lltype.Void,
             jitcallkind='rpyexc_raise') # for the JIT
 
-        self.rpyexc_raise_runtime_error_ptr = self.build_func(
-            "RPyRaiseRuntimeError",
-            self.noinline(rpyexc_raise_runtime_error),
+        self.rpyexc_raise_stack_overflow_ptr = self.build_func(
+            "RPyRaiseStackOverflow",
+            self.noinline(rpyexc_raise_stack_overflow),
             [], lltype.Void)
 
         self.rpyexc_fetch_exception_ptr = self.build_func(
@@ -237,10 +238,10 @@
             if block.operations[i].opname == 'stack_unwind':
                 # if there are stack_unwind ops left,
                 # the graph was not stackless-transformed
-                # so we need to raise a RuntimeError in any
+                # so we need to raise a StackOverflow in any
                 # case
                 block.operations[i].opname = "direct_call"
-                block.operations[i].args = [self.rpyexc_raise_runtime_error_ptr]
+                block.operations[i].args = [self.rpyexc_raise_stack_overflow_ptr]
 
     def replace_fetch_restore_operations(self, block):
         # the gctransformer will create these operations.  It looks as if the



More information about the Pypy-commit mailing list