Skip to content

Commit

Permalink
Merge pull request #3423 from Earlopain/parser-translator-hash-value-…
Browse files Browse the repository at this point in the history
…omission

Fix parser translator scope issues for implicit hash values
  • Loading branch information
kddnewton authored Jan 20, 2025
2 parents 4afe194 + bbeb5b0 commit 9b4ebf4
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions lib/prism/translation/parser/compiler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -150,14 +150,17 @@ def visit_assoc_node(node)
builder.pair_quoted(token(key.opening_loc), [builder.string_internal([key.unescaped, srange(key.value_loc)])], token(key.closing_loc), visit(node.value))
end
elsif node.value.is_a?(ImplicitNode)
if (value = node.value.value).is_a?(LocalVariableReadNode)
builder.pair_keyword(
[key.unescaped, srange(key)],
builder.ident([value.name, srange(key.value_loc)]).updated(:lvar)
)
value = node.value.value

implicit_value = if value.is_a?(CallNode)
builder.call_method(nil, nil, [value.name, srange(value.message_loc)])
elsif value.is_a?(ConstantReadNode)
builder.const([value.name, srange(key.value_loc)])
else
builder.pair_label([key.unescaped, srange(key.location)])
builder.ident([value.name, srange(key.value_loc)]).updated(:lvar)
end

builder.pair_keyword([key.unescaped, srange(key)], implicit_value)
elsif node.operator_loc
builder.pair(visit(key), token(node.operator_loc), visit(node.value))
elsif key.is_a?(SymbolNode) && key.opening_loc.nil?
Expand Down

0 comments on commit 9b4ebf4

Please sign in to comment.