mirror of
https://github.com/python/cpython.git
synced 2025-10-31 21:51:50 +00:00
[3.14] gh-138372: Fix SyntaxWarning for erroneous t-string subscription (GH-138375) (#138392)
gh-138372: Fix SyntaxWarning for erroneous t-string subscription (GH-138375)
(cherry picked from commit 5493b46462)
Co-authored-by: Brian Schubert <brianm.schubert@gmail.com>
This commit is contained in:
parent
5ec6d56405
commit
192ae9b86d
3 changed files with 12 additions and 7 deletions
|
|
@ -1554,6 +1554,8 @@ def check(test):
|
||||||
check('[None [i, j]]')
|
check('[None [i, j]]')
|
||||||
check('[True [i, j]]')
|
check('[True [i, j]]')
|
||||||
check('[... [i, j]]')
|
check('[... [i, j]]')
|
||||||
|
check('[t"{x}" [i, j]]')
|
||||||
|
check('[t"x={x}" [i, j]]')
|
||||||
|
|
||||||
msg=r'indices must be integers or slices, not tuple; perhaps you missed a comma\?'
|
msg=r'indices must be integers or slices, not tuple; perhaps you missed a comma\?'
|
||||||
check('[(1, 2) [i, j]]')
|
check('[(1, 2) [i, j]]')
|
||||||
|
|
@ -1564,8 +1566,6 @@ def check(test):
|
||||||
check('[f"x={x}" [i, j]]')
|
check('[f"x={x}" [i, j]]')
|
||||||
check('["abc" [i, j]]')
|
check('["abc" [i, j]]')
|
||||||
check('[b"abc" [i, j]]')
|
check('[b"abc" [i, j]]')
|
||||||
check('[t"{x}" [i, j]]')
|
|
||||||
check('[t"x={x}" [i, j]]')
|
|
||||||
|
|
||||||
msg=r'indices must be integers or slices, not tuple;'
|
msg=r'indices must be integers or slices, not tuple;'
|
||||||
check('[[1, 2] [3, 4]]')
|
check('[[1, 2] [3, 4]]')
|
||||||
|
|
@ -1586,6 +1586,7 @@ def check(test):
|
||||||
check('[[1, 2] [f"{x}"]]')
|
check('[[1, 2] [f"{x}"]]')
|
||||||
check('[[1, 2] [f"x={x}"]]')
|
check('[[1, 2] [f"x={x}"]]')
|
||||||
check('[[1, 2] ["abc"]]')
|
check('[[1, 2] ["abc"]]')
|
||||||
|
msg=r'indices must be integers or slices, not string.templatelib.Template;'
|
||||||
check('[[1, 2] [t"{x}"]]')
|
check('[[1, 2] [t"{x}"]]')
|
||||||
check('[[1, 2] [t"x={x}"]]')
|
check('[[1, 2] [t"x={x}"]]')
|
||||||
msg=r'indices must be integers or slices, not'
|
msg=r'indices must be integers or slices, not'
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix :exc:`SyntaxWarning` emitted for erroneous subscript expressions involving
|
||||||
|
:ref:`template string literals <t-strings>`. Patch by Brian Schubert.
|
||||||
|
|
@ -29,6 +29,7 @@
|
||||||
#include "pycore_symtable.h" // PySTEntryObject
|
#include "pycore_symtable.h" // PySTEntryObject
|
||||||
#include "pycore_unicodeobject.h" // _PyUnicode_EqualToASCIIString
|
#include "pycore_unicodeobject.h" // _PyUnicode_EqualToASCIIString
|
||||||
#include "pycore_ceval.h" // SPECIAL___ENTER__
|
#include "pycore_ceval.h" // SPECIAL___ENTER__
|
||||||
|
#include "pycore_template.h" // _PyTemplate_Type
|
||||||
|
|
||||||
#define NEED_OPCODE_METADATA
|
#define NEED_OPCODE_METADATA
|
||||||
#include "pycore_opcode_metadata.h" // _PyOpcode_opcode_metadata, _PyOpcode_num_popped/pushed
|
#include "pycore_opcode_metadata.h" // _PyOpcode_opcode_metadata, _PyOpcode_num_popped/pushed
|
||||||
|
|
@ -3607,10 +3608,11 @@ infer_type(expr_ty e)
|
||||||
return &PyGen_Type;
|
return &PyGen_Type;
|
||||||
case Lambda_kind:
|
case Lambda_kind:
|
||||||
return &PyFunction_Type;
|
return &PyFunction_Type;
|
||||||
case JoinedStr_kind:
|
|
||||||
case TemplateStr_kind:
|
case TemplateStr_kind:
|
||||||
case FormattedValue_kind:
|
|
||||||
case Interpolation_kind:
|
case Interpolation_kind:
|
||||||
|
return &_PyTemplate_Type;
|
||||||
|
case JoinedStr_kind:
|
||||||
|
case FormattedValue_kind:
|
||||||
return &PyUnicode_Type;
|
return &PyUnicode_Type;
|
||||||
case Constant_kind:
|
case Constant_kind:
|
||||||
return Py_TYPE(e->v.Constant.value);
|
return Py_TYPE(e->v.Constant.value);
|
||||||
|
|
@ -3664,6 +3666,8 @@ check_subscripter(compiler *c, expr_ty e)
|
||||||
case Set_kind:
|
case Set_kind:
|
||||||
case SetComp_kind:
|
case SetComp_kind:
|
||||||
case GeneratorExp_kind:
|
case GeneratorExp_kind:
|
||||||
|
case TemplateStr_kind:
|
||||||
|
case Interpolation_kind:
|
||||||
case Lambda_kind: {
|
case Lambda_kind: {
|
||||||
location loc = LOC(e);
|
location loc = LOC(e);
|
||||||
return _PyCompile_Warn(c, loc, "'%.200s' object is not subscriptable; "
|
return _PyCompile_Warn(c, loc, "'%.200s' object is not subscriptable; "
|
||||||
|
|
@ -3698,9 +3702,7 @@ check_index(compiler *c, expr_ty e, expr_ty s)
|
||||||
case List_kind:
|
case List_kind:
|
||||||
case ListComp_kind:
|
case ListComp_kind:
|
||||||
case JoinedStr_kind:
|
case JoinedStr_kind:
|
||||||
case TemplateStr_kind:
|
case FormattedValue_kind: {
|
||||||
case FormattedValue_kind:
|
|
||||||
case Interpolation_kind: {
|
|
||||||
location loc = LOC(e);
|
location loc = LOC(e);
|
||||||
return _PyCompile_Warn(c, loc, "%.200s indices must be integers "
|
return _PyCompile_Warn(c, loc, "%.200s indices must be integers "
|
||||||
"or slices, not %.200s; "
|
"or slices, not %.200s; "
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue