[pypy-svn] r25623 - in pypy/dist/pypy/translator/stackless: . test

mwh at codespeak.net mwh at codespeak.net
Sun Apr 9 16:35:08 CEST 2006


Author: mwh
Date: Sun Apr  9 16:35:07 2006
New Revision: 25623

Modified:
   pypy/dist/pypy/translator/stackless/code.py
   pypy/dist/pypy/translator/stackless/test/test_transform.py
   pypy/dist/pypy/translator/stackless/transform.py
Log:
some changes to placate llinterp
change the state header to be a gc struct too
fix bug in slp_main_loop
the test now works!


Modified: pypy/dist/pypy/translator/stackless/code.py
==============================================================================
--- pypy/dist/pypy/translator/stackless/code.py	(original)
+++ pypy/dist/pypy/translator/stackless/code.py	Sun Apr  9 16:35:07 2006
@@ -1,11 +1,10 @@
 from pypy.rpython.lltypesystem import lltype, llmemory
 from pypy.rpython import rarithmetic
 
-STATE_HEADER = lltype.Struct('state_header',
-                             ('f_back', lltype.Ptr(lltype.ForwardReference())),
+STATE_HEADER = lltype.GcStruct('state_header',
+                             ('f_back', lltype.Ptr(lltype.GcForwardReference())),
                              ('restartstate', lltype.Signed),
-                             ('function', llmemory.Address), 
-)
+                             ('function', llmemory.Address),)
 STATE_HEADER.f_back.TO.become(STATE_HEADER)
 
 null_state = lltype.nullptr(STATE_HEADER)
@@ -27,7 +26,7 @@
 global_state = StacklessData()
 
 void_void_func = lltype.Ptr(lltype.FuncType([], lltype.Void))
-long_void_func = lltype.Ptr(lltype.FuncType([], lltype.Signed))
+long_void_func = lltype.Ptr(lltype.FuncType([lltype.Signed], lltype.Signed))
 longlong_void_func = lltype.Ptr(lltype.FuncType([], lltype.SignedLongLong))
 float_void_func = lltype.Ptr(lltype.FuncType([], lltype.Float))
 pointer_void_func = lltype.Ptr(lltype.FuncType([], llmemory.Address) )
@@ -38,7 +37,7 @@
         fn2()
     elif signature == 'long':
         fn3 = llmemory.cast_adr_to_ptr(fn, long_void_func)
-        global_state.retval_long = fn3()
+        global_state.retval_long = fn3(0)
     elif signature == 'longlong':
         fn3 = llmemory.cast_adr_to_ptr(fn, longlong_void_func)
         global_state.retval_longlong = fn3()
@@ -64,7 +63,8 @@
     currentframe = global_state.top
     
     while currentframe:
-        global_state.top = nextframe = currentframe.f_back
+        global_state.top = currentframe
+        nextframe = currentframe.f_back
         fn, signature, global_state.restart_substate = decode_state(currentframe)
         try:
             call_function(fn, signature)
@@ -75,7 +75,7 @@
         else:
             global_state.exception = None
 
-        currentframe = nextframe 
+        currentframe = nextframe
 
     if global_state.exception is not None:
         raise global_state.exception

Modified: pypy/dist/pypy/translator/stackless/test/test_transform.py
==============================================================================
--- pypy/dist/pypy/translator/stackless/test/test_transform.py	(original)
+++ pypy/dist/pypy/translator/stackless/test/test_transform.py	Sun Apr  9 16:35:07 2006
@@ -86,10 +86,11 @@
 ##     ll_list = r_list_of_strings.convert_const([''])
 ##     from pypy.rpython.llinterp import LLInterpreter
 ##     interp = LLInterpreter(t.rtyper)
-##     interp.eval_graph(graphof(t, entry_point), [ll_list])
+##     res = interp.eval_graph(graphof(t, entry_point), [ll_list])
+##     print res
 ##     return
 
-    cbuilder = CStandaloneBuilder(t, entry_point, gcpolicy=gc.BoehmGcPolicy)
+    cbuilder = CStandaloneBuilder(t, entry_point)#, gcpolicy=gc.BoehmGcPolicy)
     cbuilder.generate_source()
     cbuilder.compile()
     return cbuilder.cmdexec('')

Modified: pypy/dist/pypy/translator/stackless/transform.py
==============================================================================
--- pypy/dist/pypy/translator/stackless/transform.py	(original)
+++ pypy/dist/pypy/translator/stackless/transform.py	Sun Apr  9 16:35:07 2006
@@ -259,11 +259,13 @@
         var_unwind_exception = copyvar(self.translator, var_unwind_exception) 
 
         fields = []
+        n = []
         for i, v in enumerate(varstosave):
             assert v.concretetype is not lltype.Void
             fields.append(('field_%d'%(i,), v.concretetype))
+            n.append(repr(v.concretetype))
         
-        frame_type = lltype.GcStruct("S",
+        frame_type = lltype.GcStruct("S" + '-'.join(n),
                             ('header', STATE_HEADER),
                             *fields)
         



More information about the Pypy-commit mailing list