[pypy-commit] pypy memoryview-attributes: defining bf_getbuffer to get the buffer_test.c going. it dispatches to wrap_getbuffer (maybe not what we want)
plan_rich
pypy.commits at gmail.com
Thu Aug 18 10:38:29 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: memoryview-attributes
Changeset: r86275:dbd4120ff2b0
Date: 2016-08-18 16:37 +0200
http://bitbucket.org/pypy/pypy/changeset/dbd4120ff2b0/
Log: defining bf_getbuffer to get the buffer_test.c going. it dispatches
to wrap_getbuffer (maybe not what we want)
diff --git a/pypy/module/cpyext/memoryobject.py b/pypy/module/cpyext/memoryobject.py
--- a/pypy/module/cpyext/memoryobject.py
+++ b/pypy/module/cpyext/memoryobject.py
@@ -12,6 +12,7 @@
@cpython_api([PyObject], PyObject)
def PyMemoryView_GET_BASE(space, w_obj):
# return the obj field of the Py_buffer created by PyMemoryView_GET_BUFFER
+ import pdb; pdb.set_trace()
raise NotImplementedError
@cpython_api([PyObject], lltype.Ptr(Py_buffer), error=CANNOT_FAIL)
diff --git a/pypy/module/cpyext/slotdefs.py b/pypy/module/cpyext/slotdefs.py
--- a/pypy/module/cpyext/slotdefs.py
+++ b/pypy/module/cpyext/slotdefs.py
@@ -22,6 +22,9 @@
from rpython.rlib.objectmodel import specialize
from rpython.tool.sourcetools import func_renamer
from rpython.rtyper.annlowlevel import llhelper
+from pypy.module.sys.version import CPYTHON_VERSION
+
+PY3 = CPYTHON_VERSION[0] == 3
# XXX: Also defined in object.h
Py_LT = 0
@@ -313,6 +316,10 @@
def get_raw_address(self):
return rffi.cast(rffi.CCHARP, self.ptr)
+ def getformat(self):
+ import pdb; pdb.set_trace()
+ return 'i'
+
def wrap_getreadbuffer(space, w_self, w_args, func):
func_target = rffi.cast(readbufferproc, func)
with lltype.scoped_alloc(rffi.VOIDPP.TO, 1) as ptr:
@@ -322,6 +329,10 @@
space.fromcache(State).check_and_raise_exception(always=True)
return space.newbuffer(CPyBuffer(ptr[0], size, w_self))
+def wrap_getbuffer(space, w_self, w_args, func):
+ import pdb; pdb.set_trace()
+ return space.newbuffer(CPyBuffer(ptr[0], size, w_self))
+
def get_richcmp_func(OP_CONST):
def inner(space, w_self, w_args, func):
func_target = rffi.cast(richcmpfunc, func)
@@ -486,7 +497,8 @@
def slot_tp_getattro(space, w_self, w_name):
return space.call_function(getattr_fn, w_self, w_name)
api_func = slot_tp_getattro.api_func
-
+ elif name == 'tp_as_buffer':
+ raise NotImplementedError
elif name == 'tp_call':
call_fn = w_type.getdictvalue(space, '__call__')
if call_fn is None:
@@ -850,9 +862,16 @@
slotdefs = eval(slotdefs_str)
# PyPy addition
slotdefs += (
- TPSLOT("__buffer__", "tp_as_buffer.c_bf_getreadbuffer", None, "wrap_getreadbuffer", ""),
+ # XXX that might not be what we want!
+ TPSLOT("__buffer__", "tp_as_buffer.c_bf_getbuffer", None, "wrap_getbuffer", ""),
)
+if not PY3:
+ slotdefs += (
+ TPSLOT("__buffer__", "tp_as_buffer.c_bf_getreadbuffer", None, "wrap_getreadbuffer", ""),
+ )
+
+
# partial sort to solve some slot conflicts:
# Number slots before Mapping slots before Sequence slots.
# These are the only conflicts between __name__ methods
diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py
--- a/pypy/module/cpyext/typeobject.py
+++ b/pypy/module/cpyext/typeobject.py
@@ -774,6 +774,8 @@
pto.c_tp_setattro = base.c_tp_setattro
if not pto.c_tp_getattro:
pto.c_tp_getattro = base.c_tp_getattro
+ if not pto.c_tp_as_buffer:
+ pto.c_tp_as_buffer = base.c_tp_as_buffer
finally:
Py_DecRef(space, base_pyo)
diff --git a/rpython/rlib/buffer.py b/rpython/rlib/buffer.py
--- a/rpython/rlib/buffer.py
+++ b/rpython/rlib/buffer.py
@@ -60,13 +60,13 @@
raise ValueError("no raw buffer")
def getformat(self):
- return 'B'
+ raise NotImplementedError
def getitemsize(self):
- return 1
+ raise NotImplementedError
def getndim(self):
- return 1
+ raise NotImplementedError
def getshape(self):
return [self.getlength()]
More information about the pypy-commit
mailing list