From b38d278f910dccb2597befaee71d1fdb4625795c Mon Sep 17 00:00:00 2001 From: Kangzhi Shi Date: Thu, 22 Oct 2020 16:45:30 +0200 Subject: [PATCH] memoryview constructor args --- Lib/test/test_memoryview.py | 2 -- vm/src/builtins/memory.rs | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py index eb23265f4..27a17e4de 100644 --- a/Lib/test/test_memoryview.py +++ b/Lib/test/test_memoryview.py @@ -483,8 +483,6 @@ class BaseMemorySliceSliceTests: class BytesMemoryviewTest(unittest.TestCase, BaseMemoryviewTests, BaseBytesMemoryTests): - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_constructor(self): for tp in self._types: ob = tp(self._source) diff --git a/vm/src/builtins/memory.rs b/vm/src/builtins/memory.rs index 9dded35a7..1111ed866 100644 --- a/vm/src/builtins/memory.rs +++ b/vm/src/builtins/memory.rs @@ -102,6 +102,12 @@ impl Default for BufferOptions { } } +#[derive(FromArgs)] +struct PyMemoryViewNewArgs { + #[pyarg(any)] + object: PyObjectRef, +} + #[pyclass(module = false, name = "memoryview")] #[derive(Debug)] pub struct PyMemoryView { @@ -161,9 +167,14 @@ impl PyMemoryView { } #[pyslot] - fn tp_new(_cls: PyTypeRef, obj: PyObjectRef, vm: &VirtualMachine) -> PyResult> { - let buffer = try_buffer_from_object(vm, &obj)?; - Ok(PyMemoryView::from_buffer(obj, buffer, vm)?.into_ref(vm)) + fn tp_new( + cls: PyTypeRef, + args: PyMemoryViewNewArgs, + vm: &VirtualMachine, + ) -> PyResult> { + let buffer = try_buffer_from_object(vm, &args.object)?; + let zelf = PyMemoryView::from_buffer(args.object, buffer, vm)?; + zelf.into_ref_with_type(vm, cls) } #[pymethod]