From 987337ecaec6c9099d2d2206624492bfafaac62d Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Tue, 20 Feb 2024 05:09:11 +1100 Subject: [PATCH] runtime(python): Add f-string support Fixes #14033. Signed-off-by: Doug Kearns --- runtime/syntax/python.vim | 97 ++- .../testdir/dumps/python_fstring_00.dump | 20 + .../testdir/dumps/python_fstring_01.dump | 20 + .../testdir/dumps/python_fstring_02.dump | 20 + .../testdir/dumps/python_fstring_03.dump | 20 + .../testdir/dumps/python_fstring_04.dump | 20 + .../testdir/dumps/python_fstring_05.dump | 20 + .../testdir/dumps/python_fstring_06.dump | 20 + .../testdir/dumps/python_fstring_07.dump | 20 + .../testdir/dumps/python_fstring_08.dump | 20 + .../testdir/dumps/python_fstring_09.dump | 20 + .../testdir/dumps/python_fstring_10.dump | 20 + .../testdir/dumps/python_fstring_11.dump | 20 + .../testdir/dumps/python_fstring_12.dump | 20 + .../testdir/dumps/python_fstring_13.dump | 20 + .../testdir/dumps/python_fstring_14.dump | 20 + .../testdir/dumps/python_fstring_15.dump | 20 + .../testdir/dumps/python_fstring_16.dump | 20 + .../testdir/dumps/python_fstring_17.dump | 20 + .../testdir/dumps/python_fstring_18.dump | 20 + .../testdir/dumps/python_fstring_19.dump | 20 + .../testdir/dumps/python_fstring_20.dump | 20 + .../testdir/dumps/python_fstring_21.dump | 20 + .../testdir/dumps/python_fstring_22.dump | 20 + .../testdir/dumps/python_fstring_23.dump | 20 + .../testdir/dumps/python_fstring_24.dump | 20 + .../testdir/dumps/python_fstring_25.dump | 20 + .../testdir/dumps/python_fstring_26.dump | 20 + .../testdir/dumps/python_fstring_27.dump | 20 + .../testdir/dumps/python_fstring_28.dump | 20 + .../testdir/dumps/python_fstring_29.dump | 20 + .../testdir/dumps/python_fstring_30.dump | 20 + .../testdir/dumps/python_fstring_31.dump | 20 + .../testdir/dumps/python_fstring_32.dump | 20 + .../testdir/dumps/python_fstring_33.dump | 20 + .../testdir/dumps/python_fstring_34.dump | 20 + .../syntax/testdir/input/python_fstring.py | 613 ++++++++++++++++++ 37 files changed, 1400 insertions(+), 10 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/python_fstring_00.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_01.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_02.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_03.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_04.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_05.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_06.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_07.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_08.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_09.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_10.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_11.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_12.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_13.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_14.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_15.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_16.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_17.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_18.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_19.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_20.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_21.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_22.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_23.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_24.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_25.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_26.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_27.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_28.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_29.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_30.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_31.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_32.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_33.dump create mode 100644 runtime/syntax/testdir/dumps/python_fstring_34.dump create mode 100644 runtime/syntax/testdir/input/python_fstring.py diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim index 7aa82f1b98..49fd7fc53e 100644 --- a/runtime/syntax/python.vim +++ b/runtime/syntax/python.vim @@ -122,18 +122,18 @@ syn match pythonDecoratorName "@\s*\h\%(\w\|\.\)*" display contains=pythonDeco " Single line multiplication. syn match pythonMatrixMultiply \ "\%(\w\|[])]\)\s*@" - \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue + \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue,@pythonFStringContained \ transparent " Multiplication continued on the next line after backslash. syn match pythonMatrixMultiply \ "[^\\]\\\s*\n\%(\s*\.\.\.\s\)\=\s\+@" - \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue + \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue,@pythonFStringContained \ transparent " Multiplication in a parenthesized expression over multiple lines with @ at " the start of each continued line; very similar to decorators and complex. syn match pythonMatrixMultiply \ "^\s*\%(\%(>>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s*\.\.\.\s\)\=\s\+@\)*" - \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue + \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue,@pythonFStringContained \ transparent syn match pythonFunction "\h\w*" display contained @@ -143,17 +143,35 @@ syn keyword pythonTodo FIXME NOTE NOTES TODO XXX contained " Triple-quoted strings can contain doctests. syn region pythonString matchgroup=pythonQuotes - \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" + \ start=+[uUbB]\=\z(['"]\)+ end="$\|\z1" skip="\\\\\|\\\z1" \ contains=pythonEscape,@Spell syn region pythonString matchgroup=pythonTripleQuotes - \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend + \ start=+[uUbB]\=\z('''\|"""\)+ end="\z1" keepend \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell syn region pythonRawString matchgroup=pythonQuotes - \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" + \ start=+\%([bB][rR]\=\|[rR][bB]\=\)\z(['"]\)+ + \ end="$\|\z1" skip="\\\\\|\\\r\=$\|\\\z1" \ contains=@Spell syn region pythonRawString matchgroup=pythonTripleQuotes - \ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend + \ start=+\%([bB][rR]\=\|[rR][bB]\=\)\z('''\|"""\)+ + \ end="\z1" keepend \ contains=pythonSpaceError,pythonDoctest,@Spell +syn region pythonFString matchgroup=pythonQuotes + \ start=+[fF]\z(['"]\)+ + \ end="$\|\z1" skip="\\\\\|\\\z1" + \ contains=pythonEscape,pythonFStringEscapedBrace,pythonFStringReplacement,@Spell +syn region pythonFString matchgroup=pythonTripleQuotes + \ start=+[fF]\z('''\|"""\)+ + \ end="\z1" keepend + \ contains=pythonEscape,pythonSpaceError,pythonFStringEscapedBrace,pythonFStringReplacement,pythonDoctest,@Spell +syn region pythonRawFString matchgroup=pythonQuotes + \ start=+\%([fF][rR]\|[rR][fF]\)\z(['"]\)+ + \ end="$\|\z1" skip="\\\\\|\\\r\=$\|\\\z1" + \ contains=pythonFStringEscapedBrace,pythonFStringReplacement,@Spell +syn region pythonRawFString matchgroup=pythonTripleQuotes + \ start=+\%([fF][rR]\|[rR][fF]\)\z('''\|"""\)+ + \ end="\z1" keepend + \ contains=pythonSpaceError,pythonFStringEscapedBrace,pythonFStringReplacement,pythonDoctest,@Spell syn match pythonEscape +\\[abfnrtv'"\\]+ contained syn match pythonEscape "\\\o\{1,3}" contained @@ -161,7 +179,62 @@ syn match pythonEscape "\\x\x\{2}" contained syn match pythonEscape "\%(\\u\x\{4}\|\\U\x\{8}\)" contained " Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/ syn match pythonEscape "\\N{\a\+\%(\s\a\+\)*}" contained -syn match pythonEscape "\\$" +syn match pythonEscape "\\\r\=$" + +" f-strings +" See https://docs.python.org/3/reference/lexical_analysis.html#formatted-string-literals +syn region pythonFStringReplacement matchgroup=pythonFStringBrace start=+{+ end=+}+ contained contains=pythonFStringExpression + +" Skip contained '[:!]' +" TODO: this should contain @pythonExpression rather than TOP +syn region pythonFStringBrackets + \ start="{" end="}" + \ contained contains=TOP + \ transparent +syn region pythonFStringBrackets + \ start="(" end=")" + \ contained contains=TOP + \ transparent +syn region pythonFStringBrackets + \ start="\[" end="]" + \ contained contains=TOP + \ transparent + +syn region pythonFStringReplacementWhitespace start="\s" end="\ze\S" contained nextgroup=pythonFStringConversion,pythonFStringFormatSpec + +" TODO: contains (yield_expr | star_expressions) +" True False None yield from if else for lambda await +syn cluster pythonExpression + \ contains=pythonNumber,python.*String,pythonOperator,pythonBuiltin,pythonAttribute,pythonComment,pythonFStringBrackets + +syn region pythonFStringExpression + \ start="." end="\ze[=!:}]" + \ contained contains=@pythonExpression + \ nextgroup=pythonFStringEquals,pythonFStringConversion,pythonFStringFormatSpec + +" TODO: it would be better to match pythonOperator with priority but symbolic +" operators are not currently matched +" skip operators +syn match pythonFStringEquals "[!<>=]\@1>>\s" end="^\s*$" - \ contained contains=ALLBUT,pythonDoctest,pythonFunction,@Spell + \ contained contains=ALLBUT,pythonDoctest,pythonFunction,@pythonFStringContained,@Spell syn region pythonDoctestValue \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$" \ contained @@ -312,9 +385,13 @@ hi def link pythonComment Comment hi def link pythonTodo Todo hi def link pythonString String hi def link pythonRawString String +hi def link pythonFString String +hi def link pythonRawFString String hi def link pythonQuotes String hi def link pythonTripleQuotes pythonQuotes hi def link pythonEscape Special +hi def link pythonFStringEscapedBrace Special +hi def link pythonFStringBrace Include if !exists("python_no_number_highlight") hi def link pythonNumber Number endif diff --git a/runtime/syntax/testdir/dumps/python_fstring_00.dump b/runtime/syntax/testdir/dumps/python_fstring_00.dump new file mode 100644 index 0000000000..ca850bc139 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0| |P|y|t|h|o|n| |f|-|s|t|r|i|n|g| |t|e|s|t|s| +0#0000000&@51 +@75 +|#+0#0000e05&| |P|y|t|h|o|n|-|3|.|1|2|.|2|/|L|i|b|/|t|e|s|t|/|t|e|s|t|_|f|s|t|r|i|n|g|.|p|y| |(|r|e|f|o|r|m|a|t@1|e|d| |f|o|r| |s|y|n|t|a|x| |t|e|s|t|i|n|g|)| +0#0000000&@1 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t| +0#0000000&@63 +|f+0#e000002&|'|{+0#e000e06&|a+0#0000000&| |*| |x|(|)|}+0#e000e06&|'+0#e000002&| +0#0000000&@62 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|l|i|n|e|_|n|u|m|b|e|r|s|_|m|u|l|t|i|p|l|e|_|f|o|r|m|a|t@1|e|d|v|a|l|u|e|s| +0#0000000&@25 +|f+0#e000002&|'|n|o| |f|o|r|m|a|t@1|e|d| |v|a|l|u|e|s|'| +0#0000000&@52 +|f+0#e000002&|'|e|g@1|s| |{+0#e000e06&|a+0#0000000&| |*| |x|(|)|}+0#e000e06&| +0#e000002&|s|p|a|m| |{+0#e000e06&|b+0#0000000&| |+| |y|(|)|}+0#e000e06&|'+0#e000002&| +0#0000000&@42 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|l|i|n|e|_|n|u|m|b|e|r|s|_|n|e|s|t|e|d| +0#0000000&@43 +|f+0#e000002&|'|{+0#e000e06&|a+0#0000000&| |*| |f+0#e000002&|"|-|{+0#e000e06&|x+0#0000000&|(|)|}+0#e000e06&|-+0#e000002&|"|}+0#e000e06&|'+0#e000002&| +0#0000000&@55 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|l|i|n|e|_|n|u|m|b|e|r|s|_|d|u|p|l|i|c|a|t|e|_|e|x|p|r|e|s@1|i|o|n| +0#0000000&@29 +|f+0#e000002&|'|{+0#e000e06&|a+0#0000000&| |*| |x|(|)|}+0#e000e06&| +0#e000002&|{+0#e000e06&|a+0#0000000&| |*| |x|(|)|}+0#e000e06&| +0#e000002&|{+0#e000e06&|a+0#0000000&| |*| |x|(|)|}+0#e000e06&|'+0#e000002&| +0#0000000&@42 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|n|u|m|b|e|r|s|_|f|s|t|r|i|n|g|_|w|i|t|h|_|f|o|r|m|a|t@1|i|n|g| +0#0000000&@31 +|'+0#e000002&|f|"|H|e|r|e| |i|s| |t|h|a|t| |p|e|s|k|y| |{|x@2|:|.|3|f|}| |a|g|a|i|n|"|'| +0#0000000&@35 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/python_fstring_01.dump b/runtime/syntax/testdir/dumps/python_fstring_01.dump new file mode 100644 index 0000000000..f43a626316 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_01.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|l|i|n|e|_|n|u|m|b|e|r|s|_|d|u|p|l|i|c|a|t|e|_|e|x|p|r|e|s@1|i|o|n| +0#0000000&@29 +|f+0#e000002&|'|{+0#e000e06&|a+0#0000000&| |*| |x|(|)|}+0#e000e06&| +0#e000002&|{+0#e000e06&|a+0#0000000&| |*| |x|(|)|}+0#e000e06&| +0#e000002&|{+0#e000e06&|a+0#0000000&| |*| |x|(|)|}+0#e000e06&|'+0#e000002&| +0#0000000&@42 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|n|u|m|b|e|r|s|_|f|s|t|r|i|n|g|_|w|i|t|h|_|f|o|r|m|a|t@1|i|n|g| +0#0000000&@31 +>'+0#e000002&|f|"|H|e|r|e| |i|s| |t|h|a|t| |p|e|s|k|y| |{|x@2|:|.|3|f|}| |a|g|a|i|n|"|'| +0#0000000&@35 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|l|i|n|e|_|n|u|m|b|e|r|s|_|m|u|l|t|i|l|i|n|e|_|f|s|t|r|i|n|g| +0#0000000&@32 +|f+0#e000002&|'@2| +0#0000000&@70 +| +0#e000002&@1|{+0#e000e06&|a+0#0000000&| @70 +@5|*| @68 +@7|x|(|)|}+0#e000e06&| +0#0000000&@63 +|n+0#e000002&|o|n|-|i|m|p|o|r|t|a|n|t| |c|o|n|t|e|n|t| +0#0000000&@53 +|'+0#e000002&@2| +0#0000000&@71 +@75 +|f+0#e000002&|'@2| +0#0000000&@70 +| +0#e000002&@9|{+0#e000e06&|b+0#0000000&|l|e|c|h|}+0#e000e06&| +0#0000000&@57 +|'+0#e000002&@2| +0#0000000&@71 +@75 +@57|1|9|,|1| @10|2|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_02.dump b/runtime/syntax/testdir/dumps/python_fstring_02.dump new file mode 100644 index 0000000000..c56d80eb2c --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_02.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|l|i|n|e|_|n|u|m|b|e|r|s|_|w|i|t|h|_|p|a|r|e|n|t|h|e|s|e|s| +0#0000000&@33 +|x| |=| |(| @69 +@4|f+0#e000002&|"| |{+0#e000e06&|t+0#0000000&|e|s|t|(|t|)|}+0#e000e06&|"+0#e000002&| +0#0000000&@57 +|)| @73 +> @74 +|x| |=| |(| @69 +@4|u+0#e000002&|'|w|a|t|'|,+0#0000000&| @63 +@4|u+0#e000002&|"|w|a|t|"|,+0#0000000&| @63 +@4|b+0#e000002&|'|w|a|t|'|,+0#0000000&| @63 +@4|b+0#e000002&|"|w|a|t|"|,+0#0000000&| @63 +@4|f+0#e000002&|'|w|a|t|'|,+0#0000000&| @63 +@4|f+0#e000002&|"|w|a|t|"|,+0#0000000&| @63 +|)| @73 +@75 +|y| |=| |(| @69 +@4|u+0#e000002&|'@2|w|a|t|'@2|,+0#0000000&| @59 +@4|u+0#e000002&|"@2|w|a|t|"@2|,+0#0000000&| @59 +@4|b+0#e000002&|'@2|w|a|t|'@2|,+0#0000000&| @59 +@57|3|7|,|0|-|1| @8|5|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_03.dump b/runtime/syntax/testdir/dumps/python_fstring_03.dump new file mode 100644 index 0000000000..420dbf68fc --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_03.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@3|b+0#e000002&|'@2|w|a|t|'@2|,+0#0000000&| @59 +@4|b+0#e000002&|"@2|w|a|t|"@2|,+0#0000000&| @59 +@4|f+0#e000002&|'@2|w|a|t|'@2|,+0#0000000&| @59 +@4|f+0#e000002&|"@2|w|a|t|"@2|,+0#0000000&| @59 +|)| @73 +> @74 +|x| |=| |(| @69 +@8|'+0#e000002&|P|E|R|L|_|M@1|_|O|P|T|'|,+0#0000000&| |(| @50 +@12|f+0#e000002&|'|w|a|t|'| +0#0000000&@56 +@12|f+0#e000002&|'|s|o|m|e|_|s|t|r|i|n|g|=|{+0#e000e06&|f+0#0000000&|(|x|)|}+0#e000e06&| +0#e000002&|'| +0#0000000&@40 +@12|f+0#e000002&|'|w|a|t|'| +0#0000000&@56 +@8|)|,| @64 +|)| @73 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|f|s|t|r|i|n|g|_|e|m|p|t|y|_|f|o|r|m|a|t|_|s|p|e|c| +0#0000000&@37 +|f+0#e000002&|'|{+0#e000e06&|e+0#0000000&|x|p|r|:+0#e000e06&|}|'+0#e000002&| +0#0000000&@64 +@75 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|d|o|c|s|t|r|i|n|g| +0#0000000&@57 +@57|5@1|,|0|-|1| @8|8|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_04.dump b/runtime/syntax/testdir/dumps/python_fstring_04.dump new file mode 100644 index 0000000000..c0fb44c00d --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_04.dump @@ -0,0 +1,20 @@ +|#+0#0000e05#ffffff0@1| |t|e|s|t|_|d|o|c|s|t|r|i|n|g| +0#0000000&@57 +|d+0#af5f00255&|e|f| +0#0000000&|f+0#00e0e07&|(+0#0000000&|)|:| @66 +@4|f+0#e000002&|'@2|N|o|t| |a| |d|o|c|s|t|r|i|n|g|'@2| +0#0000000&@48 +@75 +|d+0#af5f00255&|e|f| +0#0000000&|g+0#00e0e07&|(+0#0000000&|)|:| @66 +@4>'+0#e000002&@2|N|o|t| |a| |d|o|c|s|t|r|i|n|g|'@2| +0#0000000&|\+0#e000e06&| +0#0000000&@47 +@4|f+0#e000002&|'@1| +0#0000000&@67 +@75 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|a|s|t|_|c|o|m|p|i|l|e|_|t|i|m|e|_|c|o|n|c|a|t| +0#0000000&@43 +|(|'+0#e000002&|f|o@1|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|f|o@1|3|'|)+0#0000000&| @52 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|l|i|t|e|r|a|l| +0#0000000&@59 +|(|f+0#e000002&|'@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @65 +|(|f+0#e000002&|'|a|'|,+0#0000000&| |'+0#e000002&|a|'|)+0#0000000&| @63 +|(|f+0#e000002&|'| |'|,+0#0000000&| |'+0#e000002&| |'|)+0#0000000&| @63 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|d|o|u|b|l|e|_|b|r|a|c|e|s| +0#0000000&@53 +|(|f+0#e000002&|'|{+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|'|)+0#0000000&| @62 +@57|7|3|,|5| @9|1@1|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_05.dump b/runtime/syntax/testdir/dumps/python_fstring_05.dump new file mode 100644 index 0000000000..5952cfb763 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_05.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|{+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|'|)+0#0000000&| @62 +|(|f+0#e000002&|'|a|{+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|a|{|'|)+0#0000000&| @60 +|(|f+0#e000002&|'|{+0#e000e06&@1|b+0#e000002&|'|,+0#0000000&| |'+0#e000002&|{|b|'|)+0#0000000&| @60 +|(|f+0#e000002&|'|a|{+0#e000e06&@1|b+0#e000002&|'|,+0#0000000&| |'+0#e000002&|a|{|b|'|)+0#0000000&| @58 +|(|f+0#e000002&|'|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|}|'|)+0#0000000&| @62 +>(|f+0#e000002&|'|a|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|a|}|'|)+0#0000000&| @60 +|(|f+0#e000002&|'|}+0#e000e06&@1|b+0#e000002&|'|,+0#0000000&| |'+0#e000002&|}|b|'|)+0#0000000&| @60 +|(|f+0#e000002&|'|a|}+0#e000e06&@1|b+0#e000002&|'|,+0#0000000&| |'+0#e000002&|a|}|b|'|)+0#0000000&| @58 +|(|f+0#e000002&|'|{+0#e000e06&@1|}@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|}|'|)+0#0000000&| @59 +|(|f+0#e000002&|'|a|{+0#e000e06&@1|}@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|a|{|}|'|)+0#0000000&| @57 +|(|f+0#e000002&|'|{+0#e000e06&@1|b+0#e000002&|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|b|}|'|)+0#0000000&| @57 +|(|f+0#e000002&|'|{+0#e000e06&@1|}@1|c+0#e000002&|'|,+0#0000000&| |'+0#e000002&|{|}|c|'|)+0#0000000&| @57 +|(|f+0#e000002&|'|a|{+0#e000e06&@1|b+0#e000002&|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|a|{|b|}|'|)+0#0000000&| @55 +|(|f+0#e000002&|'|a|{+0#e000e06&@1|}@1|c+0#e000002&|'|,+0#0000000&| |'+0#e000002&|a|{|}|c|'|)+0#0000000&| @55 +|(|f+0#e000002&|'|{+0#e000e06&@1|b+0#e000002&|}+0#e000e06&@1|c+0#e000002&|'|,+0#0000000&| |'+0#e000002&|{|b|}|c|'|)+0#0000000&| @55 +|(|f+0#e000002&|'|a|{+0#e000e06&@1|b+0#e000002&|}+0#e000e06&@1|c+0#e000002&|'|,+0#0000000&| |'+0#e000002&|a|{|b|}|c|'|)+0#0000000&| @53 +@75 +|(|f+0#e000002&|'|{+0#e000e06&@2|1+0#e000002&|0|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|1|0|'|)+0#0000000&| @56 +|(|f+0#e000002&|'|}+0#e000e06&@1|{|1+0#e000002&|0|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|}|1|0|'|)+0#0000000&| @56 +@57|9|1|,|1| @9|1|4|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_06.dump b/runtime/syntax/testdir/dumps/python_fstring_06.dump new file mode 100644 index 0000000000..a28d01e68c --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_06.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|}+0#e000e06&@1|{|1+0#e000002&|0|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|}|1|0|'|)+0#0000000&| @56 +|(|f+0#e000002&|'|}+0#e000e06&@1|{@2|1+0#e000002&|0|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|}|{|1|0|'|)+0#0000000&| @53 +|(|f+0#e000002&|'|}+0#e000e06&@1|a+0#e000002&|{+0#e000e06&@2|1+0#e000002&|0|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|}|a|{|1|0|'|)+0#0000000&| @51 +@75 +|(|f+0#e000002&|'|{+0#e000e06&|1+0#e000002&|0|}+0#e000e06&|{@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|1|0|{|'|)+0#0000000&| @56 +>(|f+0#e000002&|'|{+0#e000e06&|1+0#e000002&|0|}+0#e000e06&@2|'+0#e000002&|,+0#0000000&| |'+0#e000002&|1|0|}|'|)+0#0000000&| @56 +|(|f+0#e000002&|'|{+0#e000e06&|1+0#e000002&|0|}+0#e000e06&@2|{@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|1|0|}|{|'|)+0#0000000&| @53 +|(|f+0#e000002&|'|{+0#e000e06&|1+0#e000002&|0|}+0#e000e06&@2|a+0#e000002&|{+0#e000e06&@1|'+0#e000002&| +0#0000000&|'+0#e000002&|}|'|,+0#0000000&| |'+0#e000002&|1|0|}|a|{|}|'|)+0#0000000&| @46 +@75 +|#+0#0000e05&| |I|n|s|i|d|e| |o|f| |s|t|r|i|n|g|s|,| |d|o|n|'|t| |i|n|t|e|r|p|r|e|t| |d|o|u|b|l|e|d| |b|r|a|c|k|e|t|s|.| +0#0000000&@20 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|{@1|}@1|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{@1|}@1|'|)+0#0000000&| @53 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|c|o|m|p|i|l|e|_|t|i|m|e|_|c|o|n|c|a|t| +0#0000000&@47 +|x| |=| |'+0#e000002&|d|e|f|'| +0#0000000&@65 +|(|'+0#e000002&|a|b|c|'| +0#0000000&|f+0#e000002&|'|#@1| |{+0#e000e06&|x+0#0000000&|}+0#e000e06&|g+0#e000002&|h|i|'|,+0#0000000&| |'+0#e000002&|a|b|c|#@1| |d|e|f|g|h|i|'|)+0#0000000&| @38 +|(|'+0#e000002&|a|b|c|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&|'+0#e000002&|g|h|i|'|,+0#0000000&| |'+0#e000002&|a|b|c|d|e|f|g|h|i|'|)+0#0000000&| @41 +|(|'+0#e000002&|a|b|c|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&|'+0#e000002&|g|h|'| +0#0000000&|f+0#e000002&|'|i|{+0#e000e06&|x+0#0000000&|:+0#e000e06&|4|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|a|b|c|d|e|f|g|h|i|d|e|f| |'|)+0#0000000&| @28 +|(|'+0#e000002&|{|x|}|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|x|}|d|e|f|'|)+0#0000000&| @50 +|(|'+0#e000002&|{|x|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|x|d|e|f|'|)+0#0000000&| @52 +@57|1|0|9|,|1| @8|1|7|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_07.dump b/runtime/syntax/testdir/dumps/python_fstring_07.dump new file mode 100644 index 0000000000..d0fbe418fe --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_07.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|'+0#e000002&|{|x|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|x|d|e|f|'|)+0#0000000&| @52 +|(|'+0#e000002&|{|x|}|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|x|}|d|e|f|'|)+0#0000000&| @50 +|(|'+0#e000002&|{@1|x|}@1|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{@1|x|}@1|d|e|f|'|)+0#0000000&| @46 +|(|'+0#e000002&|{@1|x|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{@1|x|d|e|f|'|)+0#0000000&| @50 +|(|'+0#e000002&|x|}@1|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|}@1|d|e|f|'|)+0#0000000&| @50 +>(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&|'+0#e000002&|x|}@1|'|,+0#0000000&| |'+0#e000002&|d|e|f|x|}@1|'|)+0#0000000&| @50 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&|'+0#e000002&@1|,+0#0000000&| |'+0#e000002&|d|e|f|'|)+0#0000000&| @56 +|(|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&|'+0#e000002&@1|,+0#0000000&| |'+0#e000002&|d|e|f|'|)+0#0000000&| @53 +|(|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|d|e|f|'|)+0#0000000&| @56 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&|'+0#e000002&|2|'|,+0#0000000&| |'+0#e000002&|d|e|f|2|'|)+0#0000000&| @54 +|(|'+0#e000002&|1|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&|'+0#e000002&|2|'|,+0#0000000&| |'+0#e000002&|1|d|e|f|2|'|)+0#0000000&| @49 +|(|'+0#e000002&|1|'| +0#0000000&|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|1|d|e|f|'|)+0#0000000&| @54 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&|f+0#e000002&|'|-|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|d|e|f|-|d|e|f|'|)+0#0000000&| @47 +|(|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @62 +|(|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'@1| +0#0000000&|'+0#e000002&@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @59 +|(|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'@1| +0#0000000&|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @55 +|(|f+0#e000002&|'@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @65 +|(|f+0#e000002&|'@1| +0#0000000&|'+0#e000002&@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @62 +|(|f+0#e000002&|'@1| +0#0000000&|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @58 +@57|1|2|7|,|1| @8|2|0|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_08.dump b/runtime/syntax/testdir/dumps/python_fstring_08.dump new file mode 100644 index 0000000000..869406e474 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_08.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'@1| +0#0000000&|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @58 +|(|f+0#e000002&|'@1| +0#0000000&|'+0#e000002&@1| +0#0000000&|f+0#e000002&|'@1| +0#0000000&|'+0#e000002&@1|,+0#0000000&| |'+0#e000002&@1|)+0#0000000&| @55 +@75 +|#+0#0000e05&| |T|h|i|s| |i|s| |n|o|t| |r|e|a|l@1|y| |[|f|'|{|'|]| |+| |[|f|'|}|'|]| |s|i|n|c|e| |w|e| |t|r|e|a|t| |t|h|e| |i|n|s|i|d|e| +0#0000000&@12 +|#+0#0000e05&| |o|f| |b|r|a|c|e|s| |a|s| |a| |p|u|r|e|l|y| |n|e|w| |c|o|n|t|e|x|t|,| |s|o| |i|t| |i|s| |a|c|t|u|a|l@1|y| |f|'|{| |a|n|d| +0#0000000&@12 +>#+0#0000e05&| |t|h|e|n| |e|v|a|l|(|'| @1|f|'|)| |(|a| |v|a|l|i|d| |e|x|p|r|e|s@1|i|o|n|)| |a|n|d| |t|h|e|n| |}|'| |w|h|i|c|h| |w|o|u|l|d| +0#0000000&@11 +|#+0#0000e05&| |c|o|n|s|t|i|t|u|t|e| |a| |v|a|l|i|d| |f|-|s|t|r|i|n|g|.| +0#0000000&@44 +|(|f+0#e000002&|'|{+0#e000e06&|'+0#e000002&| |f|'|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&| |f|'|)+0#0000000&| @57 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|c|o|m@1|e|n|t|s| +0#0000000&@58 +|#+0#0000e05&| |T|h|e|s|e| |a|r|e|n|'|t| |c|o|m@1|e|n|t|s|,| |s|i|n|c|e| |t|h|e|y|'|r|e| |i|n| |s|t|r|i|n|g|s|.| +0#0000000&@24 +|d| |=| |{|'+0#e000002&|#|'|:+0#0000000&| |'+0#e000002&|h|a|s|h|'|}+0#0000000&| @57 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|#|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|#|'|)+0#0000000&| @59 +|(|f+0#e000002&|'|{+0#e000e06&|d+0#0000000&|[|"+0#e000002&|#|"|]+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|h|a|s|h|'|)+0#0000000&| @53 +@75 +|(|f+0#e000002&|'@2|A| |c|o|m|p|l|e|x| |t|r|i|c|k|:| |{+0#e000e06&| +0#0000000&@51 +|2+0#e000002&| +0#0000000&@1|#+0#0000e05&| |t|w|o| +0#0000000&@66 +|}+0#e000e06&|'+0#e000002&@2|,+0#0000000&| |'+0#e000002&|A| |c|o|m|p|l|e|x| |t|r|i|c|k|:| |2|'|)+0#0000000&| @47 +@75 +@57|1|4|5|,|1| @8|2|3|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_09.dump b/runtime/syntax/testdir/dumps/python_fstring_09.dump new file mode 100644 index 0000000000..ce1e6d1561 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_09.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|(|f+0#e000002&|'@2| +0#0000000&@69 +|{+0#e000e06&| +0#0000000&@73 +|4+0#e000002&|0| +0#0000000&|#+0#0000e05&| |f|o|u|r|t|y| +0#0000000&@63 +|+| @1|#+0#0000e05&| |p|l|u|s| +0#0000000&@65 +>2+0#e000002&| +0#0000000&@1|#+0#0000e05&| |t|w|o| +0#0000000&@66 +|}+0#e000e06&|'+0#e000002&@2|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|n|4+0#e000002&|2|'|)+0#0000000&| @61 +@75 +|(|f+0#e000002&|'@2| +0#0000000&@69 +|{+0#e000e06&| +0#0000000&@73 +|4+0#e000002&|0| +0#0000000&|#+0#0000e05&| |f|o|u|r|t|y| +0#0000000&@63 +|+| @1|#+0#0000e05&| |p|l|u|s| +0#0000000&@65 +|2+0#e000002&| +0#0000000&@1|#+0#0000e05&| |t|w|o| +0#0000000&@66 +|}+0#e000e06&|'+0#e000002&@2|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|n|4+0#e000002&|2|'|)+0#0000000&| @61 +@75 +|(|f+0#e000002&|'@2| +0#0000000&@69 +|#+0#e000002&| |t|h|i|s| |i|s| |n|o|t| |a| |c|o|m@1|e|n|t| +0#0000000&@51 +|{+0#e000e06&| +0#0000000&|#+0#0000e05&| |t|h|e| |f|o|l@1|o|w|i|n|g| |o|p|e|r|a|t|i|o|n| |i|t|'|s| +0#0000000&@42 +|3+0#e000002&| +0#0000000&|#+0#0000e05&| |t|h|i|s| |i|s| |a| |n|u|m|b|e|r| +0#0000000&@54 +@57|1|6|3|,|1| @8|2|6|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_10.dump b/runtime/syntax/testdir/dumps/python_fstring_10.dump new file mode 100644 index 0000000000..6118cb442d --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_10.dump @@ -0,0 +1,20 @@ +|3+0#e000002#ffffff0| +0#0000000&|#+0#0000e05&| |t|h|i|s| |i|s| |a| |n|u|m|b|e|r| +0#0000000&@54 +|*| |2+0#e000002&|}+0#e000e06&|'+0#e000002&@2|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|n|#+0#e000002&| |t|h|i|s| |i|s| |n|o|t| |a| |c|o|m@1|e|n|t|\+0#e000e06&|n|6+0#e000002&|'|)+0#0000000&| @34 +@75 +|(|f+0#e000002&|'@2| +0#0000000&@69 +|{+0#e000e06&|#+0#0000e05&| |f|'|a| |{|c|o|m@1|e|n|t|}|'| +0#0000000&@57 +>8+0#e000002&|6| +0#0000000&|#+0#0000e05&| |c|o|n|s|t|a|n|t| +0#0000000&@61 +|#+0#0000e05&| |n|o|t|h|i|n|g| |m|o|r|e| +0#0000000&@60 +|}+0#e000e06&|'+0#e000002&@2|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|n|8+0#e000002&|6|'|)+0#0000000&| @61 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|f|o|r|m|a|t|_|s|p|e|c|i|f|i|e|r|_|e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@38 +|w|i|d|t|h| |=| |1+0#e000002&|0| +0#0000000&@64 +|p|r|e|c|i|s|i|o|n| |=| |4+0#e000002&| +0#0000000&@61 +|v|a|l|u|e| |=| |d|e|c|i|m|a|l|.|D|e|c|i|m|a|l|(|'+0#e000002&|1|2|.|3|4|5|6|7|'|)+0#0000000&| @39 +|(|f+0#e000002&|'|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w+0#0000000&|i|d|t|h|}+0#e000e06&|.|{|p+0#0000000&|r|e|c|i|s|i|o|n|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|r|e|s|u|l|t|:| @5|1|2|.|3|5|'|)+0#0000000&| @12 +|(|f+0#e000002&|'|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w+0#0000000&|i|d|t|h|!+0#e000e06&|r|}|.|{|p+0#0000000&|r|e|c|i|s|i|o|n|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|r|e|s|u|l|t|:| @5|1|2|.|3|5|'|)+0#0000000&| @10 +|(|f+0#e000002&|'|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w+0#0000000&|i|d|t|h|:+0#e000e06&|0|}|.|{|p+0#0000000&|r|e|c|i|s|i|o|n|:+0#e000e06&|1|}@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|r|e|s|u|l|t|:| @5|1|2|.|3|5|'|)+0#0000000&| @8 +|(|f+0#e000002&|'|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|1+0#e000002&|}+0#e000e06&|{|0+0#e000002&|:+0#e000e06&|0|}|.|{|p+0#0000000&|r|e|c|i|s|i|o|n|:+0#e000e06&|1|}@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|r|e|s|u|l|t|:| @5|1|2|.|3|5|'|)+0#0000000&| @9 +|(|f+0#e000002&|'|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{| +0#0000000&|1+0#e000002&|}+0#e000e06&|{| +0#0000000&|0+0#e000002&|:+0#e000e06&|0|}|.|{| +0#0000000&|p|r|e|c|i|s|i|o|n|:+0#e000e06&|1|}@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|r|e|s|u|l|t|:| @5|1|2|.|3|5|'|)+0#0000000&| @6 +|(|f+0#e000002&|'|{+0#e000e06&|1+0#e000002&|0|:+0#e000e06&|#|{|1+0#e000002&|}+0#e000e06&|0|x|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @6|0|x|a|'|)+0#0000000&| @44 +@57|1|8|1|,|1| @8|2|9|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_11.dump b/runtime/syntax/testdir/dumps/python_fstring_11.dump new file mode 100644 index 0000000000..8b1391d2cb --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_11.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|{+0#e000e06&|1+0#e000002&|0|:+0#e000e06&|#|{|1+0#e000002&|}+0#e000e06&|0|x|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @6|0|x|a|'|)+0#0000000&| @44 +|(|f+0#e000002&|'|{+0#e000e06&|1+0#e000002&|0|:+0#e000e06&|{|"+0#e000002&|#|"|}+0#e000e06&|1|{|0+0#e000002&|}+0#e000e06&|{|"+0#e000002&|x|"|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @6|0|x|a|'|)+0#0000000&| @36 +|(|f+0#e000002&|'|{+0#e000e06&|-+0#0000000&|1+0#e000002&|0|:+0#e000e06&|-|{|"+0#e000002&|#|"|}+0#e000e06&|1|{|0+0#e000002&|}+0#e000e06&|x|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @5|-|0|x|a|'|)+0#0000000&| @38 +|(|f+0#e000002&|'|{+0#e000e06&|-+0#0000000&|1+0#e000002&|0|:+0#e000e06&|{|"+0#e000002&|-|"|}+0#e000e06&|#|{|1+0#e000002&|}+0#e000e06&|0|{|"+0#e000002&|x|"|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @5|-|0|x|a|'|)+0#0000000&| @34 +|(|f+0#e000002&|'|{+0#e000e06&|1+0#e000002&|0|:+0#e000e06&|#|{|3+0#e000002&| +0#0000000&|!|=| |{|4+0#e000002&|:+0#0000000&|5+0#e000002&|}+0#0000000&| |a+0#af5f00255&|n|d| +0#0000000&|w|i|d|t|h|}+0#e000e06&|x|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @6|0|x|a|'|)+0#0000000&| @26 +>(|f+0#e000002&|'|r|e|s|u|l|t|:| |{+0#e000e06&|v+0#0000000&|a|l|u|e|:+0#e000e06&|{|w+0#0000000&|i|d|t|h|:+0#e000e06&|{|0+0#e000002&|}+0#e000e06&@1|.|{|p+0#0000000&|r|e|c|i|s|i|o|n|:+0#e000e06&|1|}@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|r|e|s|u|l|t|:| @5|1|2|.|3|5|'|)+0#0000000&| @6 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|p|a|r|e|n|s|_|i|n|_|e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@45 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|,+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|(|3|,|)|'|)+0#0000000&| @57 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|b|a|c|k|s|l|a|s|h|e|s|_|i|n|_|s|t|r|i|n|g|_|p|a|r|t| +0#0000000&@40 +|(|f+0#e000002&|'|\+0#e000e06&|t|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|t|'+0#e000002&|)+0#0000000&| @61 +|(|r+0#e000002&|'|\|t|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|t+0#e000002&|'|)+0#0000000&| @60 +|(|r+0#e000002&|f|'|\|t|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|t+0#e000002&|'|)+0#0000000&| @59 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|t|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|t|'+0#e000002&|)+0#0000000&| @57 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|t|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|t|3+0#e000002&|'|)+0#0000000&| @53 +|(|f+0#e000002&|'|\+0#e000e06&|t|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|t|3+0#e000002&|'|)+0#0000000&| @57 +@75 +|(|f+0#e000002&|'|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @53 +@57|1|9@1|,|1| @8|3|2|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_12.dump b/runtime/syntax/testdir/dumps/python_fstring_12.dump new file mode 100644 index 0000000000..eb855ff1ed --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_12.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @53 +|(|r+0#e000002&|'|\|u|0|3|9|4|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|u+0#e000002&|0|3|9|4|'|)+0#0000000&| @52 +|(|r+0#e000002&|f|'|\|u|0|3|9|4|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|u+0#e000002&|0|3|9|4|'|)+0#0000000&| @51 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|u|0|3|9|4|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @49 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|u|0|3|9|4|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|3+0#e000002&|'|)+0#0000000&| @45 +>(|f+0#e000002&|'|\+0#e000e06&|u|0|3|9|4|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|u|0|3|9|4|3+0#e000002&|'|)+0#0000000&| @49 +@75 +|(|f+0#e000002&|'|\+0#e000e06&|U|0@4|3|9|4|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @49 +|(|r+0#e000002&|'|\|U|0@4|3|9|4|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|U+0#e000002&|0@4|3|9|4|'|)+0#0000000&| @44 +|(|r+0#e000002&|f|'|\|U|0@4|3|9|4|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|U+0#e000002&|0@4|3|9|4|'|)+0#0000000&| @43 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|U|0@4|3|9|4|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @45 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|U|0@4|3|9|4|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|3+0#e000002&|'|)+0#0000000&| @41 +|(|f+0#e000002&|'|\+0#e000e06&|U|0@4|3|9|4|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|u|0|3|9|4|3+0#e000002&|'|)+0#0000000&| @45 +@75 +|(|f+0#e000002&|'|\+0#e000e06&|N|{|G|R|E@1|K| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |D|E|L|T|A|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @29 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|N|{|G|R|E@1|K| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |D|E|L|T|A|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @25 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|N|{|G|R|E@1|K| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |D|E|L|T|A|}|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|3+0#e000002&|'|)+0#0000000&| @21 +|(|f+0#e000002&|'|\+0#e000e06&|N|{|G|R|E@1|K| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |D|E|L|T|A|}|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|u|0|3|9|4|3+0#e000002&|'|)+0#0000000&| @25 +|(|f+0#e000002&|'|2|\+0#e000e06&|N|{|G|R|E@1|K| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |D|E|L|T|A|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @27 +@57|2|1|7|,|1| @8|3|5|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_13.dump b/runtime/syntax/testdir/dumps/python_fstring_13.dump new file mode 100644 index 0000000000..7144e24fcd --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_13.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|2|\+0#e000e06&|N|{|G|R|E@1|K| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |D|E|L|T|A|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|'+0#e000002&|)+0#0000000&| @27 +|(|f+0#e000002&|'|2|\+0#e000e06&|N|{|G|R|E@1|K| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |D|E|L|T|A|}|3+0#e000002&|'|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&|u|0|3|9|4|3+0#e000002&|'|)+0#0000000&| @25 +|(|f+0#e000002&|'|\+0#e000e06&|N|{|G|R|E@1|K| |C|A|P|I|T|A|L| |L|E|T@1|E|R| |D|E|L|T|A|}|3+0#e000002&|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|u|0|3|9|4|3+0#e000002&|'|)+0#0000000&| @27 +@75 +|(|f+0#e000002&|'|\+0#e000e06&|x|2|0|'+0#e000002&|,+0#0000000&| |'+0#e000002&| |'|)+0#0000000&| @60 +>(|r+0#e000002&|'|\|x|2|0|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|x+0#e000002&|2|0|'|)+0#0000000&| @56 +|(|r+0#e000002&|f|'|\|x|2|0|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|x+0#e000002&|2|0|'|)+0#0000000&| @55 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|x|2|0|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2| |'|)+0#0000000&| @56 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|\|x|2|0|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2| |3|'|)+0#0000000&| @52 +|(|f+0#e000002&|'|\+0#e000e06&|x|2|0|{|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&| |3|'|)+0#0000000&| @56 +@75 +|(|f+0#e000002&|'|2|\+0#e000e06&|x|2|0|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2| |'|)+0#0000000&| @58 +|(|f+0#e000002&|'|2|\+0#e000e06&|x|2|0|3+0#e000002&|'|,+0#0000000&| |'+0#e000002&|2| |3|'|)+0#0000000&| @56 +|(|f+0#e000002&|'|\+0#e000e06&|x|2|0|3+0#e000002&|'|,+0#0000000&| |'+0#e000002&| |3|'|)+0#0000000&| @58 +@75 +|A|M|P|E|R|S|A|N|D| |=| |'+0#e000002&|s|p|a|m|'| +0#0000000&@56 +|#+0#0000e05&| |G|e|t| |t|h|e| |r|i|g|h|t| |u|n|i|c|o|d|e| |c|h|a|r|a|c|t|e|r| |(|&|)|,| |o|r| |p|i|c|k| |u|p| |l|o|c|a|l| |v|a|r|i|a|b|l|e| +0#0000000&@10 +|#+0#0000e05&| |d|e|p|e|n|d|i|n|g| |o|n| |t|h|e| |n|u|m|b|e|r| |o|f| |b|a|c|k|s|l|a|s|h|e|s|.| +0#0000000&@33 +|(|f+0#e000002&|'|\+0#e000e06&|N|{|A|M|P|E|R|S|A|N|D|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|&|'|)+0#0000000&| @51 +@57|2|3|5|,|1| @8|3|8|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_14.dump b/runtime/syntax/testdir/dumps/python_fstring_14.dump new file mode 100644 index 0000000000..6b225aa798 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_14.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|\+0#e000e06&|N|{|A|M|P|E|R|S|A|N|D|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|&|'|)+0#0000000&| @51 +|(|f+0#e000002&|'|\+0#e000e06&@1|N+0#e000002&|{+0#e000e06&|A+0#0000000&|M|P|E|R|S|A|N|D|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|N+0#e000002&|s|p|a|m|'|)+0#0000000&| @44 +|(|f+0#e000002&|r|'|\|N|{+0#e000e06&|A+0#0000000&|M|P|E|R|S|A|N|D|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|N+0#e000002&|s|p|a|m|'|)+0#0000000&| @44 +|(|f+0#e000002&|'|\+0#e000e06&@2|N|{|A|M|P|E|R|S|A|N|D|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|&+0#e000002&|'|)+0#0000000&| @47 +@75 +>#+0#0000e05&@1| |t|e|s|t|_|b|a|c|k|s|l|a|s|h|e|s|_|i|n|_|e|x|p|r|e|s@1|i|o|n|_|p|a|r|t| +0#0000000&@36 +|(|f+0#e000002&|"|{+0#e000e06&|(+0#0000000&| @69 +@16|1+0#e000002&| +0#0000000&|+| @55 +@16|2+0#e000002&| +0#0000000&@57 +|)|}+0#e000e06&|"+0#e000002&|,+0#0000000&| |"+0#e000002&|3|"|)+0#0000000&| @65 +@75 +|(|"+0#e000002&|\+0#e000e06&|N|{|L|E|F|T| |C|U|R|L|Y| |B|R|A|C|K|E|T|}|"+0#e000002&|,+0#0000000&| |'+0#e000002&|{|'|)+0#0000000&| @43 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|\+0#e000e06&|N|{|L|E|F|T| |C|U|R|L|Y| |B|R|A|C|K|E|T|}|"+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|'|)+0#0000000&| @38 +|(|r+0#e000002&|f|'|{+0#e000e06&|"+0#e000002&|\+0#e000e06&|N|{|L|E|F|T| |C|U|R|L|Y| |B|R|A|C|K|E|T|}|"+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|'|)+0#0000000&| @37 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|n|o|_|e|s|c|a|p|e|s|_|f|o|r|_|b|r|a|c|e|s| +0#0000000&@45 +|#+0#0000e05&| |O|n|l|y| |l|i|t|e|r|a|l| |c|u|r|l|y| |b|r|a|c|e|s| |b|e|g|i|n| |a|n| |e|x|p|r|e|s@1|i|o|n|.| +0#0000000&@26 +|#+0#0000e05&| |\|x|7|b| |i|s| |'|{|'|.| +0#0000000&@60 +|(|f+0#e000002&|'|\+0#e000e06&|x|7|b|1+0#e000002&|+|1|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|1|+|1|}|'|)+0#0000000&| @51 +@57|2|5|3|,|1| @8|4|1|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_15.dump b/runtime/syntax/testdir/dumps/python_fstring_15.dump new file mode 100644 index 0000000000..d8b650bf55 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_15.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|\+0#e000e06&|x|7|b|1+0#e000002&|+|1|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|1|+|1|}|'|)+0#0000000&| @51 +|(|f+0#e000002&|'|\+0#e000e06&|x|7|b|1+0#e000002&|+|1|'|,+0#0000000&| |'+0#e000002&|{|1|+|1|'|)+0#0000000&| @54 +|(|f+0#e000002&|'|\+0#e000e06&|u|0@1|7|b|1+0#e000002&|+|1|'|,+0#0000000&| |'+0#e000002&|{|1|+|1|'|)+0#0000000&| @52 +|(|f+0#e000002&|'|\+0#e000e06&|N|{|L|E|F|T| |C|U|R|L|Y| |B|R|A|C|K|E|T|}|1+0#e000002&|+|1|\+0#e000e06&|N|{|R|I|G|H|T| |C|U|R|L|Y| |B|R|A|C|K|E|T|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|1|+|1|}|'|)+0#0000000&| @12 +@75 +>#+0#0000e05&@1| |t|e|s|t|_|n|e|w|l|i|n|e|s|_|i|n|_|e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@43 +|(|f+0#e000002&|'|{+0#e000e06&|0+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|0|'|)+0#0000000&| @61 +|(|r+0#e000002&|f|'@2|{+0#e000e06&|3+0#e000002&|++0#0000000&| @65 +|4+0#e000002&|}+0#e000e06&|'+0#e000002&@2|,+0#0000000&| |'+0#e000002&|7|'|)+0#0000000&| @63 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|l|a|m|b|d|a| +0#0000000&@60 +|x| |=| |5+0#e000002&| +0#0000000&@69 +|(|f+0#e000002&|'|{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|y|:|x|*|y|)|(|"+0#e000002&|8|"|)+0#0000000&|!+0#e000e06&|r|}|'+0#e000002&|,+0#0000000&| |"+0#e000002&|'|8@4|'|"|)+0#0000000&| @35 +|(|f+0#e000002&|'|{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|y|:|x|*|y|)|(|"+0#e000002&|8|"|)+0#0000000&|!+0#e000e06&|r|:|1|0|}|'+0#e000002&|,+0#0000000&| |"+0#e000002&|'|8@4|'| @2|"|)+0#0000000&| @29 +|(|f+0#e000002&|'|{+0#e000e06&|(+0#0000000&|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|y|:|x|*|y|)|(|"+0#e000002&|8|"|)+0#0000000&|:+0#e000e06&|1|0|}|'+0#e000002&|,+0#0000000&| |"+0#e000002&|8@4| @4|"|)+0#0000000&| @31 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|v|a|l|i|d|_|p|r|e|f|i|x|e|s| +0#0000000&@52 +|(|F+0#e000002&|'|{+0#e000e06&|1+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |"+0#e000002&|1|"|)+0#0000000&| @61 +|(|F+0#e000002&|R|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |"+0#e000002&|2|"|)+0#0000000&| @60 +@57|2|7|1|,|1| @8|4@1|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_16.dump b/runtime/syntax/testdir/dumps/python_fstring_16.dump new file mode 100644 index 0000000000..3d339d32c6 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_16.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|F+0#e000002&|R|'|{+0#e000e06&|2+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |"+0#e000002&|2|"|)+0#0000000&| @60 +|(|f+0#e000002&|R|'|{+0#e000e06&|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |"+0#e000002&|3|"|)+0#0000000&| @60 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|r|o|u|n|d|t|r|i|p|_|r|a|w|_|q|u|o|t|e|s| +0#0000000&@46 +|(|f+0#e000002&|r|"|\|'|"|,+0#0000000&| |"+0#e000002&|\+0#e000e06&@1|'+0#e000002&|"|)+0#0000000&| @59 +>(|f+0#e000002&|r|'|\|"|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|"+0#e000002&|'|)+0#0000000&| @59 +|(|f+0#e000002&|r|'|\|"|\|'@1|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|"+0#e000002&|\+0#e000e06&@2|'|'+0#e000002&|)+0#0000000&| @53 +|(|f+0#e000002&|r|'|\|'|\|"|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@2|'|\@1|"+0#e000002&|'|)+0#0000000&| @53 +|(|f+0#e000002&|r|'|\|"|\|'|\|"|'|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|"+0#e000002&|\+0#e000e06&@2|'|\@1|"+0#e000002&|'|)+0#0000000&| @48 +|(|f+0#e000002&|r|'|\|'|\|"|\|'@1|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@2|'|\@1|"+0#e000002&|\+0#e000e06&@2|'|'+0#e000002&|)+0#0000000&| @47 +|(|f+0#e000002&|r|'|\|"|\|'|\|"|\|'@1|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|"+0#e000002&|\+0#e000e06&@2|'|\@1|"+0#e000002&|\+0#e000e06&@2|'|'+0#e000002&|)+0#0000000&| @42 +@75 +|#+0#0000e05&| |t|e|s|t|_|f|s|t|r|i|n|g|_|b|a|c|k|s|l|a|s|h|_|b|e|f|o|r|e|_|d|o|u|b|l|e|_|b|r|a|c|k|e|t| +0#0000000&@28 +|d|e|p|r|e|c|a|t|e|d|_|c|a|s|e|s| |=| |[| @54 +@4|(|r+0#e000002&|"|f|'|\|{@1|\|}@1|'|"|,+0#0000000&| @2|'+0#e000002&|\+0#e000e06&@1|{+0#e000002&|\+0#e000e06&@1|}+0#e000002&|'|)+0#0000000&|,| @43 +@4|(|r+0#e000002&|"|f|'|\|{@1|'|"|,+0#0000000&| @5|'+0#e000002&|\+0#e000e06&@1|{+0#e000002&|'|)+0#0000000&|,| @46 +@4|(|r+0#e000002&|"|f|'|\|{@2|1|+|1|}|'|"|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|{+0#e000002&|2|'|)+0#0000000&|,| @45 +@4|(|r+0#e000002&|"|f|'|\|}@1|{|1|+|1|}|'|"|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|}+0#e000002&|2|'|)+0#0000000&|,| @45 +@4|(|r+0#e000002&|"|f|'|{|1|+|1|}|\|}@1|'|"|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&@1|}+0#e000002&|'|)+0#0000000&| @46 +@57|2|8|9|,|1| @8|4|7|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_17.dump b/runtime/syntax/testdir/dumps/python_fstring_17.dump new file mode 100644 index 0000000000..d56b12b3ed --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_17.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@3|(|r+0#e000002&|"|f|'|{|1|+|1|}|\|}@1|'|"|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&@1|}+0#e000002&|'|)+0#0000000&| @46 +|]| @73 +|(|f+0#e000002&|r|'|\|{+0#e000e06&@1|\+0#e000002&|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|{+0#e000002&|\+0#e000e06&@1|}+0#e000002&|'|)+0#0000000&| @52 +|(|f+0#e000002&|r|'|\|{+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|{+0#e000002&|'|)+0#0000000&| @58 +|(|f+0#e000002&|r|'|\|{+0#e000e06&@2|1+0#e000002&|++0#0000000&|1+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|{+0#e000002&|2|'|)+0#0000000&| @52 +>(|f+0#e000002&|r|'|\|}+0#e000e06&@1|{|1+0#e000002&|++0#0000000&|1+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|}+0#e000002&|2|'|)+0#0000000&| @52 +|(|f+0#e000002&|r|'|{+0#e000e06&|1+0#e000002&|++0#0000000&|1+0#e000002&|}+0#e000e06&|\+0#e000002&|}+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|2|\+0#e000e06&@1|}+0#e000002&|'|)+0#0000000&| @52 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|f|s|t|r|i|n|g|_|b|a|c|k|s|l|a|s|h|_|p|r|e|f|i|x|_|r|a|w| +0#0000000&@38 +|(|f+0#e000002&|'|\+0#e000e06&@1|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@1|'+0#e000002&|)+0#0000000&| @61 +|(|f+0#e000002&|'|\+0#e000e06&@3|'+0#e000002&|,+0#0000000&| |'+0#e000002&|\+0#e000e06&@3|'+0#e000002&|)+0#0000000&| @57 +|(|f+0#e000002&|r|'|\@1|'|,+0#0000000&| |r+0#e000002&|'|\@1|'|)+0#0000000&| @59 +|(|f+0#e000002&|r|'|\@3|'|,+0#0000000&| |r+0#e000002&|'|\@3|'|)+0#0000000&| @55 +|(|r+0#e000002&|f|'|\@1|'|,+0#0000000&| |r+0#e000002&|'|\@1|'|)+0#0000000&| @59 +|(|r+0#e000002&|f|'|\@3|'|,+0#0000000&| |r+0#e000002&|'|\@3|'|)+0#0000000&| @55 +|(|R+0#e000002&|f|'|\@1|'|,+0#0000000&| |R+0#e000002&|'|\@1|'|)+0#0000000&| @59 +|(|R+0#e000002&|f|'|\@3|'|,+0#0000000&| |R+0#e000002&|'|\@3|'|)+0#0000000&| @55 +|(|f+0#e000002&|R|'|\@1|'|,+0#0000000&| |R+0#e000002&|'|\@1|'|)+0#0000000&| @59 +|(|f+0#e000002&|R|'|\@3|'|,+0#0000000&| |R+0#e000002&|'|\@3|'|)+0#0000000&| @55 +@57|3|0|7|,|1| @8|5|0|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_18.dump b/runtime/syntax/testdir/dumps/python_fstring_18.dump new file mode 100644 index 0000000000..8808a98bb7 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_18.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|R|'|\@3|'|,+0#0000000&| |R+0#e000002&|'|\@3|'|)+0#0000000&| @55 +|(|F+0#e000002&|R|'|\@1|'|,+0#0000000&| |R+0#e000002&|'|\@1|'|)+0#0000000&| @59 +|(|F+0#e000002&|R|'|\@3|'|,+0#0000000&| |R+0#e000002&|'|\@3|'|)+0#0000000&| @55 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|f|s|t|r|i|n|g|_|f|o|r|m|a|t|_|s|p|e|c|_|g|r|e@1|d|y|_|m|a|t|c|h|i|n|g| +0#0000000&@31 +>(|f+0#e000002&|"|{+0#e000e06&|1+0#e000002&|:+0#e000e06&|}@2|"+0#e000002&|,+0#0000000&| |"+0#e000002&|1|}|"|)+0#0000000&| @57 +|(|f+0#e000002&|"|{+0#e000e06&|1+0#e000002&|:+0#e000e06&|>|3|{|5+0#e000002&|}+0#e000e06&@3|"+0#e000002&|,+0#0000000&| |"+0#e000002&| @33|1|}|"|)+0#0000000&| @18 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|y|i|e|l|d| +0#0000000&@61 +|#+0#0000e05&| |N|o|t| |t|e|r@1|i|b|l|y| |u|s|e|f|u|l|,| |b|u|t| |m|a|k|e| |s|u|r|e| |t|h|e| |y|i|e|l|d| |t|u|r|n|s| +0#0000000&@22 +|#+0#0000e05&| @1|a| |f|u|n|c|t|i|o|n| |i|n|t|o| |a| |g|e|n|e|r|a|t|o|r| +0#0000000&@44 +|d+0#af5f00255&|e|f| +0#0000000&|f+0#00e0e07&|n|(+0#0000000&|y|)|:| @64 +@4|f+0#e000002&|'|y|:|{+0#e000e06&|y+0#0000000&|i|e|l|d| |y|*|2+0#e000002&|}+0#e000e06&|'+0#e000002&| +0#0000000&@54 +@4|f+0#e000002&|'|{+0#e000e06&|y+0#0000000&|i|e|l|d|}+0#e000e06&|'+0#e000002&| +0#0000000&@60 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|y|i|e|l|d|_|s|e|n|d| +0#0000000&@56 +|d+0#af5f00255&|e|f| +0#0000000&|f+0#00e0e07&|n|(+0#0000000&|x|)|:| @64 +@4|y+0#af5f00255&|i|e|l|d| +0#0000000&|f+0#e000002&|'|x|:|{+0#e000e06&|y+0#0000000&|i|e|l|d| |(|l+0#af5f00255&|a|m|b|d|a| +0#0000000&|i|:| |x| |*| |i|)|}+0#e000e06&|'+0#e000002&| +0#0000000&@34 +@75 +@57|3|2|5|,|1| @8|5|3|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_19.dump b/runtime/syntax/testdir/dumps/python_fstring_19.dump new file mode 100644 index 0000000000..2d9400ab5e --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_19.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&@1| |t|e|s|t|_|e|x|p|r|e|s@1|i|o|n|s|_|w|i|t|h|_|t|r|i|p|l|e|_|q|u|o|t|e|d|_|s|t|r|i|n|g|s| +0#0000000&@28 +|(|f+0#e000002&|"|{+0#e000e06&|'+0#e000002&@2|x|'@2|}+0#e000e06&|"+0#e000002&|,+0#0000000&| |'+0#e000002&|x|'|)+0#0000000&| @55 +|(|f+0#e000002&|"|{+0#e000e06&|'+0#e000002&@2|e|r|i|c|'|s|'@2|}+0#e000e06&|"+0#e000002&|,+0#0000000&| |"+0#e000002&|e|r|i|c|'|s|"|)+0#0000000&| @45 +@75 +>#+0#0000e05&| |T|e|s|t| |c|o|n|c|a|t|e|n|a|t|i|o|n| |w|i|t|h|i|n| |a|n| |e|x|p|r|e|s@1|i|o|n| +0#0000000&@33 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|x|"| +0#0000000&|"+0#e000002&@2|e|r|i|c|"|s|"@2| +0#0000000&|"+0#e000002&|y|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|e|r|i|c|"|s|y|'|)+0#0000000&| @35 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|x|"| +0#0000000&|"+0#e000002&@2|e|r|i|c|"|s|"@2|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|e|r|i|c|"|s|'|)+0#0000000&| @40 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&@2|e|r|i|c|"|s|"@2| +0#0000000&|"+0#e000002&|y|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|e|r|i|c|"|s|y|'|)+0#0000000&| @40 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&@2|x|"@2| +0#0000000&|"+0#e000002&@2|e|r|i|c|"|s|"@2| +0#0000000&|"+0#e000002&|y|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|e|r|i|c|"|s|y|'|)+0#0000000&| @31 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&@2|x|"@2| +0#0000000&|"+0#e000002&@2|e|r|i|c|"|s|"@2| +0#0000000&|"+0#e000002&@2|y|"@2|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|e|r|i|c|"|s|y|'|)+0#0000000&| @27 +|(|f+0#e000002&|'|{+0#e000e06&|r+0#e000002&|"@2|x|"@2| +0#0000000&|"+0#e000002&@2|e|r|i|c|"|s|"@2| +0#0000000&|"+0#e000002&@2|y|"@2|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|e|r|i|c|"|s|y|'|)+0#0000000&| @26 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|m|u|l|t|i|p|l|e|_|v|a|r|s| +0#0000000&@53 +|x| |=| |9+0#e000002&|8| +0#0000000&@68 +|y| |=| |'+0#e000002&|a|b|c|'| +0#0000000&@65 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|{|y+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|9|8|a|b|c|'|)+0#0000000&| @54 +@75 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|{|y+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|X|9|8|a|b|c|'|)+0#0000000&| @52 +@57|3|4|3|,|1| @8|5|6|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_20.dump b/runtime/syntax/testdir/dumps/python_fstring_20.dump new file mode 100644 index 0000000000..b04eda8dc2 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_20.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|{|y+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|X|9|8|a|b|c|'|)+0#0000000&| @52 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|X+0#e000002&|{+0#e000e06&|y+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|9|8|X|a|b|c|'|)+0#0000000&| @52 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|{|y+0#0000000&|}+0#e000e06&|X+0#e000002&|'|,+0#0000000&| |'+0#e000002&|9|8|a|b|c|X|'|)+0#0000000&| @52 +@75 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|Y+0#e000002&|{+0#e000e06&|y+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|X|9|8|Y|a|b|c|'|)+0#0000000&| @50 +>(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|{|y+0#0000000&|}+0#e000e06&|Y+0#e000002&|'|,+0#0000000&| |'+0#e000002&|X|9|8|a|b|c|Y|'|)+0#0000000&| @50 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|X+0#e000002&|{+0#e000e06&|y+0#0000000&|}+0#e000e06&|Y+0#e000002&|'|,+0#0000000&| |'+0#e000002&|9|8|X|a|b|c|Y|'|)+0#0000000&| @50 +@75 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|Y+0#e000002&|{+0#e000e06&|y+0#0000000&|}+0#e000e06&|Z+0#e000002&|'|,+0#0000000&| |'+0#e000002&|X|9|8|Y|a|b|c|Z|'|)+0#0000000&| @48 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|c|l|o|s|u|r|e| +0#0000000&@59 +|d+0#af5f00255&|e|f| +0#0000000&|o+0#00e0e07&|u|t|e|r|(+0#0000000&|x|)|:| @61 +@4|d+0#af5f00255&|e|f| +0#0000000&|i+0#00e0e07&|n@1|e|r|(+0#0000000&|)|:| @58 +@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|f+0#e000002&|'|x|:|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&@51 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|i|n@1|e|r| @58 +@75 +|(|o|u|t|e|r|(|'+0#e000002&|9|8|7|'|)+0#0000000&|(|)|,| |'+0#e000002&|x|:|9|8|7|'|)+0#0000000&| @49 +|(|o|u|t|e|r|(|7+0#e000002&|)+0#0000000&|(|)|,| |'+0#e000002&|x|:|7|'|)+0#0000000&| @55 +@75 +@57|3|6|1|,|1| @8|5|9|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_21.dump b/runtime/syntax/testdir/dumps/python_fstring_21.dump new file mode 100644 index 0000000000..6fa965be6f --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_21.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&@1| |t|e|s|t|_|a|r|g|u|m|e|n|t|s| +0#0000000&@57 +|y| |=| |2+0#e000002&| +0#0000000&@69 +|d+0#af5f00255&|e|f| +0#0000000&|f+0#00e0e07&|(+0#0000000&|x|,| |w|i|d|t|h|)|:| @58 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|f+0#e000002&|'|x|=|{+0#e000e06&|x+0#0000000&|*|y|:+0#e000e06&|{|w+0#0000000&|i|d|t|h|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@45 +> @74 +|(|f|(|'+0#e000002&|f|o@1|'|,+0#0000000&| |1+0#e000002&|0|)+0#0000000&|,| |'+0#e000002&|x|=|f|o@1|f|o@1| @3|'|)+0#0000000&| @44 +|x| |=| |'+0#e000002&|b|a|r|'| +0#0000000&@65 +|(|f|(|1+0#e000002&|0|,+0#0000000&| |1+0#e000002&|0|)+0#0000000&|,| |'+0#e000002&|x|=| @7|2|0|'|)+0#0000000&| @47 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|l|o|c|a|l|s| +0#0000000&@60 +|v|a|l|u|e| |=| |1+0#e000002&|2|3| +0#0000000&@63 +|(|f+0#e000002&|'|v|:|{+0#e000e06&|v+0#0000000&|a|l|u|e|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|v|:|1|2|3|'|)+0#0000000&| @51 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|m|i|s@1|i|n|g|_|f|o|r|m|a|t|_|s|p|e|c| +0#0000000&@47 +|c+0#af5f00255&|l|a|s@1| +0#0000000&|O+0#00e0e07&|:+0#0000000&| @66 +@4|d+0#af5f00255&|e|f| +0#0000000&|_+0#00e0e07&@1|f|o|r|m|a|t|_@1|(+0#0000000&|s|e|l|f|,| |s|p|e|c|)|:| @43 +@8|i+0#af5f00255&|f| +0#0000000&|n+0#af5f00255&|o|t| +0#0000000&|s|p|e|c|:| @54 +@12|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|'+0#e000002&|*|'| +0#0000000&@52 +@57|3|7|9|,|0|-|1| @6|6|2|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_22.dump b/runtime/syntax/testdir/dumps/python_fstring_22.dump new file mode 100644 index 0000000000..ea984131fe --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_22.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@11|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|'+0#e000002&|*|'| +0#0000000&@52 +@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|s|p|e|c| @55 +@75 +|(|f+0#e000002&|'|{+0#e000e06&|O+0#0000000&|(|)|:+0#e000e06&|x|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|'|)+0#0000000&| @57 +|(|f+0#e000002&|'|{+0#e000e06&|O+0#0000000&|(|)|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|*|'|)+0#0000000&| @59 +>(|f+0#e000002&|'|{+0#e000e06&|O+0#0000000&|(|)|:+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|*|'|)+0#0000000&| @58 +@75 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|:+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|'|)+0#0000000&| @60 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|!+0#e000e06&|s|:|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|'|)+0#0000000&| @58 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|c|a|l@1| +0#0000000&@62 +|d+0#af5f00255&|e|f| +0#0000000&|f+0#00e0e07&|o@1|(+0#0000000&|x|)|:| @63 +@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|'+0#e000002&|x|=|'| +0#0000000&|+| |s+0#00e0e07&|t|r|(+0#0000000&|x|)| @50 +@75 +|(|f+0#e000002&|'|{+0#e000e06&|f+0#0000000&|o@1|(|1+0#e000002&|0|)+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|1|0|'|)+0#0000000&| @52 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|n|e|s|t|e|d|_|f|s|t|r|i|n|g|s| +0#0000000&@51 +|y| |=| |5+0#e000002&| +0#0000000&@69 +|(|f+0#e000002&|'|{+0#e000e06&|f+0#e000002&|"|{+0#e000e06&|0+0#e000002&|}+0#e000e06&|"+0#e000002&|*+0#0000000&|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|0@2|'|)+0#0000000&| @52 +@57|3|9|7|,|1| @8|6|5|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_23.dump b/runtime/syntax/testdir/dumps/python_fstring_23.dump new file mode 100644 index 0000000000..f664d50664 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_23.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|{+0#e000e06&|f+0#e000002&|"|{+0#e000e06&|0+0#e000002&|}+0#e000e06&|"+0#e000002&|*+0#0000000&|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|0@2|'|)+0#0000000&| @52 +|(|f+0#e000002&|'|{+0#e000e06&|f+0#e000002&|"|{+0#e000e06&|y+0#0000000&|}+0#e000e06&|"+0#e000002&|*+0#0000000&|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|5@2|'|)+0#0000000&| @52 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|l|e|a|d|i|n|g|_|t|r|a|i|l|i|n|g|_|s|p|a|c|e|s| +0#0000000&@43 +|(|f+0#e000002&|'|{+0#e000e06&| +0#0000000&|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|'|)+0#0000000&| @60 +>(|f+0#e000002&|'|{+0#e000e06&| +0#0000000&@1|3+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|'|)+0#0000000&| @59 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&| +0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|'|)+0#0000000&| @60 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&| +0#0000000&@1|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|'|)+0#0000000&| @59 +@75 +|(|f+0#e000002&|'|e|x|p|r|=|{+0#e000e06&| +0#0000000&|{|x|:| |y| |f+0#af5f00255&|o|r| +0#0000000&|x|,| |y| |i+0#af5f00255&|n| +0#0000000&|[|(|1+0#e000002&|,+0#0000000&| |2+0#e000002&|)+0#0000000&|,| |]|}|}+0#e000e06&|'+0#e000002&|,+0#0000000&| @32 +@17|'+0#e000002&|e|x|p|r|=|{|1|:| |2|}|'|)+0#0000000&| @43 +|(|f+0#e000002&|'|e|x|p|r|=|{+0#e000e06&| +0#0000000&|{|x|:| |y| |f+0#af5f00255&|o|r| +0#0000000&|x|,| |y| |i+0#af5f00255&|n| +0#0000000&|[|(|1+0#e000002&|,+0#0000000&| |2+0#e000002&|)+0#0000000&|,| |]|}| |}+0#e000e06&|'+0#e000002&|,+0#0000000&| @31 +@17|'+0#e000002&|e|x|p|r|=|{|1|:| |2|}|'|)+0#0000000&| @43 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|n|o|t|_|e|q|u|a|l| +0#0000000&@57 +|#+0#0000e05&| |T|h|e|r|e|'|s| |a| |s|p|e|c|i|a|l| |t|e|s|t| |f|o|r| |t|h|i|s| |b|e|c|a|u|s|e| |t|h|e|r|e|'|s| |a| |s|p|e|c|i|a|l| +0#0000000&@15 +|#+0#0000e05&| @1|c|a|s|e| |i|n| |t|h|e| |f|-|s|t|r|i|n|g| |p|a|r|s|e|r| |t|o| |l|o@1|k| |f|o|r| |!|=| |a|s| |n|o|t| |e|n|d|i|n|g| |a|n| +0#0000000&@12 +|#+0#0000e05&| @1|e|x|p|r|e|s@1|i|o|n|.| |N|o|r|m|a|l@1|y| |i|t| |w|o|u|l|d|,| |w|h|i|l|e| |l|o@1|k|i|n|g| |f|o|r| |!|s| |o|r| |!|r|.| +0#0000000&@13 +@75 +@57|4|1|5|,|1| @8|6|8|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_24.dump b/runtime/syntax/testdir/dumps/python_fstring_24.dump new file mode 100644 index 0000000000..9827eb1216 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_24.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|!+0#0000000&|=|4+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|T|r|u|e|'|)+0#0000000&| @55 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|!+0#0000000&|=|4+0#e000002&|:+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|T|r|u|e|'|)+0#0000000&| @54 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|!+0#0000000&|=|4+0#e000002&|!+0#e000e06&|s|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|T|r|u|e|'|)+0#0000000&| @53 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|!+0#0000000&|=|4+0#e000002&|!+0#e000e06&|s|:|.|3|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|T|r|u|'|)+0#0000000&| @51 +> @74 +|#+0#0000e05&@1| |t|e|s|t|_|e|q|u|a|l|_|e|q|u|a|l| +0#0000000&@55 +|#+0#0000e05&| |B|e|c|a|u|s|e| |a|n| |e|x|p|r|e|s@1|i|o|n| |e|n|d|i|n|g| |i|n| |=| |h|a|s| |s|p|e|c|i|a|l| |m|e|a|n|i|n|g|,| +0#0000000&@18 +|#+0#0000e05&| |t|h|e|r|e|'|s| |a| |s|p|e|c|i|a|l| |t|e|s|t| |f|o|r| |=@1|.| |M|a|k|e| |s|u|r|e| |i|t| |w|o|r|k|s|.| +0#0000000&@22 +@75 +|(|f+0#e000002&|'|{+0#e000e06&|0+0#e000002&|=+0#0000000&@1|1+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|F|a|l|s|e|'|)+0#0000000&| @54 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|c|o|n|v|e|r|s|i|o|n|s| +0#0000000&@55 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|.+0#0000000&|1+0#e000002&|4|:+0#e000e06&|1|0|.|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @5|3|.|1|4|'|)+0#0000000&| @43 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|.+0#0000000&|1+0#e000002&|4|!+0#e000e06&|s|:|1|0|.|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|.|1|4| @5|'|)+0#0000000&| @41 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|.+0#0000000&|1+0#e000002&|4|!+0#e000e06&|r|:|1|0|.|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|.|1|4| @5|'|)+0#0000000&| @41 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|.+0#0000000&|1+0#e000002&|4|!+0#e000e06&|a|:|1|0|.|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|.|1|4| @5|'|)+0#0000000&| @41 +@75 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|a|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|a|'|)+0#0000000&| @59 +@57|4|3@1|,|0|-|1| @6|7|1|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_25.dump b/runtime/syntax/testdir/dumps/python_fstring_25.dump new file mode 100644 index 0000000000..b414140248 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_25.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|a|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|a|'|)+0#0000000&| @59 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|a|"|!+0#e000e06&|r|}|'+0#e000002&|,+0#0000000&| |"+0#e000002&|'|a|'|"|)+0#0000000&| @55 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|a|"|!+0#e000e06&|a|}|'+0#e000002&|,+0#0000000&| |"+0#e000002&|'|a|'|"|)+0#0000000&| @55 +@75 +|#+0#0000e05&| |C|o|n|v|e|r|s|i|o|n|s| |c|a|n| |h|a|v|e| |t|r|a|i|l|i|n|g| |w|h|i|t|e|s|p|a|c|e| |a|f|t|e|r| |t|h|e|m| |s|i|n|c|e| |i|t| +0#0000000&@12 +>#+0#0000e05&| |d|o|e|s| |n|o|t| |p|r|o|v|i|d|e| |a|n|y| |s|i|g|n|i|f|i|c|a|n|c|e| +0#0000000&@39 +|(|f+0#e000002&|"|{+0#e000e06&|3+0#e000002&|!+0#e000e06&|s| +0#0000000&@1|}+0#e000e06&|"+0#e000002&|,+0#0000000&| |"+0#e000002&|3|"|)+0#0000000&| @57 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|.+0#0000000&|1+0#e000002&|4|!+0#e000e06&|s| +0#0000000&@1|:+0#e000e06&|1|0|.|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|.|1|4| @5|'|)+0#0000000&| @39 +@75 +|#+0#0000e05&| |N|o|t| |a| |c|o|n|v|e|r|s|i|o|n|.| +0#0000000&@55 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|a|!|r|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |"+0#e000002&|a|!|r|"|)+0#0000000&| @55 +@75 +|#+0#0000e05&| |N|o|t| |a| |c|o|n|v|e|r|s|i|o|n|,| |b|u|t| |s|h|o|w| |t|h|a|t| |!| |i|s| |a|l@1|o|w|e|d| |i|n| |a| |f|o|r|m|a|t| |s|p|e|c|.| +0#0000000&@10 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|.+0#0000000&|1+0#e000002&|4|:+0#e000e06&|!|<|1|0|.|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|.|1|4|!@5|'|)+0#0000000&| @41 +@75 +|#+0#0000e05&| |B|u|t| |t|h|e|s|e| |a|r|e| |j|u|s|t| |n|o|r|m|a|l| |s|t|r|i|n|g|s|.| +0#0000000&@38 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|{|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{|'|)+0#0000000&| @59 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|}|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|}|'|)+0#0000000&| @59 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|:+0#e000e06&|{|"+0#e000002&|}|"|}+0#e000e06&|>|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|}@8|3|'|)+0#0000000&| @43 +@57|4|5|1|,|1| @8|7|4|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_26.dump b/runtime/syntax/testdir/dumps/python_fstring_26.dump new file mode 100644 index 0000000000..f48c5375d8 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_26.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|:+0#e000e06&|{|"+0#e000002&|}|"|}+0#e000e06&|>|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|}@8|3|'|)+0#0000000&| @43 +|(|f+0#e000002&|'|{+0#e000e06&|2+0#e000002&|:+0#e000e06&|{|"+0#e000002&|{|"|}+0#e000e06&|>|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|{@8|2|'|)+0#0000000&| @43 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|e|m|p|t|y|_|f|o|r|m|a|t|_|s|p|e|c|i|f|i|e|r| +0#0000000&@44 +|x| |=| |'+0#e000002&|t|e|s|t|'| +0#0000000&@64 +>(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|t|e|s|t|'|)+0#0000000&| @58 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|:+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|t|e|s|t|'|)+0#0000000&| @57 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|!+0#e000e06&|s|:|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|t|e|s|t|'|)+0#0000000&| @55 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|!+0#e000e06&|r|:|}|'+0#e000002&|,+0#0000000&| |"+0#e000002&|'|t|e|s|t|'|"|)+0#0000000&| @53 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|s|t|r|_|f|o|r|m|a|t|_|d|i|f@1|e|r|e|n|c|e|s| +0#0000000&@44 +|d| |=| |{|'+0#e000002&|a|'|:+0#0000000&| |'+0#e000002&|s|t|r|i|n|g|'|,+0#0000000&| @55 +@5|0+0#e000002&|:+0#0000000&| |'+0#e000002&|i|n|t|e|g|e|r|'|,+0#0000000&| @56 +@5|}| @68 +|a| |=| |0+0#e000002&| +0#0000000&@69 +|(|f+0#e000002&|'|{+0#e000e06&|d+0#0000000&|[|0+0#e000002&|]+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|i|n|t|e|g|e|r|'|)+0#0000000&| @52 +|(|f+0#e000002&|'|{+0#e000e06&|d+0#0000000&|[|"+0#e000002&|a|"|]+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|s|t|r|i|n|g|'|)+0#0000000&| @51 +|(|f+0#e000002&|'|{+0#e000e06&|d+0#0000000&|[|a|]|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|i|n|t|e|g|e|r|'|)+0#0000000&| @52 +|(|'+0#e000002&|{|d|[|a|]|}|'|.+0#0000000&|f|o|r|m|a|t|(|d|=|d|)|,| |'+0#e000002&|s|t|r|i|n|g|'|)+0#0000000&| @42 +@57|4|6|9|,|1| @8|7@1|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_27.dump b/runtime/syntax/testdir/dumps/python_fstring_27.dump new file mode 100644 index 0000000000..4a48a6d951 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_27.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|'+0#e000002&|{|d|[|a|]|}|'|.+0#0000000&|f|o|r|m|a|t|(|d|=|d|)|,| |'+0#e000002&|s|t|r|i|n|g|'|)+0#0000000&| @42 +|(|'+0#e000002&|{|d|[|0|]|}|'|.+0#0000000&|f|o|r|m|a|t|(|d|=|d|)|,| |'+0#e000002&|i|n|t|e|g|e|r|'|)+0#0000000&| @41 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|d|i|c|t| +0#0000000&@62 +|d| |=| |{|'+0#e000002&|"|'|:+0#0000000&| |'+0#e000002&|d|q|u|o|t|e|'|,+0#0000000&| @55 +@5>"+0#e000002&|'|"|:+0#0000000&| |'+0#e000002&|s|q|u|o|t|e|'|,+0#0000000&| @55 +@5|'+0#e000002&|f|o@1|'|:+0#0000000&| |'+0#e000002&|b|a|r|'|,+0#0000000&| @56 +@5|}| @68 +|(|f+0#e000002&|'@2|{+0#e000e06&|d+0#0000000&|[|"+0#e000002&|'|"|]+0#0000000&|}+0#e000e06&|'+0#e000002&@2|,+0#0000000&| |'+0#e000002&|s|q|u|o|t|e|'|)+0#0000000&| @47 +|(|f+0#e000002&|"@2|{+0#e000e06&|d+0#0000000&|[|'+0#e000002&|"|'|]+0#0000000&|}+0#e000e06&|"+0#e000002&@2|,+0#0000000&| |'+0#e000002&|d|q|u|o|t|e|'|)+0#0000000&| @47 +@75 +|(|f+0#e000002&|'|{+0#e000e06&|d+0#0000000&|[|"+0#e000002&|f|o@1|"|]+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|b|a|r|'|)+0#0000000&| @52 +|(|f+0#e000002&|"|{+0#e000e06&|d+0#0000000&|[|'+0#e000002&|f|o@1|'|]+0#0000000&|}+0#e000e06&|"+0#e000002&|,+0#0000000&| |'+0#e000002&|b|a|r|'|)+0#0000000&| @52 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|d|e|b|u|g|_|c|o|n|v|e|r|s|i|o|n| +0#0000000&@50 +|x| |=| |'+0#e000002&|A| |s|t|r|i|n|g|'| +0#0000000&@60 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |r+0#00e0e07&|e|p|r|(+0#0000000&|x|)@1| @49 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&| |=+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x| |=|'| +0#0000000&|+| |r+0#00e0e07&|e|p|r|(+0#0000000&|x|)@1| @47 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|!|s|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |s+0#00e0e07&|t|r|(+0#0000000&|x|)@1| @48 +@57|4|8|7|,|6| @8|8|0|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_28.dump b/runtime/syntax/testdir/dumps/python_fstring_28.dump new file mode 100644 index 0000000000..e0f2d9d1e2 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_28.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|!|s|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |s+0#00e0e07&|t|r|(+0#0000000&|x|)@1| @48 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|!|r|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |r+0#00e0e07&|e|p|r|(+0#0000000&|x|)@1| @47 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|!|a|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |a+0#00e0e07&|s|c|i@1|(+0#0000000&|x|)@1| @46 +@75 +|x| |=| |2+0#e000002&|.|7|1|8|2|8| +0#0000000&@63 +>(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|:|.|2|f|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |f+0#00e0e07&|o|r|m|a|t|(+0#0000000&|x|,| |'+0#e000002&|.|2|f|'|)+0#0000000&@1| @36 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|:|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |f+0#00e0e07&|o|r|m|a|t|(+0#0000000&|x|,| |'+0#e000002&@1|)+0#0000000&@1| @42 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|!|r|:|^|2|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |f+0#00e0e07&|o|r|m|a|t|(+0#0000000&|r+0#00e0e07&|e|p|r|(+0#0000000&|x|)|,| |'+0#e000002&|^|2|0|'|)+0#0000000&@1| @28 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|!|s|:|^|2|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |f+0#00e0e07&|o|r|m|a|t|(+0#0000000&|s+0#00e0e07&|t|r|(+0#0000000&|x|)|,| |'+0#e000002&|^|2|0|'|)+0#0000000&@1| @29 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|!|a|:|^|2|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|x|=|'| +0#0000000&|+| |f+0#00e0e07&|o|r|m|a|t|(+0#0000000&|a+0#00e0e07&|s|c|i@1|(+0#0000000&|x|)|,| |'+0#e000002&|^|2|0|'|)+0#0000000&@1| @27 +@75 +|x| |=| |9+0#e000002&| +0#0000000&@69 +|(|f+0#e000002&|'|{+0#e000e06&|3+0#e000002&|*+0#0000000&|x|+|1+0#e000002&|5|=+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|*|x|+|1|5|=|4|2|'|)+0#0000000&| @47 +@75 +|#+0#0000e05&| |T|h|e|r|e| |i|s| |c|o|d|e| |i|n| |a|s|t|.|c| |t|h|a|t| |d|e|a|l|s| |w|i|t|h| |n|o|n|-|a|s|c|i@1| |e|x|p|r|e|s@1|i|o|n| |v|a|l|u|e|s|.| @1|S|o|,| +0#0000000& +|#+0#0000e05&| |u|s|e| |a| |u|n|i|c|o|d|e| |i|d|e|n|t|i|f|i|e|r| |t|o| |t|r|i|g@1|e|r| |t|h|a|t|.| +0#0000000&@31 +|t|e|n|π| |=| |3+0#e000002&|1|.|4| +0#0000000&@63 +|(|f+0#e000002&|'|{+0#e000e06&|t+0#0000000&|e|n|π|=+0#e000e06&|:|.|2|f|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|t|e|n|π|=|3|1|.|4|0|'|)+0#0000000&| @44 +@75 +@57|5|0|5|,|1| @8|8|4|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_29.dump b/runtime/syntax/testdir/dumps/python_fstring_29.dump new file mode 100644 index 0000000000..42cf00b446 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_29.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|#+0#0000e05&| |A|l|s|o| |t|e|s|t| |w|i|t|h| |U|n|i|c|o|d|e| |i|n| |n|o|n|-|i|d|e|n|t|i|f|i|e|r|s|.| +0#0000000&@30 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|Σ|"|=+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|"|Σ|"|=|\+0#e000e06&|'|Σ+0#e000002&|\+0#e000e06&|'|'+0#e000002&|)+0#0000000&| @50 +@75 +|#+0#0000e05&| |M|a|k|e| |s|u|r|e| |n|e|s|t|e|d| |f|s|t|r|i|n|g|s| |s|t|i|l@1| |w|o|r|k|.| +0#0000000&@35 +>(|f+0#e000002&|'|{+0#e000e06&|f+0#e000002&|"|{+0#e000e06&|3+0#e000002&|.+0#0000000&|1+0#e000002&|4|1|5|=+0#e000e06&|:|.|1|f|}|"+0#e000002&|:+0#e000e06&|*|^|2|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|*@4|3|.|1|4|1|5|=|3|.|1|*@4|'|)+0#0000000&| @22 +@75 +|#+0#0000e05&| |M|a|k|e| |s|u|r|e| |t|e|x|t| |b|e|f|o|r|e| |a|n|d| |a|f|t|e|r| |a|n| |e|x|p|r|e|s@1|i|o|n| |w|i|t|h| |=| |w|o|r|k|s| +0#0000000&@14 +|#+0#0000e05&| |c|o|r@1|e|c|t|l|y|.| +0#0000000&@62 +|p|i| |=| |'+0#e000002&|π|'| +0#0000000&@66 +|(|f+0#e000002&|'|a|l|p|h|a| |α| |{+0#e000e06&|p+0#0000000&|i|=+0#e000e06&|}| +0#e000002&|ω| |o|m|e|g|a|'|,+0#0000000&| |"+0#e000002&|a|l|p|h|a| |α| |p|i|=|'|π|'| |ω| |o|m|e|g|a|"|)+0#0000000&| @22 +@75 +|#+0#0000e05&| |C|h|e|c|k| |m|u|l|t|i|-|l|i|n|e| |e|x|p|r|e|s@1|i|o|n|s|.| +0#0000000&@43 +|(|f+0#e000002&|'@2|{+0#e000e06&| +0#0000000&@68 +|3+0#e000002&| +0#0000000&@73 +|=+0#e000e06&|}|'+0#e000002&@2|,+0#0000000&| |'+0#e000002&|\+0#e000e06&|n|3+0#e000002&|\+0#e000e06&|n|=+0#e000002&|3|'|)+0#0000000&| @57 +@75 +|#+0#0000e05&| |S|i|n|c|e| |=| |i|s| |h|a|n|d|l|e|d| |s|p|e|c|i|a|l@1|y|,| |m|a|k|e| |s|u|r|e| |a|l@1| |e|x|i|s|t|i|n|g| |u|s|e|s| |o|f| +0#0000000&@12 +|#+0#0000e05&| |i|t| |s|t|i|l@1| |w|o|r|k|.| +0#0000000&@58 +@57|5|2|3|,|1| @8|8|7|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_30.dump b/runtime/syntax/testdir/dumps/python_fstring_30.dump new file mode 100644 index 0000000000..66a4b24fd1 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_30.dump @@ -0,0 +1,20 @@ +|#+0#0000e05#ffffff0| |i|t| |s|t|i|l@1| |w|o|r|k|.| +0#0000000&@58 +@75 +|(|f+0#e000002&|'|{+0#e000e06&|0+0#e000002&|=+0#0000000&@1|1+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|F|a|l|s|e|'|)+0#0000000&| @54 +|(|f+0#e000002&|'|{+0#e000e06&|0+0#e000002&|!+0#0000000&|=|1+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|T|r|u|e|'|)+0#0000000&| @55 +|(|f+0#e000002&|'|{+0#e000e06&|0+0#e000002&|<+0#0000000&|=|1+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|T|r|u|e|'|)+0#0000000&| @55 +>(|f+0#e000002&|'|{+0#e000e06&|0+0#e000002&|>+0#0000000&|=|1+0#e000002&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|F|a|l|s|e|'|)+0#0000000&| @54 +|(|f+0#e000002&|'|{+0#e000e06&|(+0#0000000&|x|:|=|"+0#e000002&|5|"|)+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|5|'|)+0#0000000&| @54 +|(|x|,| |'+0#e000002&|5|'|)+0#0000000&| @66 +|(|f+0#e000002&|'|{+0#e000e06&|(+0#0000000&|x|:|=|5+0#e000002&|)+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|5|'|)+0#0000000&| @56 +|(|x|,| |5+0#e000002&|)+0#0000000&| @68 +|(|f+0#e000002&|'|{+0#e000e06&|"+0#e000002&|=|"|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|=|'|)+0#0000000&| @59 +@75 +|x| |=| |2+0#e000002&|0| +0#0000000&@68 +|#+0#0000e05&| |T|h|i|s| |i|s|n|'|t| |a|n| |a|s@1|i|g|n|m|e|n|t| |e|x|p|r|e|s@1|i|o|n|,| |i|t|'|s| |'|x|'|,| |w|i|t|h| |a| |f|o|r|m|a|t| +0#0000000&@12 +|#+0#0000e05&| |s|p|e|c| |o|f| |'|=|1|0|'|.| @1|S|e@1| |t|e|s|t|_|w|a|l|r|u|s|:| |y|o|u| |n|e@1|d| |t|o| |u|s|e| |p|a|r|e|n|s|.| +0#0000000&@16 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|:+0#e000e06&|=|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @7|2|0|'|)+0#0000000&| @48 +@75 +|#+0#0000e05&| |T|e|s|t| |n|a|m|e|d| |f|u|n|c|t|i|o|n| |p|a|r|a|m|e|t|e|r|s|,| |t|o| |m|a|k|e| |s|u|r|e| |'|=|'| |p|a|r|s|i|n|g| |w|o|r|k|s| +0#0000000&@10 +|#+0#0000e05&| |t|h|e|r|e|.| +0#0000000&@66 +@57|5|4|1|,|1| @8|9|0|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_31.dump b/runtime/syntax/testdir/dumps/python_fstring_31.dump new file mode 100644 index 0000000000..0621ff242f --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_31.dump @@ -0,0 +1,20 @@ +|#+0#0000e05#ffffff0| |t|h|e|r|e|.| +0#0000000&@66 +|d+0#af5f00255&|e|f| +0#0000000&|f+0#00e0e07&|(+0#0000000&|a|)|:| @65 +@4|n+0#af5f00255&|o|n|l|o|c|a|l| +0#0000000&|x| @60 +@4|o|l|d|x| |=| |x| @62 +@4|x| |=| |a| @65 +@4>r+0#af5f00255&|e|t|u|r|n| +0#0000000&|o|l|d|x| @59 +|x| |=| |0+0#e000002&| +0#0000000&@69 +|(|f+0#e000002&|'|{+0#e000e06&|f+0#0000000&|(|a|=|"+0#e000002&|3|=|"|)+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|0|'|)+0#0000000&| @53 +|(|x|,| |'+0#e000002&|3|=|'|)+0#0000000&| @65 +|(|f+0#e000002&|'|{+0#e000e06&|f+0#0000000&|(|a|=|4+0#e000002&|)+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|3|=|'|)+0#0000000&| @55 +|(|x|,| |4+0#e000002&|)+0#0000000&| @68 +@75 +|#+0#0000e05&| |M|a|k|e| |s|u|r|e| |_@1|f|o|r|m|a|t|_@1| |i|s| |b|e|i|n|g| |c|a|l@1|e|d|.| +0#0000000&@35 +|c+0#af5f00255&|l|a|s@1| +0#0000000&|C+0#00e0e07&|:+0#0000000&| @66 +@4|d+0#af5f00255&|e|f| +0#0000000&|_+0#00e0e07&@1|f|o|r|m|a|t|_@1|(+0#0000000&|s|e|l|f|,| |s|)|:| @46 +@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|f+0#e000002&|'|F|O|R|M|A|T|-|{+0#e000e06&|s+0#0000000&|}+0#e000e06&|'+0#e000002&| +0#0000000&@46 +@4|d+0#af5f00255&|e|f| +0#0000000&|_+0#00e0e07&@1|r|e|p|r|_@1|(+0#0000000&|s|e|l|f|)|:| @51 +@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|'+0#e000002&|R|E|P|R|'| +0#0000000&@53 +@75 +@57|5@1|9|,|5| @8|9|3|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_32.dump b/runtime/syntax/testdir/dumps/python_fstring_32.dump new file mode 100644 index 0000000000..248b201594 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_32.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@74 +|(|f+0#e000002&|'|{+0#e000e06&|C+0#0000000&|(|)|=+0#e000e06&|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|C|(|)|=|R|E|P|R|'|)+0#0000000&| @51 +|(|f+0#e000002&|'|{+0#e000e06&|C+0#0000000&|(|)|=+0#e000e06&|!|r|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|C|(|)|=|R|E|P|R|'|)+0#0000000&| @49 +|(|f+0#e000002&|'|{+0#e000e06&|C+0#0000000&|(|)|=+0#e000e06&|:|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|C|(|)|=|F|O|R|M|A|T|-|'|)+0#0000000&| @47 +|(|f+0#e000002&|'|{+0#e000e06&|C+0#0000000&|(|)|=+0#e000e06&|:| |}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|C|(|)|=|F|O|R|M|A|T|-| |'|)+0#0000000&| @45 +>(|f+0#e000002&|'|{+0#e000e06&|C+0#0000000&|(|)|=+0#e000e06&|:|x|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|C|(|)|=|F|O|R|M|A|T|-|x|'|)+0#0000000&| @45 +|(|f+0#e000002&|'|{+0#e000e06&|C+0#0000000&|(|)|=+0#e000e06&|!|r|:|*|^|2|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&|C|(|)|=|*@7|R|E|P|R|*@7|'|)+0#0000000&| @28 +@75 +@8|s|e|l|f|.|a|s@1|e|r|t|R|a|i|s|e|s|(|S+0#00e0003&|y|n|t|a|x|E|r@1|o|r|,+0#0000000&| |e+0#00e0e07&|v|a|l|,+0#0000000&| |"+0#e000002&|f|'|{|C|=|]|'|"|)+0#0000000&| @19 +@75 +|#+0#0000e05&| |M|a|k|e| |s|u|r|e| |l|e|a|d|i|n|g| |a|n|d| |f|o|l@1|o|w|i|n|g| |t|e|x|t| |w|o|r|k|s|.| +0#0000000&@29 +|x| |=| |'+0#e000002&|f|o@1|'| +0#0000000&@65 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&|=+0#e000e06&|}|Y+0#e000002&|'|,+0#0000000&| |'+0#e000002&|X|x|=|'|++0#0000000&|r+0#00e0e07&|e|p|r|(+0#0000000&|x|)|+|'+0#e000002&|Y|'|)+0#0000000&| @44 +@75 +|#+0#0000e05&| |M|a|k|e| |s|u|r|e| |w|h|i|t|e|s|p|a|c|e| |a|r|o|u|n|d| |t|h|e| |=| |w|o|r|k|s|.| +0#0000000&@32 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&| @1|=+0#e000e06&|}|Y+0#e000002&|'|,+0#0000000&| |'+0#e000002&|X|x| @1|=|'|++0#0000000&|r+0#00e0e07&|e|p|r|(+0#0000000&|x|)|+|'+0#e000002&|Y|'|)+0#0000000&| @40 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&|=+0#e000e06&| +0#0000000&@1|}+0#e000e06&|Y+0#e000002&|'|,+0#0000000&| |'+0#e000002&|X|x|=| @1|'|++0#0000000&|r+0#00e0e07&|e|p|r|(+0#0000000&|x|)|+|'+0#e000002&|Y|'|)+0#0000000&| @40 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&| @1|=+0#e000e06&| +0#0000000&@1|}+0#e000e06&|Y+0#e000002&|'|,+0#0000000&| |'+0#e000002&|X|x| @1|=| @1|'|++0#0000000&|r+0#00e0e07&|e|p|r|(+0#0000000&|x|)|+|'+0#e000002&|Y|'|)+0#0000000&| @36 +|(|f+0#e000002&|"|s|a|d|s|d| |{+0#e000e06&|1+0#e000002&| +0#0000000&|+| |1+0#e000002&| +0#0000000&|=+0#e000e06&| +0#0000000&@1|:+0#e000e06&|{|1+0#e000002&| +0#0000000&|+| |1+0#e000002&|:+0#e000e06&|1|d|}|f|}|"+0#e000002&|,+0#0000000&| |"+0#e000002&|s|a|d|s|d| |1| |+| |1| |=| @1|2|.|0@5|"|)+0#0000000&| @13 +@57|5|7@1|,|1| @8|9|6|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_33.dump b/runtime/syntax/testdir/dumps/python_fstring_33.dump new file mode 100644 index 0000000000..365894b619 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_33.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|"|s|a|d|s|d| |{+0#e000e06&|1+0#e000002&| +0#0000000&|+| |1+0#e000002&| +0#0000000&|=+0#e000e06&| +0#0000000&@1|:+0#e000e06&|{|1+0#e000002&| +0#0000000&|+| |1+0#e000002&|:+0#e000e06&|1|d|}|f|}|"+0#e000002&|,+0#0000000&| |"+0#e000002&|s|a|d|s|d| |1| |+| |1| |=| @1|2|.|0@5|"|)+0#0000000&| @13 +@75 +|(|f+0#e000002&|"|{+0#e000e06&|1+0#e000002&|++0#0000000&|2+0#e000002&| +0#0000000&|=+0#e000e06&| +0#0000000&|#+0#0000e05&| |m|y| |c|o|m@1|e|n|t| +0#0000000&@52 +@2|}+0#e000e06&|"+0#e000002&|,+0#0000000&| |'+0#e000002&|1|+|2| |=| |\+0#e000e06&|n| +0#e000002&@1|3|'|)+0#0000000&| @54 +@75 +>#+0#0000e05&| |T|h|e|s|e| |n|e|x|t| |l|i|n|e|s| |c|o|n|t|a|i|n|s| |t|a|b|s|.| @1|B|a|c|k|s|l|a|s|h| |e|s|c|a|p|e|s| |d|o|n|'|t| +0#0000000&@16 +|#+0#0000e05&| |w|o|r|k| |i|n| |f|-|s|t|r|i|n|g|s|.| +0#0000000&@54 +|#+0#0000e05&| |p|a|t|c|h|c|h|e|c|k| |d|o|e|s|n|'|t| |l|i|k|e| |t|h|e|s|e| |t|a|b|s|.| @1|S|o| |t|h|e| |o|n|l|y| |w|a|y| |t|o| |t|e|s|t| +0#0000000&@12 +|#+0#0000e05&| |t|h|i|s| |w|i|l@1| |b|e| |t|o| |d|y|n|a|m|i|c|a|l@1|y| |c|r|e|a|t|e|d| |a|n|d| |e|x|e|c| |t|h|e| |f|-|s|t|r|i|n|g|s|.| @1|B|u|t| +0#0000000&@8 +|#+0#0000e05&| |t|h|a|t|'|s| |s|u|c|h| |a| |h|a|s@1|l|e| |I|'|l@1| |s|a|v|e| |i|t| |f|o|r| |a|n|o|t|h|e|r| |d|a|y|.| @1|F|o|r| |n|o|w|,| |c|o|n|v|e|r|t| +0#0000000&@4 +|#+0#0000e05&| |t|h|e| |t|a|b|s| |t|o| |s|p|a|c|e|s| |j|u|s|t| |t|o| |s|h|u|t| |u|p| |p|a|t|c|h|c|h|e|c|k|.| +0#0000000&@26 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&| @1|=+0#e000e06&|}|Y+0#e000002&|'|,+0#0000000&| |'+0#e000002&|X|x|\+0#e000e06&|t|=+0#e000002&|'|++0#0000000&|r+0#00e0e07&|e|p|r|(+0#0000000&|x|)|+|'+0#e000002&|Y|'|)+0#0000000&| @40 +|(|f+0#e000002&|'|X|{+0#e000e06&|x+0#0000000&| @1|=+0#e000e06&| +0#0000000&@6|}+0#e000e06&|Y+0#e000002&|'|,+0#0000000&| |'+0#e000002&|X|x|\+0#e000e06&|t|=+0#e000002&|\+0#e000e06&|t|'+0#e000002&|++0#0000000&|r+0#00e0e07&|e|p|r|(+0#0000000&|x|)|+|'+0#e000002&|Y|'|)+0#0000000&| @31 +@75 +|#+0#0000e05&@1| |t|e|s|t|_|w|a|l|r|u|s| +0#0000000&@60 +|x| |=| |2+0#e000002&|0| +0#0000000&@68 +|#+0#0000e05&| |T|h|i|s| |i|s|n|'|t| |a|n| |a|s@1|i|g|n|m|e|n|t| |e|x|p|r|e|s@1|i|o|n|,| |i|t|'|s| |'|x|'|,| |w|i|t|h| |a| |f|o|r|m|a|t| +0#0000000&@12 +|#+0#0000e05&| |s|p|e|c| |o|f| |'|=|1|0|'|.| +0#0000000&@58 +|(|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|:+0#e000e06&|=|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @7|2|0|'|)+0#0000000&| @48 +@57|5|9|5|,|1| @8|9@1|%| diff --git a/runtime/syntax/testdir/dumps/python_fstring_34.dump b/runtime/syntax/testdir/dumps/python_fstring_34.dump new file mode 100644 index 0000000000..e61d1aeef3 --- /dev/null +++ b/runtime/syntax/testdir/dumps/python_fstring_34.dump @@ -0,0 +1,20 @@ +|(+0&#ffffff0|f+0#e000002&|'|{+0#e000e06&|x+0#0000000&|:+0#e000e06&|=|1|0|}|'+0#e000002&|,+0#0000000&| |'+0#e000002&| @7|2|0|'|)+0#0000000&| @48 +@75 +|#+0#0000e05&| |T|h|i|s| |i|s| |a|n| |a|s@1|i|g|n|m|e|n|t| |e|x|p|r|e|s@1|i|o|n|,| |w|h|i|c|h| |r|e|q|u|i|r|e|s| |p|a|r|e|n|s|.| +0#0000000&@16 +|(|f+0#e000002&|'|{+0#e000e06&|(+0#0000000&|x|:|=|1+0#e000002&|0|)+0#0000000&|}+0#e000e06&|'+0#e000002&|,+0#0000000&| |'+0#e000002&|1|0|'|)+0#0000000&| @54 +|(|x|,| |1+0#e000002&|0|)+0#0000000&| @67 +> @74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|6|1|3|,|0|-|1| @6|B|o|t| diff --git a/runtime/syntax/testdir/input/python_fstring.py b/runtime/syntax/testdir/input/python_fstring.py new file mode 100644 index 0000000000..15e1c16318 --- /dev/null +++ b/runtime/syntax/testdir/input/python_fstring.py @@ -0,0 +1,613 @@ +# Python f-string tests + +# Python-3.12.2/Lib/test/test_fstring.py (reformatted for syntax testing) + +## test_ast +f'{a * x()}' + +## test_ast_line_numbers_multiple_formattedvalues +f'no formatted values' +f'eggs {a * x()} spam {b + y()}' + +## test_ast_line_numbers_nested +f'{a * f"-{x()}-"}' + +## test_ast_line_numbers_duplicate_expression +f'{a * x()} {a * x()} {a * x()}' + +## test_ast_numbers_fstring_with_formatting +'f"Here is that pesky {xxx:.3f} again"' + +## test_ast_line_numbers_multiline_fstring +f''' + {a + * + x()} +non-important content +''' + +f''' + {blech} +''' + +## test_ast_line_numbers_with_parentheses +x = ( + f" {test(t)}" +) + +x = ( + u'wat', + u"wat", + b'wat', + b"wat", + f'wat', + f"wat", +) + +y = ( + u'''wat''', + u"""wat""", + b'''wat''', + b"""wat""", + f'''wat''', + f"""wat""", +) + +x = ( + 'PERL_MM_OPT', ( + f'wat' + f'some_string={f(x)} ' + f'wat' + ), +) + +## test_ast_fstring_empty_format_spec +f'{expr:}' + + +## test_docstring +def f(): + f'''Not a docstring''' + +def g(): + '''Not a docstring''' \ + f'' + + +## test_ast_compile_time_concat +('foo' f'{3}', 'foo3') + +## test_literal +(f'', '') +(f'a', 'a') +(f' ', ' ') + +## test_double_braces +(f'{{', '{') +(f'a{{', 'a{') +(f'{{b', '{b') +(f'a{{b', 'a{b') +(f'}}', '}') +(f'a}}', 'a}') +(f'}}b', '}b') +(f'a}}b', 'a}b') +(f'{{}}', '{}') +(f'a{{}}', 'a{}') +(f'{{b}}', '{b}') +(f'{{}}c', '{}c') +(f'a{{b}}', 'a{b}') +(f'a{{}}c', 'a{}c') +(f'{{b}}c', '{b}c') +(f'a{{b}}c', 'a{b}c') + +(f'{{{10}', '{10') +(f'}}{10}', '}10') +(f'}}{{{10}', '}{10') +(f'}}a{{{10}', '}a{10') + +(f'{10}{{', '10{') +(f'{10}}}', '10}') +(f'{10}}}{{', '10}{') +(f'{10}}}a{{' '}', '10}a{}') + +# Inside of strings, don't interpret doubled brackets. +(f'{"{{}}"}', '{{}}') + +## test_compile_time_concat +x = 'def' +('abc' f'## {x}ghi', 'abc## defghi') +('abc' f'{x}' 'ghi', 'abcdefghi') +('abc' f'{x}' 'gh' f'i{x:4}', 'abcdefghidef ') +('{x}' f'{x}', '{x}def') +('{x' f'{x}', '{xdef') +('{x}' f'{x}', '{x}def') +('{{x}}' f'{x}', '{{x}}def') +('{{x' f'{x}', '{{xdef') +('x}}' f'{x}', 'x}}def') +(f'{x}' 'x}}', 'defx}}') +(f'{x}' '', 'def') +('' f'{x}' '', 'def') +('' f'{x}', 'def') +(f'{x}' '2', 'def2') +('1' f'{x}' '2', '1def2') +('1' f'{x}', '1def') +(f'{x}' f'-{x}', 'def-def') +('' f'', '') +('' f'' '', '') +('' f'' '' f'', '') +(f'', '') +(f'' '', '') +(f'' '' f'', '') +(f'' '' f'' '', '') + +# This is not really [f'{'] + [f'}'] since we treat the inside +# of braces as a purely new context, so it is actually f'{ and +# then eval(' f') (a valid expression) and then }' which would +# constitute a valid f-string. +(f'{' f'}', ' f') + +## test_comments +# These aren't comments, since they're in strings. +d = {'#': 'hash'} +(f'{"#"}', '#') +(f'{d["#"]}', 'hash') + +(f'''A complex trick: { +2 # two +}''', 'A complex trick: 2') + +(f''' +{ +40 # fourty ++ # plus +2 # two +}''', '\n42') + +(f''' +{ +40 # fourty ++ # plus +2 # two +}''', '\n42') + +(f''' +# this is not a comment +{ # the following operation it's +3 # this is a number +* 2}''', '\n# this is not a comment\n6') + +(f''' +{# f'a {comment}' +86 # constant +# nothing more +}''', '\n86') + +## test_format_specifier_expressions +width = 10 +precision = 4 +value = decimal.Decimal('12.34567') +(f'result: {value:{width}.{precision}}', 'result: 12.35') +(f'result: {value:{width!r}.{precision}}', 'result: 12.35') +(f'result: {value:{width:0}.{precision:1}}', 'result: 12.35') +(f'result: {value:{1}{0:0}.{precision:1}}', 'result: 12.35') +(f'result: {value:{ 1}{ 0:0}.{ precision:1}}', 'result: 12.35') +(f'{10:#{1}0x}', ' 0xa') +(f'{10:{"#"}1{0}{"x"}}', ' 0xa') +(f'{-10:-{"#"}1{0}x}', ' -0xa') +(f'{-10:{"-"}#{1}0{"x"}}', ' -0xa') +(f'{10:#{3 != {4:5} and width}x}', ' 0xa') +(f'result: {value:{width:{0}}.{precision:1}}', 'result: 12.35') + +## test_parens_in_expressions +(f'{3,}', '(3,)') + +## test_backslashes_in_string_part +(f'\t', '\t') +(r'\t', '\\t') +(rf'\t', '\\t') +(f'{2}\t', '2\t') +(f'{2}\t{3}', '2\t3') +(f'\t{3}', '\t3') + +(f'\u0394', '\u0394') +(r'\u0394', '\\u0394') +(rf'\u0394', '\\u0394') +(f'{2}\u0394', '2\u0394') +(f'{2}\u0394{3}', '2\u03943') +(f'\u0394{3}', '\u03943') + +(f'\U00000394', '\u0394') +(r'\U00000394', '\\U00000394') +(rf'\U00000394', '\\U00000394') +(f'{2}\U00000394', '2\u0394') +(f'{2}\U00000394{3}', '2\u03943') +(f'\U00000394{3}', '\u03943') + +(f'\N{GREEK CAPITAL LETTER DELTA}', '\u0394') +(f'{2}\N{GREEK CAPITAL LETTER DELTA}', '2\u0394') +(f'{2}\N{GREEK CAPITAL LETTER DELTA}{3}', '2\u03943') +(f'\N{GREEK CAPITAL LETTER DELTA}{3}', '\u03943') +(f'2\N{GREEK CAPITAL LETTER DELTA}', '2\u0394') +(f'2\N{GREEK CAPITAL LETTER DELTA}3', '2\u03943') +(f'\N{GREEK CAPITAL LETTER DELTA}3', '\u03943') + +(f'\x20', ' ') +(r'\x20', '\\x20') +(rf'\x20', '\\x20') +(f'{2}\x20', '2 ') +(f'{2}\x20{3}', '2 3') +(f'\x20{3}', ' 3') + +(f'2\x20', '2 ') +(f'2\x203', '2 3') +(f'\x203', ' 3') + +AMPERSAND = 'spam' +# Get the right unicode character (&), or pick up local variable +# depending on the number of backslashes. +(f'\N{AMPERSAND}', '&') +(f'\\N{AMPERSAND}', '\\Nspam') +(fr'\N{AMPERSAND}', '\\Nspam') +(f'\\\N{AMPERSAND}', '\\&') + +## test_backslashes_in_expression_part +(f"{( + 1 + + 2 +)}", "3") + +("\N{LEFT CURLY BRACKET}", '{') +(f'{"\N{LEFT CURLY BRACKET}"}', '{') +(rf'{"\N{LEFT CURLY BRACKET}"}', '{') + +## test_no_escapes_for_braces +# Only literal curly braces begin an expression. +# \x7b is '{'. +(f'\x7b1+1}}', '{1+1}') +(f'\x7b1+1', '{1+1') +(f'\u007b1+1', '{1+1') +(f'\N{LEFT CURLY BRACKET}1+1\N{RIGHT CURLY BRACKET}', '{1+1}') + +## test_newlines_in_expressions +(f'{0}', '0') +(rf'''{3+ +4}''', '7') + +## test_lambda +x = 5 +(f'{(lambda y:x*y)("8")!r}', "'88888'") +(f'{(lambda y:x*y)("8")!r:10}', "'88888' ") +(f'{(lambda y:x*y)("8"):10}', "88888 ") + +## test_valid_prefixes +(F'{1}', "1") +(FR'{2}', "2") +(fR'{3}', "3") + +## test_roundtrip_raw_quotes +(fr"\'", "\\'") +(fr'\"', '\\"') +(fr'\"\'', '\\"\\\'') +(fr'\'\"', '\\\'\\"') +(fr'\"\'\"', '\\"\\\'\\"') +(fr'\'\"\'', '\\\'\\"\\\'') +(fr'\"\'\"\'', '\\"\\\'\\"\\\'') + +# test_fstring_backslash_before_double_bracket +deprecated_cases = [ + (r"f'\{{\}}'", '\\{\\}'), + (r"f'\{{'", '\\{'), + (r"f'\{{{1+1}'", '\\{2'), + (r"f'\}}{1+1}'", '\\}2'), + (r"f'{1+1}\}}'", '2\\}') +] +(fr'\{{\}}', '\\{\\}') +(fr'\{{', '\\{') +(fr'\{{{1+1}', '\\{2') +(fr'\}}{1+1}', '\\}2') +(fr'{1+1}\}}', '2\\}') + +## test_fstring_backslash_prefix_raw +(f'\\', '\\') +(f'\\\\', '\\\\') +(fr'\\', r'\\') +(fr'\\\\', r'\\\\') +(rf'\\', r'\\') +(rf'\\\\', r'\\\\') +(Rf'\\', R'\\') +(Rf'\\\\', R'\\\\') +(fR'\\', R'\\') +(fR'\\\\', R'\\\\') +(FR'\\', R'\\') +(FR'\\\\', R'\\\\') + +## test_fstring_format_spec_greedy_matching +(f"{1:}}}", "1}") +(f"{1:>3{5}}}}", " 1}") + +## test_yield +# Not terribly useful, but make sure the yield turns +# a function into a generator +def fn(y): + f'y:{yield y*2}' + f'{yield}' + +## test_yield_send +def fn(x): + yield f'x:{yield (lambda i: x * i)}' + +## test_expressions_with_triple_quoted_strings +(f"{'''x'''}", 'x') +(f"{'''eric's'''}", "eric's") + +# Test concatenation within an expression +(f'{"x" """eric"s""" "y"}', 'xeric"sy') +(f'{"x" """eric"s"""}', 'xeric"s') +(f'{"""eric"s""" "y"}', 'eric"sy') +(f'{"""x""" """eric"s""" "y"}', 'xeric"sy') +(f'{"""x""" """eric"s""" """y"""}', 'xeric"sy') +(f'{r"""x""" """eric"s""" """y"""}', 'xeric"sy') + +## test_multiple_vars +x = 98 +y = 'abc' +(f'{x}{y}', '98abc') + +(f'X{x}{y}', 'X98abc') +(f'{x}X{y}', '98Xabc') +(f'{x}{y}X', '98abcX') + +(f'X{x}Y{y}', 'X98Yabc') +(f'X{x}{y}Y', 'X98abcY') +(f'{x}X{y}Y', '98XabcY') + +(f'X{x}Y{y}Z', 'X98YabcZ') + +## test_closure +def outer(x): + def inner(): + return f'x:{x}' + return inner + +(outer('987')(), 'x:987') +(outer(7)(), 'x:7') + +## test_arguments +y = 2 +def f(x, width): + return f'x={x*y:{width}}' + +(f('foo', 10), 'x=foofoo ') +x = 'bar' +(f(10, 10), 'x= 20') + +## test_locals +value = 123 +(f'v:{value}', 'v:123') + +## test_missing_format_spec +class O: + def __format__(self, spec): + if not spec: + return '*' + return spec + +(f'{O():x}', 'x') +(f'{O()}', '*') +(f'{O():}', '*') + +(f'{3:}', '3') +(f'{3!s:}', '3') + +## test_call +def foo(x): + return 'x=' + str(x) + +(f'{foo(10)}', 'x=10') + +## test_nested_fstrings +y = 5 +(f'{f"{0}"*3}', '000') +(f'{f"{y}"*3}', '555') + +## test_leading_trailing_spaces +(f'{ 3}', '3') +(f'{ 3}', '3') +(f'{3 }', '3') +(f'{3 }', '3') + +(f'expr={ {x: y for x, y in [(1, 2), ]}}', + 'expr={1: 2}') +(f'expr={ {x: y for x, y in [(1, 2), ]} }', + 'expr={1: 2}') + +## test_not_equal +# There's a special test for this because there's a special +# case in the f-string parser to look for != as not ending an +# expression. Normally it would, while looking for !s or !r. + +(f'{3!=4}', 'True') +(f'{3!=4:}', 'True') +(f'{3!=4!s}', 'True') +(f'{3!=4!s:.3}', 'Tru') + +## test_equal_equal +# Because an expression ending in = has special meaning, +# there's a special test for ==. Make sure it works. + +(f'{0==1}', 'False') + +## test_conversions +(f'{3.14:10.10}', ' 3.14') +(f'{3.14!s:10.10}', '3.14 ') +(f'{3.14!r:10.10}', '3.14 ') +(f'{3.14!a:10.10}', '3.14 ') + +(f'{"a"}', 'a') +(f'{"a"!r}', "'a'") +(f'{"a"!a}', "'a'") + +# Conversions can have trailing whitespace after them since it +# does not provide any significance +(f"{3!s }", "3") +(f'{3.14!s :10.10}', '3.14 ') + +# Not a conversion. +(f'{"a!r"}', "a!r") + +# Not a conversion, but show that ! is allowed in a format spec. +(f'{3.14:!<10.10}', '3.14!!!!!!') + +# But these are just normal strings. +(f'{"{"}', '{') +(f'{"}"}', '}') +(f'{3:{"}"}>10}', '}}}}}}}}}3') +(f'{2:{"{"}>10}', '{{{{{{{{{2') + +## test_empty_format_specifier +x = 'test' +(f'{x}', 'test') +(f'{x:}', 'test') +(f'{x!s:}', 'test') +(f'{x!r:}', "'test'") + +## test_str_format_differences +d = {'a': 'string', + 0: 'integer', + } +a = 0 +(f'{d[0]}', 'integer') +(f'{d["a"]}', 'string') +(f'{d[a]}', 'integer') +('{d[a]}'.format(d=d), 'string') +('{d[0]}'.format(d=d), 'integer') + +## test_dict +d = {'"': 'dquote', + "'": 'squote', + 'foo': 'bar', + } +(f'''{d["'"]}''', 'squote') +(f"""{d['"']}""", 'dquote') + +(f'{d["foo"]}', 'bar') +(f"{d['foo']}", 'bar') + +## test_debug_conversion +x = 'A string' +(f'{x=}', 'x=' + repr(x)) +(f'{x =}', 'x =' + repr(x)) +(f'{x=!s}', 'x=' + str(x)) +(f'{x=!r}', 'x=' + repr(x)) +(f'{x=!a}', 'x=' + ascii(x)) + +x = 2.71828 +(f'{x=:.2f}', 'x=' + format(x, '.2f')) +(f'{x=:}', 'x=' + format(x, '')) +(f'{x=!r:^20}', 'x=' + format(repr(x), '^20')) +(f'{x=!s:^20}', 'x=' + format(str(x), '^20')) +(f'{x=!a:^20}', 'x=' + format(ascii(x), '^20')) + +x = 9 +(f'{3*x+15=}', '3*x+15=42') + +# There is code in ast.c that deals with non-ascii expression values. So, +# use a unicode identifier to trigger that. +tenπ = 31.4 +(f'{tenπ=:.2f}', 'tenπ=31.40') + +# Also test with Unicode in non-identifiers. +(f'{"Σ"=}', '"Σ"=\'Σ\'') + +# Make sure nested fstrings still work. +(f'{f"{3.1415=:.1f}":*^20}', '*****3.1415=3.1*****') + +# Make sure text before and after an expression with = works +# correctly. +pi = 'π' +(f'alpha α {pi=} ω omega', "alpha α pi='π' ω omega") + +# Check multi-line expressions. +(f'''{ +3 +=}''', '\n3\n=3') + +# Since = is handled specially, make sure all existing uses of +# it still work. + +(f'{0==1}', 'False') +(f'{0!=1}', 'True') +(f'{0<=1}', 'True') +(f'{0>=1}', 'False') +(f'{(x:="5")}', '5') +(x, '5') +(f'{(x:=5)}', '5') +(x, 5) +(f'{"="}', '=') + +x = 20 +# This isn't an assignment expression, it's 'x', with a format +# spec of '=10'. See test_walrus: you need to use parens. +(f'{x:=10}', ' 20') + +# Test named function parameters, to make sure '=' parsing works +# there. +def f(a): + nonlocal x + oldx = x + x = a + return oldx +x = 0 +(f'{f(a="3=")}', '0') +(x, '3=') +(f'{f(a=4)}', '3=') +(x, 4) + +# Make sure __format__ is being called. +class C: + def __format__(self, s): + return f'FORMAT-{s}' + def __repr__(self): + return 'REPR' + +(f'{C()=}', 'C()=REPR') +(f'{C()=!r}', 'C()=REPR') +(f'{C()=:}', 'C()=FORMAT-') +(f'{C()=: }', 'C()=FORMAT- ') +(f'{C()=:x}', 'C()=FORMAT-x') +(f'{C()=!r:*^20}', 'C()=********REPR********') + + self.assertRaises(SyntaxError, eval, "f'{C=]'") + +# Make sure leading and following text works. +x = 'foo' +(f'X{x=}Y', 'Xx='+repr(x)+'Y') + +# Make sure whitespace around the = works. +(f'X{x =}Y', 'Xx ='+repr(x)+'Y') +(f'X{x= }Y', 'Xx= '+repr(x)+'Y') +(f'X{x = }Y', 'Xx = '+repr(x)+'Y') +(f"sadsd {1 + 1 = :{1 + 1:1d}f}", "sadsd 1 + 1 = 2.000000") + +(f"{1+2 = # my comment + }", '1+2 = \n 3') + +# These next lines contains tabs. Backslash escapes don't +# work in f-strings. +# patchcheck doesn't like these tabs. So the only way to test +# this will be to dynamically created and exec the f-strings. But +# that's such a hassle I'll save it for another day. For now, convert +# the tabs to spaces just to shut up patchcheck. +(f'X{x =}Y', 'Xx\t='+repr(x)+'Y') +(f'X{x = }Y', 'Xx\t=\t'+repr(x)+'Y') + +## test_walrus +x = 20 +# This isn't an assignment expression, it's 'x', with a format +# spec of '=10'. +(f'{x:=10}', ' 20') + +# This is an assignment expression, which requires parens. +(f'{(x:=10)}', '10') +(x, 10) +