Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions Lib/test/test_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -1285,8 +1285,6 @@ def check_overflow(self, lower, upper):
self.assertRaises(OverflowError, array.array, self.typecode, [upper+1])
self.assertRaises(OverflowError, a.__setitem__, 0, upper+1)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_subclassing(self):
typecode = self.typecode
class ExaggeratingArray(array.array):
Expand Down
2 changes: 0 additions & 2 deletions Lib/test/test_importlib/test_metadata_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,6 @@ def test_entry_points_missing_name(self):
def test_entry_points_missing_group(self):
assert entry_points(group='missing') == ()

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_entry_points_allows_no_attributes(self):
ep = entry_points().select(group='entries', name='main')
with self.assertRaises(AttributeError):
Expand Down
2 changes: 0 additions & 2 deletions Lib/test/test_property.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,8 +242,6 @@ class PropertySubSlots(property):

class PropertySubclassTests(unittest.TestCase):

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_slots_docstring_copy_exception(self):
try:
class Foo(object):
Expand Down
2 changes: 0 additions & 2 deletions Lib/test/test_weakref.py
Original file line number Diff line number Diff line change
Expand Up @@ -1132,8 +1132,6 @@ class MyRef(weakref.ref):
self.assertIn(r1, refs)
self.assertIn(r2, refs)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_subclass_refs_with_slots(self):
class MyRef(weakref.ref):
__slots__ = "slot1", "slot2"
Expand Down
10 changes: 6 additions & 4 deletions vm/src/builtins/type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1038,9 +1038,6 @@ impl Constructor for PyType {
});
}

// TODO: Flags is currently initialized with HAS_DICT. Should be
// updated when __slots__ are supported (toggling the flag off if
// a class has __slots__ defined).
let heaptype_slots: Option<PyRef<PyTuple<PyStrRef>>> =
if let Some(x) = attributes.get(identifier!(vm, __slots__)) {
let slots = if x.class().is(vm.ctx.types.str_type) {
Expand Down Expand Up @@ -1072,7 +1069,12 @@ impl Constructor for PyType {
let heaptype_member_count = heaptype_slots.as_ref().map(|x| x.len()).unwrap_or(0);
let member_count: usize = base_member_count + heaptype_member_count;

let flags = PyTypeFlags::heap_type_flags() | PyTypeFlags::HAS_DICT;
let mut flags = PyTypeFlags::heap_type_flags();
// Only add HAS_DICT and MANAGED_DICT if __slots__ is not defined.
if heaptype_slots.is_none() {
flags |= PyTypeFlags::HAS_DICT | PyTypeFlags::MANAGED_DICT;
}

Comment on lines +1072 to +1077
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about splitting the patch one to contains this part and the other one contains the test_class part? I'd like to merge the test_class part as the same form of CPython patch, but this one doesn't need to be.

Copy link
Contributor Author

@ever0de ever0de Jul 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll split the test_class part into a new PR.

let (slots, heaptype_ext) = {
let slots = PyTypeSlots {
flags,
Expand Down
1 change: 1 addition & 0 deletions vm/src/types/slot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ bitflags! {
#[derive(Copy, Clone, Debug, PartialEq)]
#[non_exhaustive]
pub struct PyTypeFlags: u64 {
const MANAGED_DICT = 1 << 4;
const IMMUTABLETYPE = 1 << 8;
const HEAPTYPE = 1 << 9;
const BASETYPE = 1 << 10;
Expand Down
Loading