[pypy-svn] r47310 - in pypy/dist/pypy/rlib: . test

fijal at codespeak.net fijal at codespeak.net
Mon Oct 8 20:45:51 CEST 2007


Author: fijal
Date: Mon Oct  8 20:45:51 2007
New Revision: 47310

Modified:
   pypy/dist/pypy/rlib/libffi.py
   pypy/dist/pypy/rlib/test/test_libffi.py
Log:
Move slightly into rpython direction. Need help though


Modified: pypy/dist/pypy/rlib/libffi.py
==============================================================================
--- pypy/dist/pypy/rlib/libffi.py	(original)
+++ pypy/dist/pypy/rlib/libffi.py	Mon Oct  8 20:45:51 2007
@@ -4,6 +4,7 @@
 
 from pypy.rpython.tool import rffi_platform
 from pypy.rpython.lltypesystem import lltype, rffi
+from pypy.rlib.unroll import unrolling_iterable
 
 includes = ['dlfcn.h', 'ffi.h']
 
@@ -73,9 +74,6 @@
     rffi.LONG   : ffi_type_slong,
     lltype.Void : ffi_type_void,
     # some shortcuts
-    None        : ffi_type_void,
-    float       : ffi_type_double,
-    int         : ffi_type_sint,
     }
 
 def external(name, args, result):
@@ -137,7 +135,8 @@
         TP = rffi.CFixedArray(FFI_TYPE_P, argnum)
         self.ll_argtypes = lltype.malloc(TP, flavor='raw')
         self.argtypes = argtypes
-        for i, argtype in enumerate(argtypes):
+        for i in unrolling_iterable(range(len(argtypes))):
+            argtype = argtypes[i]
             self.ll_argtypes[i] = TYPE_MAP[argtype]
         TP = rffi.CFixedArray(rffi.VOIDP, argnum)
         self.ll_args = lltype.malloc(TP, flavor='raw')
@@ -191,3 +190,4 @@
 
     def getpointer(self, name, argtypes, restype):
         return FuncPtr(dlsym(self.lib, name), argtypes, restype)
+    getpointer._annspecialcase_ = 'specialize:arg(2, 3)'

Modified: pypy/dist/pypy/rlib/test/test_libffi.py
==============================================================================
--- pypy/dist/pypy/rlib/test/test_libffi.py	(original)
+++ pypy/dist/pypy/rlib/test/test_libffi.py	Mon Oct  8 20:45:51 2007
@@ -5,7 +5,7 @@
 from pypy.rpython.test.test_llinterp import interpret
 from pypy.rlib.libffi import CDLL, dlopen
 from pypy.rpython.lltypesystem.ll2ctypes import ALLOCATED
-from pypy.rpython.lltypesystem import rffi
+from pypy.rpython.lltypesystem import rffi, lltype
 import os, sys
 import py
 
@@ -34,8 +34,8 @@
 
     def test_library_get_func(self):
         lib = self.get_libc()
-        ptr = lib.getpointer('time', [], None)
-        py.test.raises(KeyError, lib.getpointer, 'xxxxxxxxxxxxxxx', [], None)
+        ptr = lib.getpointer('time', [], lltype.Void)
+        py.test.raises(KeyError, lib.getpointer, 'xxxxxxxxxxxxxxx', [], lltype.Void)
         del lib
 
     def test_library_func_call(self):
@@ -54,3 +54,12 @@
         pow = libm.getpointer('pow', [rffi.DOUBLE, rffi.DOUBLE], rffi.DOUBLE)
         assert pow.call((2.0, 2.0)) == 4.0
         assert pow.call((3.0, 3.0)) == 27.0
+
+    def test_compile(self):
+        py.test.skip("in-progress")
+        def f(x, y):
+            libm = CDLL('libm.so')
+            c_pow = libm.getpointer('pow', (rffi.DOUBLE, rffi.DOUBLE), rffi.DOUBLE)
+            return c_pow.call((x, y))
+
+        interpret(f, [2.0, 4.0])



More information about the Pypy-commit mailing list