
Issue #20938 has been updated by tenderlovemaking (Aaron Patterson). nobu (Nobuyoshi Nakada) wrote in #note-3:
Prism seems to cut the string content out, then convert EOLs.
The conversion of EOL is lower layer than parsing, so the result of "program1" should be "1_" without "\n".
Sorry, I don't understand. Can you explain more? Why does EOL conversion impact `program1` but not `program2`? ---------------------------------------- Bug #20938: Percent String literal delimiter impacts string contents with parse.y https://bugs.ruby-lang.org/issues/20938#change-110924 * Author: eightbitraptor (Matt V-H) * Status: Assigned * Assignee: prism * ruby -v: ruby 3.4.0dev (2024-11-28T09:19:02Z master 31a3e87777) +PRISM +GC [arm64-darwin24] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- The following code defines 2 programs that declare string literals using `%` and a single byte delimiter. I'd expect these programs to have the same output no matter which delimiter is used. With Prism, both programs output the same value (the string content: `1_\n`), but using parse.y the output values differ depending on the delimiter. Are the outputs supposed to be the same or different? ``` program1 = "%\n1_\r\n\n" # => parse.y: 1_, prism: "1_\n" program2 = "%'1_\r\n'" # => "1_\n" p eval(program1) p eval(program2) ``` [[Github Issue]](https://github.com/ruby/prism/pull/3290) -- https://bugs.ruby-lang.org/