[pypy-commit] pypy default: Replace @api_decl(..., cts) with @cts.decl(...)
rlamy
pypy.commits at gmail.com
Mon Jan 30 11:03:25 EST 2017
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch:
Changeset: r89837:6873f23470b6
Date: 2017-01-30 16:02 +0000
http://bitbucket.org/pypy/pypy/changeset/6873f23470b6/
Log: Replace @api_decl(..., cts) with @cts.decl(...)
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
@@ -483,19 +483,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):
@@ -676,7 +680,17 @@
% (cpyname, ))
build_exported_objects()
-cts = CTypeSpace(headers=['sys/types.h', 'stdarg.h', 'stdio.h', 'stddef.h'])
+
+class CpyextTypeSpace(CTypeSpace):
+ def decl(self, cdef):
+ 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)
@@ -282,7 +282,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