mirror of
https://github.com/python/cpython
synced 2024-09-05 00:05:39 +00:00
gh-99606: Make code generated for an empty f-string identical to that of a normal empty string (#112407)
This commit is contained in:
parent
418d585feb
commit
fb202af447
|
@ -8,6 +8,7 @@
|
|||
# Unicode identifiers in tests is allowed by PEP 3131.
|
||||
|
||||
import ast
|
||||
import dis
|
||||
import os
|
||||
import re
|
||||
import types
|
||||
|
@ -1738,5 +1739,14 @@ def test_syntax_warning_infinite_recursion_in_file(self):
|
|||
self.assertIn(rb'\1', stdout)
|
||||
self.assertEqual(len(stderr.strip().splitlines()), 2)
|
||||
|
||||
def test_fstring_without_formatting_bytecode(self):
|
||||
# f-string without any formatting should emit the same bytecode
|
||||
# as a normal string. See gh-99606.
|
||||
def get_code(s):
|
||||
return [(i.opname, i.oparg) for i in dis.get_instructions(s)]
|
||||
|
||||
for s in ["", "some string"]:
|
||||
self.assertEqual(get_code(f"'{s}'"), get_code(f"f'{s}'"))
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Make code generated for an empty f-string identical to the code of an empty
|
||||
normal string.
|
|
@ -5042,8 +5042,12 @@ compiler_joined_str(struct compiler *c, expr_ty e)
|
|||
}
|
||||
else {
|
||||
VISIT_SEQ(c, expr, e->v.JoinedStr.values);
|
||||
if (asdl_seq_LEN(e->v.JoinedStr.values) != 1) {
|
||||
ADDOP_I(c, loc, BUILD_STRING, asdl_seq_LEN(e->v.JoinedStr.values));
|
||||
if (value_count > 1) {
|
||||
ADDOP_I(c, loc, BUILD_STRING, value_count);
|
||||
}
|
||||
else if (value_count == 0) {
|
||||
_Py_DECLARE_STR(empty, "");
|
||||
ADDOP_LOAD_CONST_NEW(c, loc, Py_NewRef(&_Py_STR(empty)));
|
||||
}
|
||||
}
|
||||
return SUCCESS;
|
||||
|
|
Loading…
Reference in a new issue