from pypy.interpreter.function import ClassMethod, Method, StaticMethod from pypy.interpreter.gateway import interp2app from pypy.interpreter.typedef import (GetSetProperty, TypeDef, interp_attrproperty, interp_attrproperty_w) from pypy.objspace.std.typeobject import W_TypeObject from pypy.module.cpyext.api import (CONST_STRING, METH_CLASS, METH_COEXIST, METH_KEYWORDS, METH_NOARGS, METH_O, METH_STATIC, METH_VARARGS, PyObject, bootstrap_function, build_type_checkers, cpython_api, generic_cpy_call, PyTypeObjectPtr, slot_function, cts) from pypy.module.cpyext.pyobject import (Py_DecRef, from_ref, make_ref, as_pyobj, make_typedescr) PyMethodDef = cts.gettype('PyMethodDef') PyCFunction = cts.gettype('PyCFunction') PyCFunctionKwArgs = cts.gettype('PyCFunctionWithKeywords') PyCFunctionObject = cts.gettype('PyCFunctionObject*') @bootstrap_function def init_methodobject(space): make_typedescr(W_PyCFunctionObject.typedef, basestruct=PyCFunctionObject.TO, attach=cfunction_attach, dealloc=cfunction_dealloc) def cfunction_attach(space, py_obj, w_obj, w_userdata=None): assert isinstance(w_obj, W_PyCFunctionObject)
INTP_real, CONST_WSTRING, slot_function, cts, parse_dir) from pypy.module.cpyext.pyerrors import PyErr_BadArgument from pypy.module.cpyext.pyobject import (PyObject, PyObjectP, 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 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 default_encoding = lltype.malloc(rffi.CCHARP.TO,
build_type_checkers, Py_ssize_tP, cts, parse_dir, bootstrap_function, Py_bufferP, slot_function, PyBUF_READ, PyBUF_WRITE) 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.interpreter.error import oefmt 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") FORMAT_ALLOCATED = 0x04 @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,
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) if py_module.c_md_state:
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.name = rffi.charp2str(getset.c_name) self.w_type = w_type doc = set = get = None if doc: # XXX dead code? doc = rffi.charp2str(getset.c_doc) if getset.c_get: get = GettersAndSetters.getter.im_func if getset.c_set: set = GettersAndSetters.setter.im_func
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 from pypy.module.cpyext.state import State cts.parse_header(parse_dir / 'cpyext_datetime.h') PyDateTime_CAPI = cts.gettype('PyDateTime_CAPI') @cpython_api([], lltype.Ptr(PyDateTime_CAPI)) def _PyDateTime_Import(space): state = space.fromcache(State) if len(state.datetimeAPI) > 0: return state.datetimeAPI[0] datetimeAPI = lltype.malloc(PyDateTime_CAPI, flavor='raw', track_allocation=False) w_datetime = PyImport_Import(space, space.newtext("datetime")) w_type = space.getattr(w_datetime, space.newtext("date")) datetimeAPI.c_DateType = rffi.cast( PyTypeObjectPtr, make_ref(space, w_type))