From 55705916529f16880ed808508f16ec6078436d39 Mon Sep 17 00:00:00 2001 From: Jemma Issroff Date: Tue, 12 Dec 2023 15:56:03 -0500 Subject: [PATCH] [PRISM] If receiver on CallNode is SelfNode, use FCALL flags --- prism_compile.c | 2 +- test/ruby/test_compile_prism.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/prism_compile.c b/prism_compile.c index 95544ccda16c54..745dbd2a4d08b6 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -1831,7 +1831,7 @@ pm_compile_call(rb_iseq_t *iseq, const pm_call_node_t *call_node, LINK_ANCHOR *c } } - if (call_node->receiver == NULL) { + if (call_node->receiver == NULL || PM_NODE_TYPE_P(call_node->receiver, PM_SELF_NODE)) { flags |= VM_CALL_FCALL; } diff --git a/test/ruby/test_compile_prism.rb b/test/ruby/test_compile_prism.rb index 0409fc3e468ef1..4aa414a5acc6fa 100644 --- a/test/ruby/test_compile_prism.rb +++ b/test/ruby/test_compile_prism.rb @@ -1419,6 +1419,18 @@ def self.prism_opt_var_trail_hash(a = nil, *b, c, **d); end prism_opt_var_trail_hash("a", "b", "c", c: 1) prism_opt_var_trail_hash("a", "b", "c", "c" => 0, c: 1) CODE + + assert_prism_eval(<<-CODE) + class PrivateMethod + def initialize + self.instance_var + end + private + attr_accessor :instance_var + end + pm = PrivateMethod.new + pm.send(:instance_var) + CODE end def test_CallAndWriteNode