Skip to content

Commit da440db

Browse files
authored
type.__new__: preserve caller namespace when reading __qualname__ (RustPython#7524)
* type.__new__: preserve caller namespace when reading __qualname__ * type.__new__: preserve caller namespace when reading __qualname__
1 parent 1a9b10e commit da440db

2 files changed

Lines changed: 3 additions & 2 deletions

File tree

Lib/test/test_descr.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4987,7 +4987,6 @@ class Inside:
49874987
self.assertEqual(Y.__qualname__, 'Y')
49884988
self.assertEqual(Y.Inside.__qualname__, 'Y.Inside')
49894989

4990-
@unittest.expectedFailure # TODO: RUSTPYTHON
49914990
def test_qualname_dict(self):
49924991
ns = {'__qualname__': 'some.name'}
49934992
tp = type('Foo', (), ns)

crates/vm/src/builtins/type.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1868,14 +1868,16 @@ impl Constructor for PyType {
18681868
};
18691869

18701870
let qualname = dict
1871-
.pop_item(identifier!(vm, __qualname__).as_object(), vm)?
1871+
.get_item_opt(identifier!(vm, __qualname__), vm)?
18721872
.map(|obj| downcast_qualname(obj, vm))
18731873
.transpose()?
18741874
.unwrap_or_else(|| {
18751875
// If __qualname__ is not provided, we can use the name as default
18761876
name.clone().into_wtf8()
18771877
});
1878+
18781879
let mut attributes = dict.to_attributes(vm);
1880+
attributes.shift_remove(identifier!(vm, __qualname__));
18791881

18801882
// Check __doc__ for surrogates - raises UnicodeEncodeError during type creation
18811883
if let Some(doc) = attributes.get(identifier!(vm, __doc__))

0 commit comments

Comments
 (0)