[pypy-commit] pypy py3.5: hg merge default

rlamy pypy.commits at gmail.com
Mon Jan 30 11:14:00 EST 2017


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: py3.5
Changeset: r89839:f5231270d7c6
Date: 2017-01-30 16:13 +0000
http://bitbucket.org/pypy/pypy/changeset/f5231270d7c6/

Log:	hg merge default

diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py
--- a/pypy/module/cpyext/api.py
+++ b/pypy/module/cpyext/api.py
@@ -486,19 +486,23 @@
         return unwrapper
     return decorate
 
+def api_func_from_cdef(func, cdef, cts,
+        error=_NOT_SPECIFIED, header=DEFAULT_HEADER):
+    func._always_inline_ = 'try'
+    cdecl = cts.parse_func(cdef)
+    RESULT = cdecl.get_llresult(cts)
+    api_function = ApiFunction(
+        cdecl.get_llargs(cts), RESULT, func,
+        error=_compute_error(error, RESULT), cdecl=cdecl)
+    FUNCTIONS_BY_HEADER[header][cdecl.name] = api_function
+    unwrapper = api_function.get_unwrapper()
+    unwrapper.func = func
+    unwrapper.api_func = api_function
+    return unwrapper
+
 def api_decl(cdef, cts, error=_NOT_SPECIFIED, header=DEFAULT_HEADER):
     def decorate(func):
-        func._always_inline_ = 'try'
-        cdecl = cts.parse_func(cdef)
-        RESULT = cdecl.get_llresult(cts)
-        api_function = ApiFunction(
-            cdecl.get_llargs(cts), RESULT, func,
-            error=_compute_error(error, RESULT), cdecl=cdecl)
-        FUNCTIONS_BY_HEADER[header][cdecl.name] = api_function
-        unwrapper = api_function.get_unwrapper()
-        unwrapper.func = func
-        unwrapper.api_func = api_function
-        return unwrapper
+        return api_func_from_cdef(func, cdef, cts, error=error, header=header)
     return decorate
 
 def slot_function(argtypes, restype, error=_NOT_SPECIFIED):
@@ -681,7 +685,17 @@
                              % (cpyname, ))
 build_exported_objects()
 
-cts = CTypeSpace(headers=['sys/types.h', 'stdarg.h', 'stdio.h', 'stddef.h'])
+
+class CpyextTypeSpace(CTypeSpace):
+    def decl(self, cdef, error=_NOT_SPECIFIED, header=DEFAULT_HEADER):
+        def decorate(func):
+            return api_func_from_cdef(
+                    func, cdef, self, error=error, header=header)
+        return decorate
+
+
+CPYEXT_BASE_HEADERS = ['sys/types.h', 'stdarg.h', 'stdio.h', 'stddef.h']
+cts = CpyextTypeSpace(headers=CPYEXT_BASE_HEADERS)
 cts.parse_header(parse_dir / 'cpyext_object.h')
 
 Py_ssize_t = cts.gettype('Py_ssize_t')
diff --git a/pypy/module/cpyext/methodobject.py b/pypy/module/cpyext/methodobject.py
--- a/pypy/module/cpyext/methodobject.py
+++ b/pypy/module/cpyext/methodobject.py
@@ -11,7 +11,7 @@
     CONST_STRING, METH_CLASS, METH_COEXIST, METH_KEYWORDS, METH_NOARGS, METH_O,
     METH_STATIC, METH_VARARGS, PyObject, PyObjectFields, bootstrap_function,
     build_type_checkers, cpython_api, cpython_struct, generic_cpy_call,
-    PyTypeObjectPtr, slot_function, cts, api_decl)
+    PyTypeObjectPtr, slot_function, cts)
 from pypy.module.cpyext.pyobject import (
     Py_DecRef, from_ref, make_ref, as_pyobj, make_typedescr)
 
@@ -272,7 +272,7 @@
 def PyCFunction_NewEx(space, ml, w_self, w_name):
     return space.wrap(W_PyCFunctionObject(space, ml, w_self, w_name))
 
- at api_decl("PyCFunction PyCFunction_GetFunction(PyObject *)", cts)
+ at cts.decl("PyCFunction PyCFunction_GetFunction(PyObject *)")
 def PyCFunction_GetFunction(space, w_obj):
     try:
         cfunction = space.interp_w(W_PyCFunctionObject, w_obj)


More information about the pypy-commit mailing list