diff options
author | Kevin Newton <[email protected]> | 2024-12-20 16:52:10 -0500 |
---|---|---|
committer | git <[email protected]> | 2025-01-12 18:41:42 +0000 |
commit | 14b9098459b88f94e316ccc9274693e74565739e (patch) | |
tree | 3f0d66e89ab1e4599cc549159eee3db88fd5e0d7 /lib | |
parent | 48749afe61fedcfd59cbd2fcc134c55f5ccef7f8 (diff) |
[ruby/prism] Frozen strings in the AST
https://github.com/ruby/prism/commit/8d9d429155
Diffstat (limited to 'lib')
-rw-r--r-- | lib/prism/translation/parser/compiler.rb | 2 | ||||
-rw-r--r-- | lib/prism/translation/ruby_parser.rb | 7 |
2 files changed, 5 insertions, 4 deletions
diff --git a/lib/prism/translation/parser/compiler.rb b/lib/prism/translation/parser/compiler.rb index e6ffa39d9d..26c5c174f4 100644 --- a/lib/prism/translation/parser/compiler.rb +++ b/lib/prism/translation/parser/compiler.rb @@ -2049,7 +2049,7 @@ module Prism location = appendee.loc location = location.with_expression(location.expression.join(child.loc.expression)) - children[-1] = appendee.updated(:str, [appendee.children.first << child.children.first], location: location) + children[-1] = appendee.updated(:str, ["#{appendee.children.first}#{child.children.first}"], location: location) else children << child end diff --git a/lib/prism/translation/ruby_parser.rb b/lib/prism/translation/ruby_parser.rb index 465b693470..7fb533048c 100644 --- a/lib/prism/translation/ruby_parser.rb +++ b/lib/prism/translation/ruby_parser.rb @@ -929,9 +929,9 @@ module Prism if result == :space # continue elsif result.is_a?(String) - results[0] << result + results[0] = "#{results[0]}#{result}" elsif result.is_a?(Array) && result[0] == :str - results[0] << result[1] + results[0] = "#{results[0]}#{result[1]}" else results << result state = :interpolated_content @@ -940,7 +940,7 @@ module Prism if result == :space # continue elsif visited[index - 1] != :space && result.is_a?(Array) && result[0] == :str && results[-1][0] == :str && (results[-1].line_max == result.line) - results[-1][1] << result[1] + results[-1][1] = "#{results[-1][1]}#{result[1]}" results[-1].line_max = result.line_max else results << result @@ -1440,6 +1440,7 @@ module Prism unescaped = node.unescaped if node.forced_binary_encoding? + unescaped = unescaped.dup unescaped.force_encoding(Encoding::BINARY) end |