Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r70069:fb381945ef16
Date: 2014-03-18 15:23 -0700
http://bitbucket.org/pypy/pypy/changeset/fb381945ef16/
Log: merge default
diff --git a/lib-python/2.7/test/test_memoryview.py
b/lib-python/2.7/test/test_memoryview.py
--- a/lib-python/2.7/test/test_memoryview.py
+++ b/lib-python/2.7/test/test_memoryview.py
@@ -171,7 +171,7 @@
# very inconsisten on CPython. In PyPy, memoryview supports
# the buffer interface, and thus the following comparison
# succeeds. See also the comment in
- #
pypy.modules.__builtin__.interp_memoryview.W_MemoryView.descr_buffer
+ # pypy.objspace.std.memoryview.W_MemoryView.descr_buffer
#
# Comparison with objects which don't support the buffer API
self.assertFalse(m == u"abcdef", "%s %s" % (self, tp))
diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -194,11 +194,6 @@
return None
def buffer_w(self, space):
- w_impl = space.lookup(self, '__buffer__')
- if w_impl is not None:
- w_result = space.get_and_call_function(w_impl, self)
- if space.isinstance_w(w_result, space.w_buffer):
- return w_result.buf
self._typed_unwrap_error(space, "buffer")
def bytes_w(self, space):
diff --git a/pypy/interpreter/buffer.py b/pypy/interpreter/buffer.py
--- a/pypy/interpreter/buffer.py
+++ b/pypy/interpreter/buffer.py
@@ -7,8 +7,7 @@
class Buffer(object):
"""Abstract base class for buffers."""
-
- __slots__ = () # no extra slot here
+ __slots__ = []
def getlength(self):
raise NotImplementedError
@@ -29,14 +28,13 @@
def get_raw_address(self):
raise ValueError("no raw buffer")
-
def is_writable(self):
return False
+
class RWBuffer(Buffer):
"""Abstract base class for read-write buffers."""
-
- __slots__ = () # no extra slot here
+ __slots__ = []
def is_writable(self):
return True
@@ -51,10 +49,8 @@
self.setitem(start + i, string[i])
-
-# ____________________________________________________________
-
class StringBuffer(Buffer):
+ __slots__ = ['value']
def __init__(self, value):
self.value = value
@@ -76,48 +72,11 @@
return self.value[start:stop]
return "".join([self.value[start + i*step] for i in xrange(size)])
-
-class StringLikeBuffer(Buffer):
- """For app-level objects that already have a string-like interface
- with __len__ and a __getitem__ that returns characters or (with
- slicing) substrings."""
- # XXX this is inefficient, it should only be used temporarily
-
- def __init__(self, space, w_obj):
- self.space = space
- self.w_obj = w_obj
-
- def getlength(self):
- space = self.space
- return space.len_w(self.w_obj)
-
- def getitem(self, index):
- space = self.space
- w_value = space.getitem(self.w_obj, space.wrap(index))
- try:
- return chr(space.int_w(w_value))
- except OperationError as e:
- if not e.match(space, space.w_TypeError):
- raise
- s = space.bytes_w(w_value)
- if len(s) != 1:
- raise OperationError(space.w_ValueError,
- space.wrap("single byte expected, got
string"))
- char = s[0] # annotator hint
- return char
-
- def getslice(self, start, stop, step, size):
- space = self.space
- if step != 1:
- raise OperationError(space.w_ValueError, space.wrap(
- "buffer object does not support slicing with a step"))
- s = space.str_w(space.getslice(self.w_obj, space.wrap(start),
- space.wrap(stop)))
- return s
-
# ____________________________________________________________
class SubBufferMixin(object):
+ _attrs_ = ['buffer', 'offset', 'size']
+
def __init__(self, buffer, offset, size):
self.buffer = buffer
self.offset = offset
@@ -141,9 +100,11 @@
# out of bounds
return self.buffer.getslice(self.offset + start, self.offset + stop,
step, size)
+
class SubBuffer(Buffer):
import_from_mixin(SubBufferMixin)
+
class RWSubBuffer(RWBuffer):
import_from_mixin(SubBufferMixin)
diff --git a/pypy/interpreter/test/test_buffer.py
b/pypy/interpreter/test/test_buffer.py
--- a/pypy/interpreter/test/test_buffer.py
+++ b/pypy/interpreter/test/test_buffer.py
@@ -1,12 +1,10 @@
import py
-from pypy.module.__builtin__.interp_memoryview import W_Buffer
from rpython.tool.udir import udir
testdir = udir.ensure('test_buffer', dir=1)
class TestBuffer:
-
def test_buffer_w(self):
space = self.space
w_hello = space.wrapbytes('hello world')
@@ -14,9 +12,9 @@
assert buf.getlength() == 11
assert buf.as_str() == 'hello world'
assert buf.getslice(1, 6, 1, 5) == 'ello '
- assert space.buffer_w(W_Buffer(buf)) is buf
+ assert space.buffer_w(space.newbuffer(buf)) is buf
assert space.bufferstr_w(w_hello) == 'hello world'
- assert space.bufferstr_w(W_Buffer(space.buffer_w(w_hello))) == 'hello
world'
+ assert space.bufferstr_w(space.newbuffer(space.buffer_w(w_hello))) ==
'hello world'
space.raises_w(space.w_TypeError, space.buffer_w, space.wrap(5))
e = space.raises_w(space.w_TypeError, space.buffer, space.wrap(5))
message = space.unwrap(e.value.get_w_value(space))
@@ -24,7 +22,7 @@
def test_file_write(self):
space = self.space
- w_buffer = W_Buffer(space.buffer_w(space.wrapbytes('hello world')))
+ w_buffer = space.newbuffer(space.buffer_w(space.wrapbytes('hello
world')))
filename = str(testdir.join('test_file_write'))
space.appexec([w_buffer, space.wrap(filename)], """(buffer, filename):
f = open(filename, 'wb')
@@ -36,4 +34,4 @@
f.close()
assert data == 'hello world'
-# Note: some app-level tests for buffer are in module/__builtin__/test/.
+# Note: some app-level tests for buffer are in
objspace/std/test/test_memoryview.py.
diff --git a/pypy/module/__builtin__/__init__.py
b/pypy/module/__builtin__/__init__.py
--- a/pypy/module/__builtin__/__init__.py
+++ b/pypy/module/__builtin__/__init__.py
@@ -29,14 +29,10 @@
interpleveldefs = {
# constants
+ '__debug__' : '(space.w_True)', # XXX
'None' : '(space.w_None)',
'False' : '(space.w_False)',
'True' : '(space.w_True)',
- '__debug__' : '(space.w_True)', # XXX
- 'type' : '(space.w_type)',
- 'object' : '(space.w_object)',
- 'memoryview' : 'interp_memoryview.W_MemoryView',
-
'open' : 'state.get(space).w_open',
# interp-level function definitions
diff --git a/pypy/module/__builtin__/test/test_buffer.py
b/pypy/module/__builtin__/test/test_buffer.py
deleted file mode 100644
--- a/pypy/module/__builtin__/test/test_buffer.py
+++ /dev/null
@@ -1,122 +0,0 @@
-"""Tests some behaviour of the buffer type that is not tested in
-lib-python/2.5.2/test/test_types.py where the stdlib buffer tests live."""
-
-class AppTestMemoryView:
- spaceconfig = dict(usemodules=['array'])
-
- def test_basic(self):
- v = memoryview(b"abc")
- assert v.tobytes() == b"abc"
- assert len(v) == 3
- assert v[0] == b'a'
- assert list(v) == [b'a', b'b', b'c']
- assert v.tolist() == [97, 98, 99]
- assert v[1] == b"b"
- assert v[-1] == b"c"
- raises(TypeError, "v[1] = 'x'")
- assert v.readonly is True
- w = v[1:234]
- assert isinstance(w, memoryview)
- assert len(w) == 2
-
- def test_array_buffer(self):
- import array
- b = memoryview(array.array("B", [1, 2, 3]))
- assert len(b) == 3
- assert b[0:3] == b"\x01\x02\x03"
-
- def test_nonzero(self):
- assert memoryview(b'\x00')
- assert not memoryview(b'')
- import array
- assert memoryview(array.array("B", [0]))
- assert not memoryview(array.array("B", []))
-
- def test_bytes(self):
- assert bytes(memoryview(b'hello')) == b'hello'
-
- def test_repr(self):
- assert repr(memoryview(b'hello')).startswith('<memory at 0x')
-
- def test_compare(self):
- assert memoryview(b"abc") == bytearray(b"abc")
- assert memoryview(b"abc") != 3
- assert memoryview(b'ab') == b'ab'
- assert b'ab' == memoryview(b'ab')
- assert not (memoryview(b'ab') != b'ab')
- assert memoryview(b'ab') == memoryview(b'ab')
- assert not (memoryview(b'ab') != memoryview(b'ab'))
- assert memoryview(b'ab') != memoryview(b'abc')
- raises(TypeError, "memoryview(b'ab') < memoryview(b'ab')")
- raises(TypeError, "memoryview(b'ab') <= memoryview(b'ab')")
- raises(TypeError, "memoryview(b'ab') > memoryview(b'ab')")
- raises(TypeError, "memoryview(b'ab') >= memoryview(b'ab')")
- raises(TypeError, "memoryview(b'ab') < memoryview(b'abc')")
- raises(TypeError, "memoryview(b'ab') <= memoryview(b'ab')")
- raises(TypeError, "memoryview(b'ab') > memoryview(b'aa')")
- raises(TypeError, "memoryview(b'ab') >= memoryview(b'ab')")
-
- def test_hash(self):
- raises(TypeError, "hash(memoryview(b'hello'))")
-
- def test_getitem_only_ints(self):
- class MyInt(object):
- def __init__(self, x):
- self.x = x
-
- def __int__(self):
- return self.x
-
- buf = memoryview(b'hello world')
- raises(TypeError, "buf[MyInt(0)]")
- raises(TypeError, "buf[MyInt(0):MyInt(5)]")
-
- def test_rw(self):
- data = bytearray(b'abcefg')
- v = memoryview(data)
- assert v.readonly is False
- v[0] = b'z'
- assert data == bytearray(eval("b'zbcefg'"))
- v[1:4] = b'123'
- assert data == bytearray(eval("b'z123fg'"))
- raises((ValueError, TypeError), "v[2] = 'spam'")
-
- def test_memoryview_attrs(self):
- v = memoryview(b"a"*100)
- assert v.format == "B"
- assert v.itemsize == 1
- assert v.shape == (100,)
- assert v.ndim == 1
- assert v.strides == (1,)
-
- def test_suboffsets(self):
- v = memoryview(b"a"*100)
- assert v.suboffsets == None
-
- def test_release(self):
- v = memoryview(b"a"*100)
- v.release()
- raises(ValueError, len, v)
- raises(ValueError, v.tolist)
- raises(ValueError, v.tobytes)
- raises(ValueError, "v[0]")
- raises(ValueError, "v[0] = b'a'")
- raises(ValueError, "v.format")
- raises(ValueError, "v.itemsize")
- raises(ValueError, "v.ndim")
- raises(ValueError, "v.readonly")
- raises(ValueError, "v.shape")
- raises(ValueError, "v.strides")
- raises(ValueError, "v.suboffsets")
- raises(ValueError, "with v as cm: pass")
- raises(ValueError, "memoryview(v)")
- assert v == v
- assert v != memoryview(b"a"*100)
- assert v != b"a"*100
- assert "released memory" in repr(v)
-
- def test_context_manager(self):
- v = memoryview(b"a"*100)
- with v as cm:
- assert cm is v
- assert "released memory" in repr(v)
diff --git a/pypy/module/__builtin__/test/test_builtin.py
b/pypy/module/__builtin__/test/test_builtin.py
--- a/pypy/module/__builtin__/test/test_builtin.py
+++ b/pypy/module/__builtin__/test/test_builtin.py
@@ -25,6 +25,17 @@
else:
cls.w_safe_runtimerror = cls.space.wrap(sys.version_info < (2, 6))
+ def test_builtin_names(self):
+ import __builtin__
+ assert __builtin__.None is None
+ assert __builtin__.False is False
+ assert __builtin__.True is True
+
+ assert __builtin__.buffer is buffer
+ assert __builtin__.bytes is str
+ assert __builtin__.dict is dict
+ assert __builtin__.memoryview is memoryview
+
def test_bytes_alias(self):
assert bytes is not str
assert isinstance(eval("b'hi'"), bytes)
diff --git a/pypy/module/__pypy__/bytebuffer.py
b/pypy/module/__pypy__/bytebuffer.py
--- a/pypy/module/__pypy__/bytebuffer.py
+++ b/pypy/module/__pypy__/bytebuffer.py
@@ -4,11 +4,9 @@
from pypy.interpreter.buffer import RWBuffer
from pypy.interpreter.gateway import unwrap_spec
-from pypy.module.__builtin__.interp_memoryview import W_Buffer
class ByteBuffer(RWBuffer):
-
def __init__(self, len):
self.data = ['\x00'] * len
@@ -24,4 +22,4 @@
@unwrap_spec(length=int)
def bytebuffer(space, length):
- return W_Buffer(ByteBuffer(length))
+ return space.newbuffer(ByteBuffer(length))
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
@@ -4,7 +4,7 @@
from pypy.interpreter.gateway import unwrap_spec, interp2app
from pypy.interpreter.typedef import TypeDef, make_weakref_descr
from pypy.module._cffi_backend import cdataobj, ctypeptr, ctypearray
-from pypy.module.__builtin__.interp_memoryview import W_Buffer
+from pypy.objspace.std.memoryview import W_Buffer
from rpython.rtyper.annlowlevel import llstr
from rpython.rtyper.lltypesystem import rffi
diff --git a/pypy/module/_io/interp_bufferedio.py
b/pypy/module/_io/interp_bufferedio.py
--- a/pypy/module/_io/interp_bufferedio.py
+++ b/pypy/module/_io/interp_bufferedio.py
@@ -5,7 +5,6 @@
TypeDef, GetSetProperty, generic_new_descr, interp_attrproperty_w)
from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault
from pypy.interpreter.buffer import RWBuffer
-from pypy.module.__builtin__.interp_memoryview import W_Buffer
from rpython.rlib.rstring import StringBuilder
from rpython.rlib.rarithmetic import r_longlong, intmask
from rpython.rlib import rposix
@@ -522,7 +521,7 @@
def _raw_read(self, space, buffer, start, length):
length = intmask(length)
- w_buf = W_Buffer(RawBuffer(buffer, start, length))
+ w_buf = space.newbuffer(RawBuffer(buffer, start, length))
while True:
try:
w_size = space.call_method(self.w_raw, "readinto", w_buf)
diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py
--- a/pypy/module/cpyext/api.py
+++ b/pypy/module/cpyext/api.py
@@ -22,9 +22,9 @@
from pypy.interpreter.nestedscope import Cell
from pypy.interpreter.module import Module
from pypy.interpreter.function import StaticMethod
+from pypy.objspace.std.memoryview import W_MemoryView
from pypy.objspace.std.sliceobject import W_SliceObject
from pypy.module.__builtin__.descriptor import W_Property
-from pypy.module.__builtin__.interp_memoryview import W_MemoryView
from pypy.module.micronumpy.base import W_NDimArray
from rpython.rlib.entrypoint import entrypoint_lowlevel
from rpython.rlib.rposix import is_valid_fd, validate_fd
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
@@ -14,7 +14,6 @@
from pypy.module.cpyext.pyobject import from_ref
from pypy.module.cpyext.pyerrors import PyErr_Occurred
from pypy.module.cpyext.state import State
-from pypy.module.__builtin__.interp_memoryview import W_Buffer
from pypy.interpreter.error import OperationError, oefmt
from pypy.interpreter.buffer import Buffer
from pypy.interpreter.argument import Arguments
@@ -250,7 +249,7 @@
ret = generic_cpy_call(space, func_target, w_self, view, flags)
if rffi.cast(lltype.Signed, ret) == -1:
space.fromcache(State).check_and_raise_exception(always=True)
- return W_Buffer(CPyBuffer(view.c_buf, view.c_len, w_self))
+ return space.newbuffer(CPyBuffer(view.c_buf, view.c_len, w_self))
def get_richcmp_func(OP_CONST):
def inner(space, w_self, w_args, func):
diff --git a/pypy/module/micronumpy/ndarray.py
b/pypy/module/micronumpy/ndarray.py
--- a/pypy/module/micronumpy/ndarray.py
+++ b/pypy/module/micronumpy/ndarray.py
@@ -7,7 +7,6 @@
from rpython.rlib.rawstorage import RAW_STORAGE_PTR
from rpython.rtyper.lltypesystem import rffi
from rpython.tool.sourcetools import func_with_new_name
-from pypy.module.__builtin__.interp_memoryview import W_Buffer
from pypy.module.micronumpy import descriptor, ufuncs, boxes, arrayops, loop, \
support, constants as NPY
from pypy.module.micronumpy.appbridge import get_appbridge_cache
@@ -607,7 +606,7 @@
return self.implementation.get_buffer(space)
def descr_get_data(self, space):
- return W_Buffer(self.buffer_w(space))
+ return space.newbuffer(self.buffer_w(space))
@unwrap_spec(offset=int, axis1=int, axis2=int)
def descr_diagonal(self, space, offset=0, axis1=0, axis2=1):
diff --git a/pypy/objspace/fake/objspace.py b/pypy/objspace/fake/objspace.py
--- a/pypy/objspace/fake/objspace.py
+++ b/pypy/objspace/fake/objspace.py
@@ -175,6 +175,9 @@
def newseqiter(self, x):
return w_some_obj()
+ def newbuffer(self, x):
+ return w_some_obj()
+
def marshal_w(self, w_obj):
"NOT_RPYTHON"
raise NotImplementedError
diff --git a/pypy/module/__builtin__/interp_memoryview.py
b/pypy/objspace/std/memoryview.py
rename from pypy/module/__builtin__/interp_memoryview.py
rename to pypy/objspace/std/memoryview.py
--- a/pypy/module/__builtin__/interp_memoryview.py
+++ b/pypy/objspace/std/memoryview.py
@@ -37,6 +37,7 @@
"""
def __init__(self, buf):
+ assert isinstance(buf, buffer.Buffer)
self.buf = buf
def buffer_w(self, space):
@@ -44,7 +45,7 @@
@staticmethod
@unwrap_spec(offset=int, size=int)
- def descr_new(space, w_subtype, w_object, offset=0, size=-1):
+ 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)
@@ -145,7 +146,7 @@
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),
+ __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),
@@ -171,6 +172,7 @@
"""
def __init__(self, buf):
+ assert isinstance(buf, buffer.Buffer)
self.buf = buf
def buffer_w(self, space):
@@ -185,9 +187,8 @@
return self.buf
@staticmethod
- def descr_new(space, w_subtype, w_object):
- w_memoryview = W_MemoryView(space.buffer_w(w_object))
- return w_memoryview
+ def descr_new_memoryview(space, w_subtype, w_object):
+ return W_MemoryView(space.buffer_w(w_object))
def _make_descr__cmp(name):
def descr__cmp(self, space, w_other):
@@ -328,7 +329,7 @@
__doc__ = """\
Create a new memoryview object which references the given object.
""",
- __new__ = interp2app(W_MemoryView.descr_new),
+ __new__ = interp2app(W_MemoryView.descr_new_memoryview),
__eq__ = interp2app(W_MemoryView.descr_eq),
__getitem__ = interp2app(W_MemoryView.descr_getitem),
__len__ = interp2app(W_MemoryView.descr_len),
diff --git a/pypy/objspace/std/model.py b/pypy/objspace/std/model.py
--- a/pypy/objspace/std/model.py
+++ b/pypy/objspace/std/model.py
@@ -61,7 +61,7 @@
from pypy.objspace.std import unicodeobject
from pypy.objspace.std import dictproxyobject
from pypy.objspace.std import proxyobject
- from pypy.module.__builtin__.interp_memoryview import W_Buffer
+ from pypy.objspace.std.memoryview import W_Buffer, W_MemoryView
import pypy.objspace.std.default # register a few catch-all
multimethods
import pypy.objspace.std.marshal_impl # install marshal multimethods
@@ -81,6 +81,7 @@
self.pythontypes.append(boolobject.W_BoolObject.typedef)
self.pythontypes.append(longobject.W_LongObject.typedef)
self.pythontypes.append(W_Buffer.typedef)
+ self.pythontypes.append(W_MemoryView.typedef)
# the set of implementation types
self.typeorder = {
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,6 +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.noneobject import W_NoneObject
from pypy.objspace.std.objectobject import W_ObjectObject
from pypy.objspace.std.iterobject import W_SeqIterObject
@@ -339,6 +340,9 @@
def newseqiter(self, w_obj):
return W_SeqIterObject(w_obj)
+ def newbuffer(self, w_obj):
+ return W_Buffer(w_obj)
+
def type(self, w_obj):
jit.promote(w_obj.__class__)
return w_obj.getclass(self)
diff --git a/pypy/objspace/std/test/test_memoryview.py
b/pypy/objspace/std/test/test_memoryview.py
new file mode 100644
--- /dev/null
+++ b/pypy/objspace/std/test/test_memoryview.py
@@ -0,0 +1,119 @@
+class AppTestMemoryView:
+ spaceconfig = dict(usemodules=['array'])
+
+ def test_basic(self):
+ v = memoryview(b"abc")
+ assert v.tobytes() == b"abc"
+ assert len(v) == 3
+ assert v[0] == b'a'
+ assert list(v) == [b'a', b'b', b'c']
+ assert v.tolist() == [97, 98, 99]
+ assert v[1] == b"b"
+ assert v[-1] == b"c"
+ raises(TypeError, "v[1] = 'x'")
+ assert v.readonly is True
+ w = v[1:234]
+ assert isinstance(w, memoryview)
+ assert len(w) == 2
+
+ def test_array_buffer(self):
+ import array
+ b = memoryview(array.array("B", [1, 2, 3]))
+ assert len(b) == 3
+ assert b[0:3] == b"\x01\x02\x03"
+
+ def test_nonzero(self):
+ assert memoryview(b'\x00')
+ assert not memoryview(b'')
+ import array
+ assert memoryview(array.array("B", [0]))
+ assert not memoryview(array.array("B", []))
+
+ def test_bytes(self):
+ assert bytes(memoryview(b'hello')) == b'hello'
+
+ def test_repr(self):
+ assert repr(memoryview(b'hello')).startswith('<memory at 0x')
+
+ def test_compare(self):
+ assert memoryview(b"abc") == bytearray(b"abc")
+ assert memoryview(b"abc") != 3
+ assert memoryview(b'ab') == b'ab'
+ assert b'ab' == memoryview(b'ab')
+ assert not (memoryview(b'ab') != b'ab')
+ assert memoryview(b'ab') == memoryview(b'ab')
+ assert not (memoryview(b'ab') != memoryview(b'ab'))
+ assert memoryview(b'ab') != memoryview(b'abc')
+ raises(TypeError, "memoryview(b'ab') < memoryview(b'ab')")
+ raises(TypeError, "memoryview(b'ab') <= memoryview(b'ab')")
+ raises(TypeError, "memoryview(b'ab') > memoryview(b'ab')")
+ raises(TypeError, "memoryview(b'ab') >= memoryview(b'ab')")
+ raises(TypeError, "memoryview(b'ab') < memoryview(b'abc')")
+ raises(TypeError, "memoryview(b'ab') <= memoryview(b'ab')")
+ raises(TypeError, "memoryview(b'ab') > memoryview(b'aa')")
+ raises(TypeError, "memoryview(b'ab') >= memoryview(b'ab')")
+
+ def test_hash(self):
+ raises(TypeError, "hash(memoryview(b'hello'))")
+
+ def test_getitem_only_ints(self):
+ class MyInt(object):
+ def __init__(self, x):
+ self.x = x
+
+ def __int__(self):
+ return self.x
+
+ buf = memoryview(b'hello world')
+ raises(TypeError, "buf[MyInt(0)]")
+ raises(TypeError, "buf[MyInt(0):MyInt(5)]")
+
+ def test_rw(self):
+ data = bytearray(b'abcefg')
+ v = memoryview(data)
+ assert v.readonly is False
+ v[0] = b'z'
+ assert data == bytearray(eval("b'zbcefg'"))
+ v[1:4] = b'123'
+ assert data == bytearray(eval("b'z123fg'"))
+ raises((ValueError, TypeError), "v[2] = 'spam'")
+
+ def test_memoryview_attrs(self):
+ v = memoryview(b"a"*100)
+ assert v.format == "B"
+ assert v.itemsize == 1
+ assert v.shape == (100,)
+ assert v.ndim == 1
+ assert v.strides == (1,)
+
+ def test_suboffsets(self):
+ v = memoryview(b"a"*100)
+ assert v.suboffsets == None
+
+ def test_release(self):
+ v = memoryview(b"a"*100)
+ v.release()
+ raises(ValueError, len, v)
+ raises(ValueError, v.tolist)
+ raises(ValueError, v.tobytes)
+ raises(ValueError, "v[0]")
+ raises(ValueError, "v[0] = b'a'")
+ raises(ValueError, "v.format")
+ raises(ValueError, "v.itemsize")
+ raises(ValueError, "v.ndim")
+ raises(ValueError, "v.readonly")
+ raises(ValueError, "v.shape")
+ raises(ValueError, "v.strides")
+ raises(ValueError, "v.suboffsets")
+ raises(ValueError, "with v as cm: pass")
+ raises(ValueError, "memoryview(v)")
+ assert v == v
+ assert v != memoryview(b"a"*100)
+ assert v != b"a"*100
+ assert "released memory" in repr(v)
+
+ def test_context_manager(self):
+ v = memoryview(b"a"*100)
+ with v as cm:
+ assert cm is v
+ assert "released memory" in repr(v)
diff --git a/rpython/rlib/rwin32.py b/rpython/rlib/rwin32.py
--- a/rpython/rlib/rwin32.py
+++ b/rpython/rlib/rwin32.py
@@ -169,6 +169,7 @@
cfile = udir.join('dosmaperr.c')
cfile.write(r'''
#include <errno.h>
+ #include <WinError.h>
#include <stdio.h>
#ifdef __GNUC__
#define _dosmaperr mingw_dosmaperr
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit