[pypy-svn] r27747 - in pypy/branch/njriley-trans/pypy: module/trans rpython/module translator/c translator/c/src

njriley at codespeak.net njriley at codespeak.net
Fri May 26 22:30:58 CEST 2006


Author: njriley
Date: Fri May 26 22:30:57 2006
New Revision: 27747

Modified:
   pypy/branch/njriley-trans/pypy/module/trans/__init__.py
   pypy/branch/njriley-trans/pypy/module/trans/interp_trans.py
   pypy/branch/njriley-trans/pypy/module/trans/rtrans.py
   pypy/branch/njriley-trans/pypy/rpython/module/ll_trans.py
   pypy/branch/njriley-trans/pypy/translator/c/extfunc.py
   pypy/branch/njriley-trans/pypy/translator/c/src/ll_trans.h
Log:
Exposed retry to applevel, auto syscall stuff to other C code;
refactored code a bit.


Modified: pypy/branch/njriley-trans/pypy/module/trans/__init__.py
==============================================================================
--- pypy/branch/njriley-trans/pypy/module/trans/__init__.py	(original)
+++ pypy/branch/njriley-trans/pypy/module/trans/__init__.py	Fri May 26 22:30:57 2006
@@ -9,6 +9,7 @@
     interpleveldefs = {
         'begin'       : 'interp_trans.begin',
         'end'         : 'interp_trans.end',
+        'retry'       : 'interp_trans.retry',
         'abort'       : 'interp_trans.abort',
         'pause'       : 'interp_trans.pause',
         'unpause'     : 'interp_trans.unpause',

Modified: pypy/branch/njriley-trans/pypy/module/trans/interp_trans.py
==============================================================================
--- pypy/branch/njriley-trans/pypy/module/trans/interp_trans.py	(original)
+++ pypy/branch/njriley-trans/pypy/module/trans/interp_trans.py	Fri May 26 22:30:57 2006
@@ -10,6 +10,10 @@
     rtrans.end()
     return space.w_None
 
+def retry(space):
+    rtrans.retry()
+    return space.w_None
+
 def abort(space):
     rtrans.abort()
     return space.w_None

Modified: pypy/branch/njriley-trans/pypy/module/trans/rtrans.py
==============================================================================
--- pypy/branch/njriley-trans/pypy/module/trans/rtrans.py	(original)
+++ pypy/branch/njriley-trans/pypy/module/trans/rtrans.py	Fri May 26 22:30:57 2006
@@ -8,6 +8,9 @@
 def end():
     os.write(2, '= rtrans.end\n')
 
+def retry():
+    os.write(2, '= rtrans.retry\n')
+
 def abort():
     os.write(2, '= rtrans.abort\n')
 

Modified: pypy/branch/njriley-trans/pypy/rpython/module/ll_trans.py
==============================================================================
--- pypy/branch/njriley-trans/pypy/rpython/module/ll_trans.py	(original)
+++ pypy/branch/njriley-trans/pypy/rpython/module/ll_trans.py	Fri May 26 22:30:57 2006
@@ -6,6 +6,10 @@
     pass
 ll_trans_end.suggested_primitive = True
 
+def ll_trans_retry():
+    pass
+ll_trans_retry.suggested_primitive = True
+
 def ll_trans_abort():
     pass
 ll_trans_abort.suggested_primitive = True

Modified: pypy/branch/njriley-trans/pypy/translator/c/extfunc.py
==============================================================================
--- pypy/branch/njriley-trans/pypy/translator/c/extfunc.py	(original)
+++ pypy/branch/njriley-trans/pypy/translator/c/extfunc.py	Fri May 26 22:30:57 2006
@@ -57,6 +57,7 @@
     ll_thread.ll_thread_get_ident: 'LL_thread_get_ident',
     ll_trans.ll_trans_begin:   'LL_trans_begin',
     ll_trans.ll_trans_end:     'LL_trans_end',
+    ll_trans.ll_trans_retry:   'LL_trans_retry',
     ll_trans.ll_trans_abort:   'LL_trans_abort',
     ll_trans.ll_trans_pause:   'LL_trans_pause',
     ll_trans.ll_trans_unpause: 'LL_trans_unpause',

Modified: pypy/branch/njriley-trans/pypy/translator/c/src/ll_trans.h
==============================================================================
--- pypy/branch/njriley-trans/pypy/translator/c/src/ll_trans.h	(original)
+++ pypy/branch/njriley-trans/pypy/translator/c/src/ll_trans.h	Fri May 26 22:30:57 2006
@@ -4,6 +4,7 @@
 /* prototypes */
 void LL_trans_begin(void);
 void LL_trans_end(void);
+void LL_trans_retry(void);
 void LL_trans_abort(void);
 void LL_trans_pause(void);
 void LL_trans_unpause(void);
@@ -12,6 +13,7 @@
 void LL_trans_disable(void);
 int RPyTransPause(void);
 void RPyTransUnpause(int pause_state);
+void RPyTransSurroundSyscalls(int surround);
 
 /* implementations */
 
@@ -32,6 +34,12 @@
 }
 
 void
+LL_trans_retry(void)
+{
+	XACT_RETRY;
+}
+
+void
 LL_trans_abort(void)
 {
 	XACT_ABORT(&&abort);
@@ -55,6 +63,19 @@
 	XACT_UNPAUSE(pause_state);
 }
 
+void
+RPyTransSurroundSyscalls(int surround)
+{
+	if (surround) {
+		int pause_state;
+		XACT_PAUSE(pause_state);
+		set_auto_xact(1);
+		XACT_UNPAUSE(pause_state);
+	} else {
+		set_auto_xact(0);
+	}
+}
+
 static __thread int pause_state;
 
 void
@@ -100,16 +121,14 @@
 		assert(ret_val == 0);
 	}
 	XACT_BEGIN;
-	XACT_PAUSE(ret_val);
-	set_auto_xact(1);
-	XACT_UNPAUSE(ret_val);
+	RPyTransSurroundSyscalls(1);
 	XACT_END;
 }
 
 void
 LL_trans_disable(void)
 {
-	set_auto_xact(0);
+	RPyTransSurroundSyscalls(0);
 }
 
 int



More information about the Pypy-commit mailing list