mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
* Fixes `type.__module__` issue, refs #2310
This commit is contained in:
1 parent
3e1bfe81eb
commit
4890f09c57
2 files changed
+62
No files matched your search
@@ -0,0 +1,46 @@
|
||||
assert type.__module__ == 'builtins'
|
||||
assert type.__qualname__ == 'type'
|
||||
assert type.__name__ == 'type'
|
||||
assert isinstance(type.__doc__, str)
|
||||
assert object.__qualname__ == 'object'
|
||||
assert int.__qualname__ == 'int'
|
||||
|
||||
|
||||
class A(type):
|
||||
pass
|
||||
|
||||
|
||||
class B(type):
|
||||
__module__ = 'b'
|
||||
__qualname__ = 'BB'
|
||||
|
||||
|
||||
class C:
|
||||
pass
|
||||
|
||||
|
||||
class D:
|
||||
__module__ = 'd'
|
||||
__qualname__ = 'DD'
|
||||
|
||||
|
||||
assert A.__module__ == '__main__'
|
||||
assert A.__qualname__ == 'A'
|
||||
assert B.__module__ == 'b'
|
||||
assert B.__qualname__ == 'BB'
|
||||
assert C.__module__ == '__main__'
|
||||
assert C.__qualname__ == 'C'
|
||||
assert D.__module__ == 'd'
|
||||
assert D.__qualname__ == 'DD'
|
||||
|
||||
|
||||
# Regression to
|
||||
# https://github.com/RustPython/RustPython/issues/2310
|
||||
import builtins
|
||||
assert builtins.iter.__class__.__module__ == 'builtins'
|
||||
assert builtins.iter.__class__.__qualname__ == 'builtin_function_or_method'
|
||||
|
||||
assert iter.__class__.__module__ == 'builtins'
|
||||
assert iter.__class__.__qualname__ == 'builtin_function_or_method'
|
||||
assert type(iter).__module__ == 'builtins'
|
||||
assert type(iter).__qualname__ == 'builtin_function_or_method'
|
||||
@@ -306,6 +306,14 @@ impl PyType {
|
||||
.read()
|
||||
.get("__qualname__")
|
||||
.cloned()
|
||||
// We need to exclude this method from going into recursion:
|
||||
.and_then(|found| {
|
||||
if found.isinstance(&vm.ctx.types.getset_type) {
|
||||
None
|
||||
} else {
|
||||
Some(found)
|
||||
}
|
||||
})
|
||||
.unwrap_or_else(|| vm.ctx.new_str(self.name.clone()))
|
||||
}
|
||||
|
||||
@@ -316,6 +324,14 @@ impl PyType {
|
||||
.read()
|
||||
.get("__module__")
|
||||
.cloned()
|
||||
// We need to exclude this method from going into recursion:
|
||||
.and_then(|found| {
|
||||
if found.isinstance(&vm.ctx.types.getset_type) {
|
||||
None
|
||||
} else {
|
||||
Some(found)
|
||||
}
|
||||
})
|
||||
.unwrap_or_else(|| vm.ctx.new_str("builtins"))
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user