Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r70080:415ae19bb4d1
Date: 2014-03-18 21:56 -0700
http://bitbucket.org/pypy/pypy/changeset/415ae19bb4d1/
Log: kill W_Buffer
diff --git a/pypy/objspace/std/memoryview.py b/pypy/objspace/std/memoryview.py
--- a/pypy/objspace/std/memoryview.py
+++ b/pypy/objspace/std/memoryview.py
@@ -31,141 +31,6 @@
" slicing with a step"))
-class W_Buffer(W_Root):
- """Implement the built-in 'buffer' type as a wrapper around
- an interp-level buffer.
- """
-
- def __init__(self, buf):
- assert isinstance(buf, buffer.Buffer)
- self.buf = buf
-
- def buffer_w(self, space):
- return self.buf
-
- @staticmethod
- @unwrap_spec(offset=int, size=int)
- def descr_new_buffer(space, w_subtype, w_object, offset=0, size=-1):
- if space.isinstance_w(w_object, space.w_unicode):
- # unicode objects support the old buffer interface
- # but not the new buffer interface (change in python 2.7)
- from rpython.rlib.rstruct.unichar import pack_unichar, UNICODE_SIZE
- unistr = space.unicode_w(w_object)
- builder = StringBuilder(len(unistr) * UNICODE_SIZE)
- for unich in unistr:
- pack_unichar(unich, builder)
- from pypy.interpreter.buffer import StringBuffer
- buf = StringBuffer(builder.build())
- else:
- buf = space.buffer_w(w_object)
-
- if offset == 0 and size == -1:
- return W_Buffer(buf)
- # handle buffer slices
- if offset < 0:
- raise OperationError(space.w_ValueError,
- space.wrap("offset must be zero or positive"))
- if size < -1:
- raise OperationError(space.w_ValueError,
- space.wrap("size must be zero or positive"))
- if isinstance(buf, buffer.RWBuffer):
- buf = buffer.RWSubBuffer(buf, offset, size)
- else:
- buf = buffer.SubBuffer(buf, offset, size)
- return W_Buffer(buf)
-
- def descr_len(self, space):
- return space.wrap(self.buf.getlength())
-
- def descr_getitem(self, space, w_index):
- start, stop, step, size = space.decode_index4(w_index,
self.buf.getlength())
- if step == 0: # index only
- return space.wrapbytes(self.buf.getitem(start))
- res = self.buf.getslice(start, stop, step, size)
- return space.wrapbytes(res)
-
- @unwrap_spec(newstring='bufferstr')
- def descr_setitem(self, space, w_index, newstring):
- if not isinstance(self.buf, buffer.RWBuffer):
- raise OperationError(space.w_TypeError,
- space.wrap("buffer is read-only"))
- _buffer_setitem(space, self.buf, w_index, newstring)
-
- def descr_str(self, space):
- return space.wrap(self.buf.as_str())
-
- @unwrap_spec(other='bufferstr')
- def descr_add(self, space, other):
- return space.wrapbytes(self.buf.as_str() + other)
-
- def _make_descr__cmp(name):
- def descr__cmp(self, space, w_other):
- if not isinstance(w_other, W_Buffer):
- return space.w_NotImplemented
- # xxx not the most efficient implementation
- str1 = self.buf.as_str()
- str2 = w_other.buf.as_str()
- return space.wrap(getattr(operator, name)(str1, str2))
- descr__cmp.func_name = name
- return descr__cmp
-
- descr_eq = _make_descr__cmp('eq')
- descr_ne = _make_descr__cmp('ne')
- descr_lt = _make_descr__cmp('lt')
- descr_le = _make_descr__cmp('le')
- descr_gt = _make_descr__cmp('gt')
- descr_ge = _make_descr__cmp('ge')
-
- def descr_hash(self, space):
- return space.wrap(compute_hash(self.buf.as_str()))
-
- def descr_mul(self, space, w_times):
- # xxx not the most efficient implementation
- w_string = space.wrapbytes(self.buf.as_str())
- # use the __mul__ method instead of space.mul() so that we
- # return NotImplemented instead of raising a TypeError
- return space.call_method(w_string, '__mul__', w_times)
-
- def descr_repr(self, space):
- if isinstance(self.buf, buffer.RWBuffer):
- info = 'read-write buffer'
- else:
- info = 'read-only buffer'
- addrstring = self.getaddrstring(space)
-
- return space.wrap("<%s for 0x%s, size %d>" %
- (info, addrstring, self.buf.getlength()))
-
-W_Buffer.typedef = TypeDef(
- "buffer",
- __doc__ = """\
-buffer(object [, offset[, size]])
-
-Create a new buffer object which references the given object.
-The buffer will reference a slice of the target object from the
-start of the object (or at the specified offset). The slice will
-extend to the end of the target object (or with the specified size).
-""",
- __new__ = interp2app(W_Buffer.descr_new_buffer),
- __len__ = interp2app(W_Buffer.descr_len),
- __getitem__ = interp2app(W_Buffer.descr_getitem),
- __setitem__ = interp2app(W_Buffer.descr_setitem),
- __str__ = interp2app(W_Buffer.descr_str),
- __add__ = interp2app(W_Buffer.descr_add),
- __eq__ = interp2app(W_Buffer.descr_eq),
- __ne__ = interp2app(W_Buffer.descr_ne),
- __lt__ = interp2app(W_Buffer.descr_lt),
- __le__ = interp2app(W_Buffer.descr_le),
- __gt__ = interp2app(W_Buffer.descr_gt),
- __ge__ = interp2app(W_Buffer.descr_ge),
- __hash__ = interp2app(W_Buffer.descr_hash),
- __mul__ = interp2app(W_Buffer.descr_mul),
- __rmul__ = interp2app(W_Buffer.descr_mul),
- __repr__ = interp2app(W_Buffer.descr_repr),
-)
-W_Buffer.typedef.acceptable_as_base_class = False
-
-
class W_MemoryView(W_Root):
"""Implement the built-in 'memoryview' type as a wrapper around
an interp-level buffer.
diff --git a/pypy/objspace/std/objspace.py b/pypy/objspace/std/objspace.py
--- a/pypy/objspace/std/objspace.py
+++ b/pypy/objspace/std/objspace.py
@@ -25,7 +25,7 @@
from pypy.objspace.std.iterobject import W_AbstractSeqIterObject
from pypy.objspace.std.listobject import W_ListObject
from pypy.objspace.std.longobject import W_LongObject, newlong
-from pypy.objspace.std.memoryview import W_Buffer
+from pypy.objspace.std.memoryview import W_MemoryView
from pypy.objspace.std.noneobject import W_NoneObject
from pypy.objspace.std.objectobject import W_ObjectObject
from pypy.objspace.std.iterobject import W_SeqIterObject
@@ -341,7 +341,7 @@
return W_SeqIterObject(w_obj)
def newbuffer(self, w_obj):
- return W_Buffer(w_obj)
+ return W_MemoryView(w_obj)
def type(self, w_obj):
jit.promote(w_obj.__class__)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit