[pypy-commit] pypy ffi-backend: load_function().
arigo
noreply at buildbot.pypy.org
Wed Jul 4 08:29:27 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: ffi-backend
Changeset: r55919:6da597c57c43
Date: 2012-07-04 08:28 +0200
http://bitbucket.org/pypy/pypy/changeset/6da597c57c43/
Log: load_function().
diff --git a/pypy/module/_cffi_backend/libraryobj.py b/pypy/module/_cffi_backend/libraryobj.py
--- a/pypy/module/_cffi_backend/libraryobj.py
+++ b/pypy/module/_cffi_backend/libraryobj.py
@@ -4,7 +4,10 @@
from pypy.interpreter.gateway import interp2app, unwrap_spec
from pypy.interpreter.typedef import TypeDef
from pypy.rpython.lltypesystem import lltype, rffi
-from pypy.rlib.rdynload import DLLHANDLE, dlopen, dlclose, DLOpenError
+from pypy.rlib.rdynload import DLLHANDLE, dlopen, dlsym, dlclose, DLOpenError
+
+from pypy.module._cffi_backend.cdataobj import W_CData
+from pypy.module._cffi_backend.ctypefunc import W_CTypeFunc
class W_Library(Wrappable):
@@ -31,10 +34,21 @@
space = self.space
return space.wrap("<clibrary '%s'>" % self.name)
+ @unwrap_spec(ctypefunc=W_CTypeFunc, name=str)
+ def load_function(self, ctypefunc, name):
+ space = self.space
+ cdata = dlsym(self.handle, name)
+ if not cdata:
+ raise operationerrfmt(space.w_KeyError,
+ "function '%s' not found in library '%s'",
+ name, self.name)
+ return W_CData(space, rffi.cast(rffi.CCHARP, cdata), ctypefunc)
+
W_Library.typedef = TypeDef(
'_cffi_backend.Library',
__repr__ = interp2app(W_Library.repr),
+ load_function = interp2app(W_Library.load_function),
)
W_Library.acceptable_as_base_class = False
More information about the pypy-commit
mailing list