diff options
author | Kevin Newton <kddnewton@gmail.com> | 2024-03-05 09:43:43 -0500 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2024-03-06 16:42:45 +0000 |
commit | b0ee9c8f28249b3de644383901bb637b8eb7275b (patch) | |
tree | 22079a1bd7bb639c41e170dac7bc94e123b6f1b1 /lib/prism/translation/ripper.rb | |
parent | 7bcca7177d6c42891004899d63e13ef47d78a337 (diff) |
[ruby/prism] Implement index nodes for ripper translation
https://github.com/ruby/prism/commit/3fd962f2d3
Diffstat (limited to 'lib/prism/translation/ripper.rb')
-rw-r--r-- | lib/prism/translation/ripper.rb | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 89f793cb70..d92ff83ed3 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -1208,25 +1208,59 @@ module Prism # foo[bar] += baz # ^^^^^^^^^^^^^^^ def visit_index_operator_write_node(node) - raise NoMethodError, __method__ + receiver = visit(node.receiver) + arguments = visit(node.arguments) + + bounds(node.location) + target = on_aref_field(receiver, arguments) + + bounds(node.operator_loc) + operator = on_op("#{node.operator}=") + + value = visit(node.value) + on_opassign(target, operator, value) end # foo[bar] &&= baz # ^^^^^^^^^^^^^^^^ def visit_index_and_write_node(node) - raise NoMethodError, __method__ + receiver = visit(node.receiver) + arguments = visit(node.arguments) + + bounds(node.location) + target = on_aref_field(receiver, arguments) + + bounds(node.operator_loc) + operator = on_op("&&=") + + value = visit(node.value) + on_opassign(target, operator, value) end # foo[bar] ||= baz # ^^^^^^^^^^^^^^^^ def visit_index_or_write_node(node) - raise NoMethodError, __method__ + receiver = visit(node.receiver) + arguments = visit(node.arguments) + + bounds(node.location) + target = on_aref_field(receiver, arguments) + + bounds(node.operator_loc) + operator = on_op("||=") + + value = visit(node.value) + on_opassign(target, operator, value) end # foo[bar], = 1 # ^^^^^^^^ def visit_index_target_node(node) - raise NoMethodError, __method__ + receiver = visit(node.receiver) + arguments = visit(node.arguments) + + bounds(node.location) + on_aref_field(receiver, arguments) end # @foo |