[pypy-svn] r72642 - pypy/branch/cpython-extension/pypy/module/cpyext

xoraxax at codespeak.net xoraxax at codespeak.net
Tue Mar 23 18:09:32 CET 2010


Author: xoraxax
Date: Tue Mar 23 18:09:30 2010
New Revision: 72642

Modified:
   pypy/branch/cpython-extension/pypy/module/cpyext/api.py
   pypy/branch/cpython-extension/pypy/module/cpyext/methodobject.py
Log:
Move generic_cpy_call and from_ref_ex from methodsobject to api.

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/api.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/api.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/api.py	Tue Mar 23 18:09:30 2010
@@ -393,3 +393,42 @@
     initfunc.call(lltype.Void)
     state.check_and_raise_exception()
 
+def generic_cpy_call(space, func, *args, **kwargs):
+    from pypy.module.cpyext.macros import Py_DECREF
+    decref_args = kwargs.pop("decref_args", True)
+    assert not kwargs
+    boxed_args = []
+    for arg in args: # XXX ur needed
+        if isinstance(arg, W_Root) or arg is None:
+            boxed_args.append(make_ref(space, arg))
+        else:
+            boxed_args.append(arg)
+    result = func(*boxed_args)
+    try:
+        FT = lltype.typeOf(func).TO
+        if FT.RESULT is not lltype.Void:
+            ret = from_ref_ex(space, result)
+            Py_DECREF(space, ret)
+            return ret
+    finally:
+        if decref_args:
+            for arg in args: # XXX ur needed
+                if arg is not None and isinstance(arg, W_Root):
+                    Py_DECREF(space, arg)
+
+def from_ref_ex(space, result):
+    try:
+        ret = from_ref(space, result)
+    except NullPointerException:
+        state = space.fromcache(State)
+        state.check_and_raise_exception()
+        assert False, "NULL returned but no exception set"
+    except InvalidPointerException:
+        if not we_are_translated():
+            import sys
+            print >>sys.stderr, "Calling a C function return an invalid PyObject" \
+                    " pointer."
+        raise
+    return ret
+
+

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/methodobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/methodobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/methodobject.py	Tue Mar 23 18:09:30 2010
@@ -6,50 +6,12 @@
 from pypy.interpreter.gateway import interp2app, unwrap_spec
 from pypy.interpreter.function import BuiltinFunction, Method
 from pypy.rpython.lltypesystem import rffi, lltype
-from pypy.module.cpyext.api import PyObject, from_ref, NullPointerException, \
-        InvalidPointerException, make_ref
+from pypy.module.cpyext.api import PyObject, from_ref, \
+        make_ref, generic_cpy_call, from_ref_ex
 from pypy.module.cpyext.state import State
-from pypy.module.cpyext.macros import Py_DECREF
 from pypy.rlib.objectmodel import we_are_translated
 
 
-def from_ref_ex(space, result):
-    try:
-        ret = from_ref(space, result)
-    except NullPointerException:
-        state = space.fromcache(State)
-        state.check_and_raise_exception()
-        assert False, "NULL returned but no exception set"
-    except InvalidPointerException:
-        if not we_are_translated():
-            import sys
-            print >>sys.stderr, "Calling a C function return an invalid PyObject" \
-                    " pointer."
-        raise
-    return ret
-
-def generic_cpy_call(space, func, *args, **kwargs):
-    decref_args = kwargs.pop("decref_args", True)
-    assert not kwargs
-    boxed_args = []
-    for arg in args: # XXX ur needed
-        if isinstance(arg, W_Root) or arg is None:
-            boxed_args.append(make_ref(space, arg))
-        else:
-            boxed_args.append(arg)
-    result = func(*boxed_args)
-    try:
-        FT = lltype.typeOf(func).TO
-        if FT.RESULT is not lltype.Void:
-            ret = from_ref_ex(space, result)
-            Py_DECREF(space, ret)
-            return ret
-    finally:
-        if decref_args:
-            for arg in args: # XXX ur needed
-                if arg is not None and isinstance(arg, W_Root):
-                    Py_DECREF(space, arg)
-
 # XXX use Function as a parent class?
 class W_PyCFunctionObject(Wrappable):
     def __init__(self, space, ml, w_self):



More information about the Pypy-commit mailing list