diff --git a/vm/src/callable.rs b/vm/src/callable.rs deleted file mode 100644 index 9e18779f3..000000000 --- a/vm/src/callable.rs +++ /dev/null @@ -1,10 +0,0 @@ -use crate::function::PyFuncArgs; -use crate::pyobject::{PyResult, PyValue}; -use crate::VirtualMachine; - -#[pyimpl] -pub trait PyBuiltinCallable: PyValue { - #[pymethod(magic)] - #[pyslot] - fn call(&self, args: PyFuncArgs, vm: &VirtualMachine) -> PyResult; -} diff --git a/vm/src/lib.rs b/vm/src/lib.rs index fb4f1ee66..421984e90 100644 --- a/vm/src/lib.rs +++ b/vm/src/lib.rs @@ -58,9 +58,7 @@ macro_rules! py_compile_bytecode { pub mod macros; mod builtins; -mod callable; pub mod cformat; -mod descriptor; mod dictdatatype; #[cfg(feature = "rustpython-compiler")] pub mod eval; @@ -76,6 +74,7 @@ mod pyhash; pub mod pyobject; pub mod scope; mod sequence; +mod slots; pub mod stdlib; mod sysmodule; pub mod types; diff --git a/vm/src/obj/objbuiltinfunc.rs b/vm/src/obj/objbuiltinfunc.rs index 68ff0ca51..124eb4099 100644 --- a/vm/src/obj/objbuiltinfunc.rs +++ b/vm/src/obj/objbuiltinfunc.rs @@ -1,12 +1,11 @@ use std::fmt; -use crate::callable::PyBuiltinCallable; -use crate::descriptor::PyBuiltinDescriptor; use crate::function::{OptionalArg, PyFuncArgs, PyNativeFunc}; use crate::obj::objtype::PyClassRef; use crate::pyobject::{ IdProtocol, PyClassImpl, PyContext, PyObjectRef, PyRef, PyResult, PyValue, TypeProtocol, }; +use crate::slots::{PyBuiltinCallable, PyBuiltinDescriptor}; use crate::vm::VirtualMachine; #[pyclass] diff --git a/vm/src/obj/objclassmethod.rs b/vm/src/obj/objclassmethod.rs index 2057c728d..34b652503 100644 --- a/vm/src/obj/objclassmethod.rs +++ b/vm/src/obj/objclassmethod.rs @@ -1,9 +1,9 @@ use super::objtype::PyClassRef; -use crate::descriptor::PyBuiltinDescriptor; use crate::function::OptionalArg; use crate::pyobject::{ PyClassImpl, PyContext, PyObjectRef, PyRef, PyResult, PyValue, TypeProtocol, }; +use crate::slots::PyBuiltinDescriptor; use crate::vm::VirtualMachine; /// classmethod(function) -> method diff --git a/vm/src/obj/objfunction.rs b/vm/src/obj/objfunction.rs index 33aca496f..f3b0e1fdb 100644 --- a/vm/src/obj/objfunction.rs +++ b/vm/src/obj/objfunction.rs @@ -4,8 +4,6 @@ use super::objstr::PyStringRef; use super::objtuple::PyTupleRef; use super::objtype::PyClassRef; use crate::bytecode; -use crate::callable::PyBuiltinCallable; -use crate::descriptor::PyBuiltinDescriptor; use crate::frame::Frame; use crate::function::{OptionalArg, PyFuncArgs}; use crate::obj::objcoroutine::PyCoroutine; @@ -15,6 +13,7 @@ use crate::pyobject::{ TypeProtocol, }; use crate::scope::Scope; +use crate::slots::{PyBuiltinCallable, PyBuiltinDescriptor}; use crate::vm::VirtualMachine; pub type PyFunctionRef = PyRef; diff --git a/vm/src/obj/objproperty.rs b/vm/src/obj/objproperty.rs index 8445243bf..26e53666b 100644 --- a/vm/src/obj/objproperty.rs +++ b/vm/src/obj/objproperty.rs @@ -4,12 +4,12 @@ use std::cell::RefCell; use super::objtype::PyClassRef; -use crate::descriptor::PyBuiltinDescriptor; use crate::function::{IntoPyNativeFunc, OptionalArg}; use crate::pyobject::{ IdProtocol, PyClassImpl, PyContext, PyObject, PyObjectRef, PyRef, PyResult, PyValue, TypeProtocol, }; +use crate::slots::PyBuiltinDescriptor; use crate::vm::VirtualMachine; // Read-only property, doesn't have __set__ or __delete__ diff --git a/vm/src/obj/objstaticmethod.rs b/vm/src/obj/objstaticmethod.rs index 3cc2af92e..09c3608a6 100644 --- a/vm/src/obj/objstaticmethod.rs +++ b/vm/src/obj/objstaticmethod.rs @@ -1,7 +1,7 @@ use super::objtype::PyClassRef; -use crate::descriptor::PyBuiltinDescriptor; use crate::function::OptionalArg; use crate::pyobject::{PyClassImpl, PyContext, PyObjectRef, PyRef, PyResult, PyValue}; +use crate::slots::PyBuiltinDescriptor; use crate::vm::VirtualMachine; #[pyclass(name = "staticmethod")] diff --git a/vm/src/obj/objtype.rs b/vm/src/obj/objtype.rs index 7f607bb47..07625211c 100644 --- a/vm/src/obj/objtype.rs +++ b/vm/src/obj/objtype.rs @@ -9,11 +9,12 @@ use super::objproperty::PropertyBuilder; use super::objstr::PyStringRef; use super::objtuple::PyTuple; use super::objweakref::PyWeak; -use crate::function::{PyFuncArgs, PyNativeFunc}; +use crate::function::PyFuncArgs; use crate::pyobject::{ IdProtocol, PyAttributes, PyContext, PyIterable, PyObject, PyObjectRef, PyRef, PyResult, PyValue, TypeProtocol, }; +use crate::slots::PyClassSlots; use crate::vm::VirtualMachine; #[derive(Debug)] @@ -26,19 +27,6 @@ pub struct PyClass { pub slots: RefCell, } -#[derive(Default)] -pub struct PyClassSlots { - pub new: Option, - pub call: Option, - pub descr_get: Option, -} - -impl fmt::Debug for PyClassSlots { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str("PyClassSlots") - } -} - impl fmt::Display for PyClass { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt::Display::fmt(&self.name, f) diff --git a/vm/src/descriptor.rs b/vm/src/slots.rs similarity index 50% rename from vm/src/descriptor.rs rename to vm/src/slots.rs index f298224cf..ecb9660e5 100644 --- a/vm/src/descriptor.rs +++ b/vm/src/slots.rs @@ -1,10 +1,30 @@ -use crate::function::OptionalArg; +use crate::function::{OptionalArg, PyFuncArgs, PyNativeFunc}; use crate::pyobject::{IdProtocol, PyObjectRef, PyRef, PyResult, PyValue}; use crate::VirtualMachine; +#[derive(Default)] +pub struct PyClassSlots { + pub new: Option, + pub call: Option, + pub descr_get: Option, +} + +impl std::fmt::Debug for PyClassSlots { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str("PyClassSlots") + } +} + +#[pyimpl] +pub trait PyBuiltinCallable: PyValue { + #[pymethod(magic)] + #[pyslot] + fn call(&self, args: PyFuncArgs, vm: &VirtualMachine) -> PyResult; +} + #[pyimpl] pub trait PyBuiltinDescriptor: PyValue { - #[pymethod(name = "__get__")] + #[pymethod(magic)] #[pyslot(descr_get)] fn get( zelf: PyRef,