Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r58647:e3a20a600eaf
Date: 2012-10-31 17:47 +0100
http://bitbucket.org/pypy/pypy/changeset/e3a20a600eaf/

Log:    Hopefully, fixes for 'test_buffer' after O2 or Ojit translation.
        Hard to test...

diff --git a/pypy/module/_cffi_backend/cbuffer.py 
b/pypy/module/_cffi_backend/cbuffer.py
--- a/pypy/module/_cffi_backend/cbuffer.py
+++ b/pypy/module/_cffi_backend/cbuffer.py
@@ -1,4 +1,5 @@
 from pypy.interpreter.error import operationerrfmt
+from pypy.interpreter.baseobjspace import Wrappable
 from pypy.interpreter.buffer import RWBuffer
 from pypy.interpreter.gateway import unwrap_spec, interp2app
 from pypy.interpreter.typedef import TypeDef
@@ -35,15 +36,37 @@
         for i in range(len(string)):
             raw_cdata[i] = string[i]
 
-LLBuffer.typedef = TypeDef(
+
+class MiniBuffer(Wrappable):
+    # a different subclass of Wrappable for the MiniBuffer, because we
+    # want a slightly different (simplified) API at the level of Python.
+
+    def __init__(self, buffer):
+        self.buffer = buffer
+
+    def descr_len(self, space):
+        return self.buffer.descr_len(space)
+
+    def descr_getitem(self, space, w_index):
+        return self.buffer.descr_getitem(space, w_index)
+
+    @unwrap_spec(newstring='bufferstr')
+    def descr_setitem(self, space, w_index, newstring):
+        self.buffer.descr_setitem(space, w_index, newstring)
+
+    def descr__buffer__(self, space):
+        return self.buffer.descr__buffer__(space)
+
+
+MiniBuffer.typedef = TypeDef(
     "buffer",
     __module__ = "_cffi_backend",
-    __len__ = interp2app(RWBuffer.descr_len),
-    __getitem__ = interp2app(RWBuffer.descr_getitem),
-    __setitem__ = interp2app(RWBuffer.descr_setitem),
-    __buffer__ = interp2app(RWBuffer.descr__buffer__),
+    __len__ = interp2app(MiniBuffer.descr_len),
+    __getitem__ = interp2app(MiniBuffer.descr_getitem),
+    __setitem__ = interp2app(MiniBuffer.descr_setitem),
+    __buffer__ = interp2app(MiniBuffer.descr__buffer__),
     )
-LLBuffer.typedef.acceptable_as_base_class = False
+MiniBuffer.typedef.acceptable_as_base_class = False
 
 
 @unwrap_spec(cdata=cdataobj.W_CData, size=int)
@@ -63,4 +86,4 @@
         raise operationerrfmt(space.w_TypeError,
                               "don't know the size pointed to by '%s'",
                               ctype.name)
-    return space.wrap(LLBuffer(cdata._cdata, size))
+    return space.wrap(MiniBuffer(LLBuffer(cdata._cdata, size)))
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to