diff --git a/Cargo.lock b/Cargo.lock index eb986773c..f37607256 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1518,7 +1518,7 @@ dependencies = [ "proc-macro2", "quote", "syn", - "syn-ext", + "syn-ext 0.3.1", ] [[package]] @@ -1645,7 +1645,7 @@ dependencies = [ "rustpython-compiler", "rustpython-doc", "syn", - "syn-ext", + "syn-ext 0.4.0", "textwrap 0.15.0", ] @@ -2120,6 +2120,15 @@ dependencies = [ "syn", ] +[[package]] +name = "syn-ext" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b86cb2b68c5b3c078cac02588bc23f3c04bb828c5d3aedd17980876ec6a7be6" +dependencies = [ + "syn", +] + [[package]] name = "system-configuration" version = "0.5.0" diff --git a/vm/src/function/protocol.rs b/vm/src/function/protocol.rs index de18517ce..02c179b4a 100644 --- a/vm/src/function/protocol.rs +++ b/vm/src/function/protocol.rs @@ -4,6 +4,7 @@ use crate::{ convert::ToPyObject, identifier, protocol::{PyIter, PyIterIter, PyMapping, PyMappingMethods}, + types::AsMapping, AsObject, PyObject, PyObjectRef, PyPayload, PyResult, TryFromObject, VirtualMachine, }; use std::{borrow::Borrow, marker::PhantomData}; @@ -110,7 +111,7 @@ impl ArgMapping { pub fn from_dict_exact(dict: PyDictRef) -> Self { Self { obj: dict.into(), - mapping_methods: PyDict::MAPPING_METHODS, + mapping_methods: PyDict::AS_MAPPING, } } diff --git a/vm/src/types/slot.rs b/vm/src/types/slot.rs index b626327e9..d7bbaed1f 100644 --- a/vm/src/types/slot.rs +++ b/vm/src/types/slot.rs @@ -896,15 +896,14 @@ pub trait AsBuffer: PyPayload { #[pyimpl] pub trait AsMapping: PyPayload { + const AS_MAPPING: PyMappingMethods; + #[inline] #[pyslot] - fn slot_as_mapping(zelf: &PyObject, vm: &VirtualMachine) -> PyMappingMethods { - let zelf = unsafe { zelf.downcast_unchecked_ref::() }; - Self::as_mapping(zelf, vm) + fn as_mapping(_zelf: &PyObject, _vm: &VirtualMachine) -> PyMappingMethods { + Self::AS_MAPPING } - fn as_mapping(zelf: &Py, vm: &VirtualMachine) -> PyMappingMethods; - fn mapping_downcast<'a>(mapping: &'a PyMapping) -> &'a Py { unsafe { mapping.obj.downcast_unchecked_ref() } }