summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-03-05 20:11:52 -0500
committergit <svn-admin@ruby-lang.org>2024-03-06 16:42:47 +0000
commite97b364adb0e4447c1c361c438dacc25ca757c95 (patch)
treec46811426d567981a30cee1529c9336399b57b81 /lib
parent78fe61c95fecf8e7964337a067908976d9d4bfca (diff)
[ruby/prism] Unary not for ripper translation
https://github.com/ruby/prism/commit/149d01f2c9
Diffstat (limited to 'lib')
-rw-r--r--lib/prism/translation/ripper.rb27
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb
index ada44b81d6..ea1a1882e4 100644
--- a/lib/prism/translation/ripper.rb
+++ b/lib/prism/translation/ripper.rb
@@ -508,11 +508,34 @@ module Prism
value = visit(last_argument)
bounds(last_argument.location)
on_assign(call, value)
- when :-@, :+@, :~@, :!@
+ when :-@, :+@, :~@
receiver = visit(node.receiver)
bounds(node.location)
- on_unary(node.message == "not" ? :not : node.name, receiver)
+ on_unary(node.name, receiver)
+ when :!@
+ if node.message == "not"
+ receiver =
+ case node.receiver
+ when nil
+ nil
+ when ParenthesesNode
+ body = visit(node.receiver.body&.body&.first) || false
+
+ bounds(node.receiver.location)
+ on_paren(body)
+ else
+ visit(node.receiver)
+ end
+
+ bounds(node.location)
+ on_unary(:not, receiver)
+ else
+ receiver = visit(node.receiver)
+
+ bounds(node.location)
+ on_unary(:!@, receiver)
+ end
when :!=, :!~, :=~, :==, :===, :<=>, :>, :>=, :<, :<=, :&, :|, :^, :>>, :<<, :-, :+, :%, :/, :*, :**
receiver = visit(node.receiver)
value = visit(node.arguments.arguments.first)