from rpython.rtyper.lltypesystem import lltype from pypy.interpreter.generator import GeneratorIterator, Coroutine from pypy.module.cpyext.api import (build_type_checkers, cts, parse_dir, bootstrap_function, slot_function) from pypy.module.cpyext.pyobject import PyObject, make_typedescr, as_pyobj from pypy.module.cpyext.object import _dealloc cts.parse_header(parse_dir / 'cpyext_genobject.h') @bootstrap_function def init_genobject(space): make_typedescr(GeneratorIterator.typedef, basestruct=cts.gettype('PyGenObject'), attach=gi_attach, dealloc=gi_dealloc) PyGen_Check, PyGen_CheckExact = build_type_checkers("Gen", GeneratorIterator) _, PyCoro_CheckExact = build_type_checkers("Coro", Coroutine) def gi_attach(space, py_obj, w_obj, w_userdata=None): assert isinstance(w_obj, GeneratorIterator) cts.cast('PyGenObject*', py_obj).c_gi_code = as_pyobj(space, w_obj.pycode) def gi_realize(space, py_obj): raise NotImplementedError( "PyPy doesn't support creation of generators from the C-API.")
from pypy.module.cpyext.modsupport import convert_method_defs from pypy.module.cpyext.pyobject import ( PyObject, make_ref, from_ref, get_typedescr, make_typedescr, track_reference, decref, as_pyobj) from pypy.module.cpyext.slotdefs import ( slotdefs_for_tp_slots, slotdefs_for_wrappers, get_slot_tp_function, llslot) from pypy.module.cpyext.state import State from pypy.module.cpyext.structmember import PyMember_GetOne, PyMember_SetOne from pypy.module.cpyext.typeobjectdefs import ( PyGetSetDef, PyMemberDef, PyMappingMethods, PyNumberMethods, PySequenceMethods, PyBufferProcs) from pypy.objspace.std.typeobject import W_TypeObject, find_best_base cts.parse_header(parse_dir / "cpyext_descrobject.h") #WARN_ABOUT_MISSING_SLOT_FUNCTIONS = False PyType_Check, PyType_CheckExact = build_type_checkers_flags("Type") PyHeapTypeObject = cts.gettype('PyHeapTypeObject *') class W_GetSetPropertyEx(GetSetProperty): def __init__(self, getset, w_type): self.getset = getset self.w_type = w_type doc = fset = fget = fdel = None if doc: # XXX dead code?
parse_dir) from pypy.module.cpyext.pyerrors import PyErr_BadArgument from pypy.module.cpyext.pyobject import (PyObject, PyObjectP, Py_DecRef, make_ref, from_ref, track_reference, make_typedescr, get_typedescr) from pypy.module.cpyext.bytesobject import PyString_Check from pypy.module.sys.interp_encoding import setdefaultencoding from pypy.module._codecs.interp_codecs import CodecState from pypy.objspace.std import unicodeobject from rpython.rlib import rstring, runicode from rpython.tool.sourcetools import func_renamer import sys ## See comment in bytesobject.py. cts.parse_header(parse_dir / 'cpyext_unicodeobject.h') PyUnicodeObject = cts.gettype('PyUnicodeObject*') Py_UNICODE = cts.gettype('Py_UNICODE') @bootstrap_function def init_unicodeobject(space): make_typedescr(space.w_unicode.layout.typedef, basestruct=PyUnicodeObject.TO, attach=unicode_attach, dealloc=unicode_dealloc, realize=unicode_realize) # Buffer for the default encoding (used by PyUnicde_GetDefaultEncoding) DEFAULT_ENCODING_SIZE = 100
from rpython.rlib.rarithmetic import widen from pypy.module.cpyext.pyobject import (PyObject, make_ref, make_typedescr, decref, as_pyobj, incref) from pypy.module.cpyext.api import (cpython_api, CANNOT_FAIL, cpython_struct, PyObjectFields, cts, parse_dir, bootstrap_function, slot_function, Py_TPFLAGS_HEAPTYPE) from pypy.module.cpyext.import_ import PyImport_Import from pypy.module.cpyext.typeobject import PyTypeObjectPtr from pypy.interpreter.error import OperationError from pypy.module.__pypy__.interp_pypydatetime import (W_DateTime_Date, W_DateTime_Time, W_DateTime_Delta) from rpython.tool.sourcetools import func_renamer cts.parse_header(parse_dir / 'cpyext_datetime.h') PyDateTime_CAPI = cts.gettype('PyDateTime_CAPI') datetimeAPI_global = [] @cpython_api([], lltype.Ptr(PyDateTime_CAPI)) def _PyDateTime_Import(space): if len(datetimeAPI_global) > 0: return datetimeAPI_global[0] datetimeAPI = lltype.malloc(PyDateTime_CAPI, flavor='raw', track_allocation=False) w_datetime = PyImport_Import(space, space.newtext("datetime"))
from pypy.module.cpyext.api import (cpython_api, CANNOT_FAIL, Py_MAX_FMT, Py_MAX_NDIMS, build_type_checkers, Py_ssize_tP, cts, parse_dir, bootstrap_function, Py_bufferP, slot_function) from pypy.module.cpyext.pyobject import (PyObject, make_ref, decref, from_ref, make_typedescr, get_typedescr, track_reference) from rpython.rtyper.lltypesystem import lltype, rffi from rpython.rlib.rarithmetic import widen from pypy.objspace.std.memoryobject import W_MemoryView from pypy.module.cpyext.object import _dealloc from pypy.module.cpyext.import_ import PyImport_Import from pypy.module.cpyext.buffer import CPyBuffer, fq cts.parse_header(parse_dir / 'cpyext_memoryobject.h') PyMemoryViewObject = cts.gettype('PyMemoryViewObject*') PyMemoryView_Check, PyMemoryView_CheckExact = build_type_checkers("MemoryView") @bootstrap_function def init_memoryobject(space): "Type description of PyDictObject" make_typedescr( W_MemoryView.typedef, basestruct=PyMemoryViewObject.TO, attach=memory_attach, dealloc=memory_dealloc, realize=memory_realize, )
METH_NOARGS, METH_O, parse_dir, bootstrap_function, generic_cpy_call, generic_cpy_call_dont_convert_result, slot_function) from pypy.module.cpyext.pyobject import PyObject, as_pyobj, make_typedescr from pypy.interpreter.module import Module from pypy.module.cpyext.methodobject import (W_PyCFunctionObject, PyCFunction_NewEx, PyDescr_NewMethod, PyMethodDef, PyDescr_NewClassMethod, PyStaticMethod_New) from pypy.module.cpyext.pyerrors import PyErr_BadInternalCall from pypy.module.cpyext.state import State from pypy.interpreter.error import oefmt cts.parse_header(parse_dir / 'cpyext_moduleobject.h') PyModuleDef = cts.gettype('PyModuleDef *') PyModuleObject = cts.gettype('PyModuleObject *') PyModuleDef_Slot = cts.gettype('PyModuleDef_Slot') @bootstrap_function def init_moduleobject(space): make_typedescr(Module.typedef, basestruct=PyModuleObject.TO, dealloc=module_dealloc) @slot_function([PyObject], lltype.Void) def module_dealloc(space, py_obj): py_module = rffi.cast(PyModuleObject, py_obj)