From f85380b527d87522d8314b7a3538626a6ca65316 Mon Sep 17 00:00:00 2001 From: Hyunmin Shin Date: Sat, 16 Jul 2022 15:50:25 +0900 Subject: [PATCH 1/6] Add number protocol for PyBytes --- vm/src/builtins/bytes.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/vm/src/builtins/bytes.rs b/vm/src/builtins/bytes.rs index 67dfeef250..fcb4284dc8 100644 --- a/vm/src/builtins/bytes.rs +++ b/vm/src/builtins/bytes.rs @@ -14,17 +14,18 @@ use crate::{ function::{ArgBytesLike, ArgIterable, OptionalArg, OptionalOption, PyComparisonValue}, protocol::{ BufferDescriptor, BufferMethods, PyBuffer, PyIterReturn, PyMappingMethods, - PySequenceMethods, + PySequenceMethods, PyNumber, PyNumberMethods, }, sliceable::{SequenceIndex, SliceableSequenceOp}, types::{ AsBuffer, AsMapping, AsSequence, Callable, Comparable, Constructor, Hashable, IterNext, - IterNextIterable, Iterable, PyComparisonOp, Unconstructible, + IterNextIterable, Iterable, PyComparisonOp, Unconstructible, AsNumber }, AsObject, Context, Py, PyObject, PyObjectRef, PyPayload, PyRef, PyResult, TryFromBorrowedObject, TryFromObject, VirtualMachine, }; use bstr::ByteSlice; +use core::num; use std::{mem::size_of, ops::Deref}; #[pyclass(module = false, name = "bytes")] @@ -108,7 +109,8 @@ impl PyBytes { Comparable, AsBuffer, Iterable, - Constructor + Constructor, + AsNumber ) )] impl PyBytes { @@ -606,6 +608,19 @@ impl AsSequence for PyBytes { }; } +impl AsNumber for PyBytes { + const AS_NUMBER: PyNumberMethods = PyNumberMethods { + remainder: Some(|number, other, vm| { + let formatted = number.obj.downcast_ref::() + .unwrap() + .inner + .cformat(other.to_owned(), vm)?; + Ok(formatted.to_pyobject(vm)) + }), + ..PyNumberMethods::NOT_IMPLEMENTED + }; +} + impl Hashable for PyBytes { #[inline] fn hash(zelf: &crate::Py, vm: &VirtualMachine) -> PyResult { From 65f6600e360844e580ad397ac137f2cea425301c Mon Sep 17 00:00:00 2001 From: Hyunmin Shin Date: Sat, 16 Jul 2022 15:52:27 +0900 Subject: [PATCH 2/6] cargo fmt --- vm/src/builtins/bytes.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/vm/src/builtins/bytes.rs b/vm/src/builtins/bytes.rs index fcb4284dc8..1683fd0152 100644 --- a/vm/src/builtins/bytes.rs +++ b/vm/src/builtins/bytes.rs @@ -13,13 +13,13 @@ use crate::{ function::Either, function::{ArgBytesLike, ArgIterable, OptionalArg, OptionalOption, PyComparisonValue}, protocol::{ - BufferDescriptor, BufferMethods, PyBuffer, PyIterReturn, PyMappingMethods, - PySequenceMethods, PyNumber, PyNumberMethods, + BufferDescriptor, BufferMethods, PyBuffer, PyIterReturn, PyMappingMethods, PyNumber, + PyNumberMethods, PySequenceMethods, }, sliceable::{SequenceIndex, SliceableSequenceOp}, types::{ - AsBuffer, AsMapping, AsSequence, Callable, Comparable, Constructor, Hashable, IterNext, - IterNextIterable, Iterable, PyComparisonOp, Unconstructible, AsNumber + AsBuffer, AsMapping, AsNumber, AsSequence, Callable, Comparable, Constructor, Hashable, + IterNext, IterNextIterable, Iterable, PyComparisonOp, Unconstructible, }, AsObject, Context, Py, PyObject, PyObjectRef, PyPayload, PyRef, PyResult, TryFromBorrowedObject, TryFromObject, VirtualMachine, @@ -611,10 +611,12 @@ impl AsSequence for PyBytes { impl AsNumber for PyBytes { const AS_NUMBER: PyNumberMethods = PyNumberMethods { remainder: Some(|number, other, vm| { - let formatted = number.obj.downcast_ref::() - .unwrap() - .inner - .cformat(other.to_owned(), vm)?; + let formatted = number + .obj + .downcast_ref::() + .unwrap() + .inner + .cformat(other.to_owned(), vm)?; Ok(formatted.to_pyobject(vm)) }), ..PyNumberMethods::NOT_IMPLEMENTED From ee10db32dc6f095cb4bf79c280b03963156d2478 Mon Sep 17 00:00:00 2001 From: Hyunmin Shin Date: Sat, 16 Jul 2022 16:22:48 +0900 Subject: [PATCH 3/6] Resolve clippy --- vm/src/builtins/bytes.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/vm/src/builtins/bytes.rs b/vm/src/builtins/bytes.rs index 1683fd0152..db8e622bd5 100644 --- a/vm/src/builtins/bytes.rs +++ b/vm/src/builtins/bytes.rs @@ -13,8 +13,8 @@ use crate::{ function::Either, function::{ArgBytesLike, ArgIterable, OptionalArg, OptionalOption, PyComparisonValue}, protocol::{ - BufferDescriptor, BufferMethods, PyBuffer, PyIterReturn, PyMappingMethods, PyNumber, - PyNumberMethods, PySequenceMethods, + BufferDescriptor, BufferMethods, PyBuffer, PyIterReturn, PyMappingMethods, PyNumberMethods, + PySequenceMethods, }, sliceable::{SequenceIndex, SliceableSequenceOp}, types::{ @@ -25,7 +25,6 @@ use crate::{ TryFromBorrowedObject, TryFromObject, VirtualMachine, }; use bstr::ByteSlice; -use core::num; use std::{mem::size_of, ops::Deref}; #[pyclass(module = false, name = "bytes")] From c0aae15535087f32feff2f0e01be33061b27fa14 Mon Sep 17 00:00:00 2001 From: Karatus Date: Sat, 16 Jul 2022 16:40:49 +0900 Subject: [PATCH 4/6] Update vm/src/builtins/bytes.rs Co-authored-by: Snowapril --- vm/src/builtins/bytes.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/vm/src/builtins/bytes.rs b/vm/src/builtins/bytes.rs index db8e622bd5..396cae5733 100644 --- a/vm/src/builtins/bytes.rs +++ b/vm/src/builtins/bytes.rs @@ -610,13 +610,10 @@ impl AsSequence for PyBytes { impl AsNumber for PyBytes { const AS_NUMBER: PyNumberMethods = PyNumberMethods { remainder: Some(|number, other, vm| { - let formatted = number - .obj - .downcast_ref::() - .unwrap() + Ok(Self::number_downcast(number) .inner - .cformat(other.to_owned(), vm)?; - Ok(formatted.to_pyobject(vm)) + .cformat(other.to_pyobject(vm), vm)? + .to_pyobject(vm)) }), ..PyNumberMethods::NOT_IMPLEMENTED }; From e988ffb224c4aeb6ccc716e50f728332cbbdb285 Mon Sep 17 00:00:00 2001 From: Hyunmin Shin Date: Mon, 18 Jul 2022 22:04:33 +0900 Subject: [PATCH 5/6] Refactor remainder in number protocol --- vm/src/builtins/bytes.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/vm/src/builtins/bytes.rs b/vm/src/builtins/bytes.rs index 396cae5733..24858add8c 100644 --- a/vm/src/builtins/bytes.rs +++ b/vm/src/builtins/bytes.rs @@ -610,10 +610,9 @@ impl AsSequence for PyBytes { impl AsNumber for PyBytes { const AS_NUMBER: PyNumberMethods = PyNumberMethods { remainder: Some(|number, other, vm| { - Ok(Self::number_downcast(number) - .inner - .cformat(other.to_pyobject(vm), vm)? - .to_pyobject(vm)) + Self::number_downcast(number) + .mod_(other.to_pyobject(vm), vm) + .to_pyresult(vm) }), ..PyNumberMethods::NOT_IMPLEMENTED }; From 540b6f5910b2465b216f95d51ccc437495b010d8 Mon Sep 17 00:00:00 2001 From: Hyunmin Shin Date: Mon, 18 Jul 2022 22:32:17 +0900 Subject: [PATCH 6/6] Refactor remainder --- vm/src/builtins/bytes.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/src/builtins/bytes.rs b/vm/src/builtins/bytes.rs index 24858add8c..4dae41deca 100644 --- a/vm/src/builtins/bytes.rs +++ b/vm/src/builtins/bytes.rs @@ -611,7 +611,7 @@ impl AsNumber for PyBytes { const AS_NUMBER: PyNumberMethods = PyNumberMethods { remainder: Some(|number, other, vm| { Self::number_downcast(number) - .mod_(other.to_pyobject(vm), vm) + .mod_(other.to_owned(), vm) .to_pyresult(vm) }), ..PyNumberMethods::NOT_IMPLEMENTED