From caec579acaa8c1152abc689100c4ea97d355c49c Mon Sep 17 00:00:00 2001 From: snowapril Date: Sun, 10 Oct 2021 15:36:34 +0900 Subject: [PATCH] add extra `name` method return `BorrowedValue` Signed-off-by: snowapril --- vm/src/builtins/pytype.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/vm/src/builtins/pytype.rs b/vm/src/builtins/pytype.rs index d6b014a5f..ec1a1e440 100644 --- a/vm/src/builtins/pytype.rs +++ b/vm/src/builtins/pytype.rs @@ -2,7 +2,11 @@ use super::{ mappingproxy::PyMappingProxy, object, PyClassMethod, PyDictRef, PyInt, PyList, PyStaticMethod, PyStr, PyStrRef, PyTuple, PyTupleRef, PyWeak, }; -use crate::common::{ascii, lock::PyRwLock}; +use crate::common::{ + ascii, + borrow::BorrowedValue, + lock::{PyRwLock, PyRwLockReadGuard}, +}; use crate::{ function::{FuncArgs, KwArgs, OptionalArg}, protocol::{PyIterReturn, PyMappingMethods}, @@ -400,9 +404,16 @@ impl PyType { vm.ctx.not_implemented() } - #[pyproperty(magic)] - pub fn name(&self) -> String { - self.slot_name().rsplit('.').next().unwrap().to_string() + #[pyproperty(name = "__name__")] + fn __name__(&self) -> String { + self.name().to_string() + } + + pub fn name(&self) -> BorrowedValue { + PyRwLockReadGuard::map(self.slots.name.read(), |slot_name| { + slot_name.as_ref().unwrap().rsplit('.').next().unwrap() + }) + .into() } #[pymethod(magic)]