mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Preserve missing caller modules in eager type aliases (#9073)
Only lazy aliases may obtain their module from the evaluation function. Eager aliases without a caller __name__ must not inspect their stored value. Assisted-by: OpenAI Codex:model identifier unavailable
This commit is contained in:
1 parent
1ff5bbd920
commit
44858012f4
2 files changed
+24
-1
No files matched your search
@@ -321,7 +321,9 @@ pub(crate) mod decl {
|
||||
return module.clone();
|
||||
}
|
||||
// Fall back to compute_value's __module__ (like PyFunction_GetModule)
|
||||
if let Ok(module) = self.compute_value.get_attr("__module__", vm) {
|
||||
if self.is_lazy
|
||||
&& let Ok(module) = self.compute_value.get_attr("__module__", vm)
|
||||
{
|
||||
return module;
|
||||
}
|
||||
vm.ctx.none()
|
||||
|
||||
@@ -63,3 +63,24 @@ try:
|
||||
repr(nested)
|
||||
except RecursionError:
|
||||
pass
|
||||
|
||||
|
||||
# Eager aliases without a caller module never inspect their aliased value.
|
||||
alias_module_lookups = []
|
||||
|
||||
|
||||
class AliasModuleValue:
|
||||
@property
|
||||
def __module__(self):
|
||||
alias_module_lookups.append(True)
|
||||
return "unexpected_value_module"
|
||||
|
||||
|
||||
for alias_value in (int, AliasModuleValue()):
|
||||
alias_namespace = {"value": alias_value}
|
||||
exec(
|
||||
"from typing import TypeAliasType; alias = TypeAliasType('Alias', value)",
|
||||
alias_namespace,
|
||||
)
|
||||
assert alias_namespace["alias"].__module__ is None
|
||||
assert alias_module_lookups == []
|
||||
Reference in new issue
Block a user