Esempio n. 1
0
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.")
Esempio n. 2
0
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?
Esempio n. 3
0
                                    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
Esempio n. 4
0
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"))
Esempio n. 5
0
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,
    )
Esempio n. 6
0
                                    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)