Skip to content

Commit 1f8ef0a

Browse files
authored
sequence, mapping slots and fix separate __delitem__ slots (RustPython#6621)
* fix call * Remove repr pymethod * Remove __get__ and __set__ pymethod * Remove __contains__ pymethod * Remove __len__ pymethod * mapping priors sequence * fix ctypes
1 parent b19312b commit 1f8ef0a

22 files changed

Lines changed: 171 additions & 110 deletions

crates/stdlib/src/array.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,6 @@ mod array {
11021102
Ok(zelf)
11031103
}
11041104

1105-
#[pymethod]
11061105
pub(crate) fn __len__(&self) -> usize {
11071106
self.read().len()
11081107
}
@@ -1177,7 +1176,6 @@ mod array {
11771176
))
11781177
}
11791178

1180-
#[pymethod]
11811179
fn __contains__(&self, value: PyObjectRef, vm: &VirtualMachine) -> bool {
11821180
let array = self.array.read();
11831181
for element in array

crates/stdlib/src/contextvars.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,6 @@ mod _contextvars {
202202
Ok(item.to_owned())
203203
}
204204

205-
#[pymethod]
206205
fn __len__(&self) -> usize {
207206
self.borrow_vars().len()
208207
}

crates/stdlib/src/mmap.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,6 @@ mod mmap {
731731
.into()
732732
}
733733

734-
#[pymethod]
735734
fn __len__(&self) -> usize {
736735
self.size.load()
737736
}

crates/vm/src/builtins/bytearray.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@ impl PyByteArray {
219219
self.inner().add(&other.borrow_buf()).into()
220220
}
221221

222-
#[pymethod]
223222
fn __contains__(
224223
&self,
225224
needle: Either<PyBytesInner, PyIntRef>,

crates/vm/src/builtins/bytes.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ impl PyBytes {
228228
self.inner.add(&other.borrow_buf())
229229
}
230230

231-
#[pymethod]
232231
fn __contains__(
233232
&self,
234233
needle: Either<PyBytesInner, PyIntRef>,

crates/vm/src/builtins/descriptor.rs

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -428,13 +428,15 @@ pub enum SlotFunc {
428428
SeqConcat(SeqConcatFunc),
429429
SeqRepeat(SeqRepeatFunc),
430430
SeqItem(SeqItemFunc),
431-
SeqAssItem(SeqAssItemFunc),
431+
SeqSetItem(SeqAssItemFunc), // __setitem__ (same func type, value = Some)
432+
SeqDelItem(SeqAssItemFunc), // __delitem__ (same func type, value = None)
432433
SeqContains(SeqContainsFunc),
433434

434435
// Mapping sub-slots (mp_*)
435436
MapLength(MapLenFunc),
436437
MapSubscript(MapSubscriptFunc),
437-
MapAssSubscript(MapAssSubscriptFunc),
438+
MapSetSubscript(MapAssSubscriptFunc), // __setitem__ (same func type, value = Some)
439+
MapDelSubscript(MapAssSubscriptFunc), // __delitem__ (same func type, value = None)
438440

439441
// Number sub-slots (nb_*) - grouped by signature
440442
NumBoolean(PyNumberUnaryFunc<bool>), // __bool__
@@ -468,12 +470,14 @@ impl core::fmt::Debug for SlotFunc {
468470
SlotFunc::SeqConcat(_) => write!(f, "SlotFunc::SeqConcat(...)"),
469471
SlotFunc::SeqRepeat(_) => write!(f, "SlotFunc::SeqRepeat(...)"),
470472
SlotFunc::SeqItem(_) => write!(f, "SlotFunc::SeqItem(...)"),
471-
SlotFunc::SeqAssItem(_) => write!(f, "SlotFunc::SeqAssItem(...)"),
473+
SlotFunc::SeqSetItem(_) => write!(f, "SlotFunc::SeqSetItem(...)"),
474+
SlotFunc::SeqDelItem(_) => write!(f, "SlotFunc::SeqDelItem(...)"),
472475
SlotFunc::SeqContains(_) => write!(f, "SlotFunc::SeqContains(...)"),
473476
// Mapping sub-slots
474477
SlotFunc::MapLength(_) => write!(f, "SlotFunc::MapLength(...)"),
475478
SlotFunc::MapSubscript(_) => write!(f, "SlotFunc::MapSubscript(...)"),
476-
SlotFunc::MapAssSubscript(_) => write!(f, "SlotFunc::MapAssSubscript(...)"),
479+
SlotFunc::MapSetSubscript(_) => write!(f, "SlotFunc::MapSetSubscript(...)"),
480+
SlotFunc::MapDelSubscript(_) => write!(f, "SlotFunc::MapDelSubscript(...)"),
477481
// Number sub-slots
478482
SlotFunc::NumBoolean(_) => write!(f, "SlotFunc::NumBoolean(...)"),
479483
SlotFunc::NumUnary(_) => write!(f, "SlotFunc::NumUnary(...)"),
@@ -600,10 +604,14 @@ impl SlotFunc {
600604
let (index,): (isize,) = args.bind(vm)?;
601605
func(obj.sequence_unchecked(), index, vm)
602606
}
603-
SlotFunc::SeqAssItem(func) => {
604-
let (index, value): (isize, crate::function::OptionalArg<PyObjectRef>) =
605-
args.bind(vm)?;
606-
func(obj.sequence_unchecked(), index, value.into_option(), vm)?;
607+
SlotFunc::SeqSetItem(func) => {
608+
let (index, value): (isize, PyObjectRef) = args.bind(vm)?;
609+
func(obj.sequence_unchecked(), index, Some(value), vm)?;
610+
Ok(vm.ctx.none())
611+
}
612+
SlotFunc::SeqDelItem(func) => {
613+
let (index,): (isize,) = args.bind(vm)?;
614+
func(obj.sequence_unchecked(), index, None, vm)?;
607615
Ok(vm.ctx.none())
608616
}
609617
SlotFunc::SeqContains(func) => {
@@ -621,10 +629,14 @@ impl SlotFunc {
621629
let (key,): (PyObjectRef,) = args.bind(vm)?;
622630
func(obj.mapping_unchecked(), &key, vm)
623631
}
624-
SlotFunc::MapAssSubscript(func) => {
625-
let (key, value): (PyObjectRef, crate::function::OptionalArg<PyObjectRef>) =
626-
args.bind(vm)?;
627-
func(obj.mapping_unchecked(), &key, value.into_option(), vm)?;
632+
SlotFunc::MapSetSubscript(func) => {
633+
let (key, value): (PyObjectRef, PyObjectRef) = args.bind(vm)?;
634+
func(obj.mapping_unchecked(), &key, Some(value), vm)?;
635+
Ok(vm.ctx.none())
636+
}
637+
SlotFunc::MapDelSubscript(func) => {
638+
let (key,): (PyObjectRef,) = args.bind(vm)?;
639+
func(obj.mapping_unchecked(), &key, None, vm)?;
628640
Ok(vm.ctx.none())
629641
}
630642
// Number sub-slots

crates/vm/src/builtins/dict.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,6 @@ impl PyDict {
221221
core::mem::size_of::<Self>() + self.entries.sizeof()
222222
}
223223

224-
#[pymethod]
225224
fn __contains__(&self, key: PyObjectRef, vm: &VirtualMachine) -> PyResult<bool> {
226225
self.entries.contains(vm, &*key)
227226
}
@@ -1130,7 +1129,6 @@ impl ViewSetOps for PyDictKeys {}
11301129
)
11311130
)]
11321131
impl PyDictKeys {
1133-
#[pymethod]
11341132
fn __contains__(zelf: PyObjectRef, key: PyObjectRef, vm: &VirtualMachine) -> PyResult<bool> {
11351133
zelf.sequence_unchecked().contains(&key, vm)
11361134
}
@@ -1195,7 +1193,6 @@ impl ViewSetOps for PyDictItems {}
11951193
)
11961194
)]
11971195
impl PyDictItems {
1198-
#[pymethod]
11991196
fn __contains__(zelf: PyObjectRef, needle: PyObjectRef, vm: &VirtualMachine) -> PyResult<bool> {
12001197
zelf.sequence_unchecked().contains(&needle, vm)
12011198
}

crates/vm/src/builtins/getset.rs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -118,19 +118,6 @@ impl PyGetSet {
118118
)))
119119
}
120120
}
121-
#[pymethod]
122-
fn __set__(
123-
zelf: PyObjectRef,
124-
obj: PyObjectRef,
125-
value: PyObjectRef,
126-
vm: &VirtualMachine,
127-
) -> PyResult<()> {
128-
Self::descr_set(&zelf, obj, PySetterValue::Assign(value), vm)
129-
}
130-
#[pymethod]
131-
fn __delete__(zelf: PyObjectRef, obj: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> {
132-
Self::descr_set(&zelf, obj, PySetterValue::Delete, vm)
133-
}
134121

135122
#[pygetset]
136123
fn __name__(&self) -> String {

crates/vm/src/builtins/list.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,6 @@ impl PyList {
251251
self.mut_count(vm, &needle)
252252
}
253253

254-
#[pymethod]
255254
pub(crate) fn __contains__(&self, needle: PyObjectRef, vm: &VirtualMachine) -> PyResult<bool> {
256255
self.mut_contains(vm, &needle)
257256
}

crates/vm/src/builtins/mappingproxy.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ impl PyMappingProxy {
128128
}
129129
}
130130

131-
#[pymethod]
132131
pub fn __contains__(&self, key: PyObjectRef, vm: &VirtualMachine) -> PyResult<bool> {
133132
self._contains(&key, vm)
134133
}

0 commit comments

Comments
 (0)