mirror of
https://github.com/python/cpython.git
synced 2025-08-29 05:05:03 +00:00
bpo-38605: Make 'from __future__ import annotations' the default (GH-20434)
The hard part was making all the tests pass; there are some subtle issues here, because apparently the future import wasn't tested very thoroughly in previous Python versions. For example, `inspect.signature()` returned type objects normally (except for forward references), but strings with the future import. We changed it to try and return type objects by calling `typing.get_type_hints()`, but fall back on returning strings if that function fails (which it may do if there are future references in the annotations that require passing in a specific namespace to resolve).
This commit is contained in:
parent
bef7d299eb
commit
044a1048ca
27 changed files with 403 additions and 299 deletions
|
@ -2026,12 +2026,7 @@ compiler_visit_argannotation(struct compiler *c, identifier id,
|
|||
{
|
||||
if (annotation) {
|
||||
PyObject *mangled;
|
||||
if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) {
|
||||
VISIT(c, annexpr, annotation)
|
||||
}
|
||||
else {
|
||||
VISIT(c, expr, annotation);
|
||||
}
|
||||
VISIT(c, annexpr, annotation);
|
||||
mangled = _Py_Mangle(c->u->u_private, id);
|
||||
if (!mangled)
|
||||
return 0;
|
||||
|
@ -5261,12 +5256,7 @@ compiler_annassign(struct compiler *c, stmt_ty s)
|
|||
if (s->v.AnnAssign.simple &&
|
||||
(c->u->u_scope_type == COMPILER_SCOPE_MODULE ||
|
||||
c->u->u_scope_type == COMPILER_SCOPE_CLASS)) {
|
||||
if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) {
|
||||
VISIT(c, annexpr, s->v.AnnAssign.annotation)
|
||||
}
|
||||
else {
|
||||
VISIT(c, expr, s->v.AnnAssign.annotation);
|
||||
}
|
||||
VISIT(c, annexpr, s->v.AnnAssign.annotation);
|
||||
ADDOP_NAME(c, LOAD_NAME, __annotations__, names);
|
||||
mangled = _Py_Mangle(c->u->u_private, targ->v.Name.id);
|
||||
ADDOP_LOAD_CONST_NEW(c, mangled);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue