[pypy-svn] r77712 - in pypy/branch/jitffi/pypy: module/_ffi module/pypyjit rlib

antocuni at codespeak.net antocuni at codespeak.net
Fri Oct 8 11:58:18 CEST 2010


Author: antocuni
Date: Fri Oct  8 11:58:17 2010
New Revision: 77712

Modified:
   pypy/branch/jitffi/pypy/module/_ffi/interp_ffi.py
   pypy/branch/jitffi/pypy/module/pypyjit/policy.py
   pypy/branch/jitffi/pypy/rlib/libffi.py
Log:
be more jit-friendly


Modified: pypy/branch/jitffi/pypy/module/_ffi/interp_ffi.py
==============================================================================
--- pypy/branch/jitffi/pypy/module/_ffi/interp_ffi.py	(original)
+++ pypy/branch/jitffi/pypy/module/_ffi/interp_ffi.py	Fri Oct  8 11:58:17 2010
@@ -47,6 +47,9 @@
 # ========================================================================
 
 class W_FuncPtr(Wrappable):
+
+    _immutable_fields_ = ['func']
+    
     def __init__(self, func):
         self.func = func
 
@@ -68,6 +71,7 @@
 
     @unwrap_spec('self', ObjSpace, 'args_w')
     def call(self, space, args_w):
+        self = jit.hint(self, promote=True)
         argchain = self.build_argchain(space, self.func.argtypes, args_w)
         reskind = libffi.types.getkind(self.func.restype)
         if reskind == 'i':

Modified: pypy/branch/jitffi/pypy/module/pypyjit/policy.py
==============================================================================
--- pypy/branch/jitffi/pypy/module/pypyjit/policy.py	(original)
+++ pypy/branch/jitffi/pypy/module/pypyjit/policy.py	Fri Oct  8 11:58:17 2010
@@ -11,7 +11,7 @@
         if '.' in modname:
             modname, _ = modname.split('.', 1)
         if modname in ['pypyjit', 'signal', 'micronumpy', 'math', 'exceptions',
-                       'imp', 'sys', 'array']:
+                       'imp', 'sys', 'array', '_ffi']:
             return True
         return False
 

Modified: pypy/branch/jitffi/pypy/rlib/libffi.py
==============================================================================
--- pypy/branch/jitffi/pypy/rlib/libffi.py	(original)
+++ pypy/branch/jitffi/pypy/rlib/libffi.py	Fri Oct  8 11:58:17 2010
@@ -32,8 +32,9 @@
         cls.ulong = clibffi.cast_type_to_ffitype(rffi.ULONG)
         del cls._import
 
-    @classmethod
-    def getkind(cls, ffitype):
+    @staticmethod
+    @jit.purefunction
+    def getkind(ffitype):
         # XXX: move this function outside the jit
         from pypy.jit.backend.llsupport.ffisupport import get_ffi_type_kind
         return get_ffi_type_kind(ffitype)



More information about the Pypy-commit mailing list