Fixes type.__module__ issue, refs #2310 (#2763)

* Fixes `type.__module__` issue, refs #2310
This commit is contained in:
Nikita Sobolev authored and GitHub committed 2021-07-30 19:09:48 +03:00
1 parent 3e1bfe81eb
commit 4890f09c57
2 files changed
+62

No files matched your search

+46
View File
@@ -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'
+16
View File
@@ -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"))
}