diff options
author | Jelle Zijlstra <jelle.zijlstra@gmail.com> | 2024-07-27 17:24:10 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-27 17:24:10 (GMT) |
commit | ae192262ad1cffb6ece9d16e67804386c382be0c (patch) | |
tree | 301564405a80de59fd6b04e508166a759ff434d0 /Python/symtable.c | |
parent | cbac8a3888411587beb026e246889154fbdd49a3 (diff) | |
download | cpython-ae192262ad1cffb6ece9d16e67804386c382be0c.zip cpython-ae192262ad1cffb6ece9d16e67804386c382be0c.tar.gz cpython-ae192262ad1cffb6ece9d16e67804386c382be0c.tar.bz2 |
gh-119180: Add evaluate functions for type params and type aliases (#122212)
Diffstat (limited to 'Python/symtable.c')
-rw-r--r-- | Python/symtable.c | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/Python/symtable.c b/Python/symtable.c index a5fa758..88af371 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -260,6 +260,7 @@ static int symtable_visit_pattern(struct symtable *st, pattern_ty s); static int symtable_raise_if_annotation_block(struct symtable *st, const char *, expr_ty); static int symtable_raise_if_not_coroutine(struct symtable *st, const char *msg, _Py_SourceLocation loc); static int symtable_raise_if_comprehension_block(struct symtable *st, expr_ty); +static int symtable_add_def(struct symtable *st, PyObject *name, int flag, _Py_SourceLocation loc); /* For debugging purposes only */ #if _PY_DUMP_SYMTABLE @@ -1388,6 +1389,16 @@ symtable_enter_block(struct symtable *st, identifier name, _Py_block_ty block, return 0; int result = symtable_enter_existing_block(st, ste); Py_DECREF(ste); + if (block == AnnotationBlock || block == TypeVariableBlock || block == TypeAliasBlock) { + _Py_DECLARE_STR(format, ".format"); + // We need to insert code that reads this "parameter" to the function. + if (!symtable_add_def(st, &_Py_STR(format), DEF_PARAM, loc)) { + return 0; + } + if (!symtable_add_def(st, &_Py_STR(format), USE, loc)) { + return 0; + } + } return result; } @@ -2630,18 +2641,6 @@ symtable_visit_annotation(struct symtable *st, expr_ty annotation, void *key) return 0; } } - - _Py_DECLARE_STR(format, ".format"); - // The generated __annotate__ function takes a single parameter with the - // internal name ".format". - if (!symtable_add_def(st, &_Py_STR(format), DEF_PARAM, - LOCATION(annotation))) { - return 0; - } - if (!symtable_add_def(st, &_Py_STR(format), USE, - LOCATION(annotation))) { - return 0; - } } else { if (!symtable_enter_existing_block(st, parent_ste->ste_annotation_block)) { @@ -2690,14 +2689,6 @@ symtable_visit_annotations(struct symtable *st, stmt_ty o, arguments_ty a, expr_ return 0; } } - _Py_DECLARE_STR(format, ".format"); - // We need to insert code that reads this "parameter" to the function. - if (!symtable_add_def(st, &_Py_STR(format), DEF_PARAM, LOCATION(o))) { - return 0; - } - if (!symtable_add_def(st, &_Py_STR(format), USE, LOCATION(o))) { - return 0; - } if (a->posonlyargs && !symtable_visit_argannotations(st, a->posonlyargs)) return 0; if (a->args && !symtable_visit_argannotations(st, a->args)) |