From 47587d1bb4132831ea8f4ad2df5fed0a6eed4060 Mon Sep 17 00:00:00 2001 From: hy-kiera Date: Thu, 14 Jul 2022 12:56:42 +0900 Subject: [PATCH 1/3] Implement Number protocol for PyNone --- vm/src/builtins/singletons.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/vm/src/builtins/singletons.rs b/vm/src/builtins/singletons.rs index e2c26edcb8d..b72a4137121 100644 --- a/vm/src/builtins/singletons.rs +++ b/vm/src/builtins/singletons.rs @@ -1,7 +1,7 @@ use super::{PyType, PyTypeRef}; use crate::{ - class::PyClassImpl, convert::ToPyObject, types::Constructor, Context, Py, PyObjectRef, - PyPayload, PyResult, VirtualMachine, + class::PyClassImpl, convert::ToPyObject, protocol::PyNumberMethods, types::AsNumber, + types::Constructor, Context, Py, PyObjectRef, PyPayload, PyResult, VirtualMachine, }; #[pyclass(module = false, name = "NoneType")] @@ -39,7 +39,7 @@ impl Constructor for PyNone { } } -#[pyimpl(with(Constructor))] +#[pyimpl(with(Constructor, AsNumber))] impl PyNone { #[pymethod(magic)] fn repr(&self) -> String { @@ -52,6 +52,13 @@ impl PyNone { } } +impl AsNumber for PyNone { + const AS_NUMBER: PyNumberMethods = PyNumberMethods { + boolean: Some(|number, _vm| Ok(false)), + ..PyNumberMethods::NOT_IMPLEMENTED + }; +} + #[pyclass(module = false, name = "NotImplementedType")] #[derive(Debug)] pub struct PyNotImplemented; From bcf6dbdd856ab5344ffa2364268b2c44170a0d4a Mon Sep 17 00:00:00 2001 From: hy-kiera Date: Fri, 15 Jul 2022 16:57:46 +0900 Subject: [PATCH 2/3] solve warning of unused variable, 'number' --- vm/src/builtins/singletons.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/src/builtins/singletons.rs b/vm/src/builtins/singletons.rs index b72a4137121..d1226fcb32d 100644 --- a/vm/src/builtins/singletons.rs +++ b/vm/src/builtins/singletons.rs @@ -54,7 +54,7 @@ impl PyNone { impl AsNumber for PyNone { const AS_NUMBER: PyNumberMethods = PyNumberMethods { - boolean: Some(|number, _vm| Ok(false)), + boolean: Some(|_number, _vm| Ok(false)), ..PyNumberMethods::NOT_IMPLEMENTED }; } From f21b8a01c7d8e2e4c962707726f05bb340926ee0 Mon Sep 17 00:00:00 2001 From: hy-kiera Date: Sat, 16 Jul 2022 11:24:52 +0900 Subject: [PATCH 3/3] chore: group type traits --- vm/src/builtins/singletons.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/vm/src/builtins/singletons.rs b/vm/src/builtins/singletons.rs index d1226fcb32d..f67ca2b857c 100644 --- a/vm/src/builtins/singletons.rs +++ b/vm/src/builtins/singletons.rs @@ -1,7 +1,10 @@ use super::{PyType, PyTypeRef}; use crate::{ - class::PyClassImpl, convert::ToPyObject, protocol::PyNumberMethods, types::AsNumber, - types::Constructor, Context, Py, PyObjectRef, PyPayload, PyResult, VirtualMachine, + class::PyClassImpl, + convert::ToPyObject, + protocol::PyNumberMethods, + types::{AsNumber, Constructor}, + Context, Py, PyObjectRef, PyPayload, PyResult, VirtualMachine, }; #[pyclass(module = false, name = "NoneType")]