8000 [PRISM] Fix defined? for chained calls · ruby/ruby@0520e96 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0520e96

Browse files
committed
[PRISM] Fix defined? for chained calls
Fixes ruby/prism#2148.
1 parent d6b6e14 commit 0520e96

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

prism_compile.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2607,8 +2607,10 @@ pm_compile_defined_expr0(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *co
26072607
pm_compile_defined_expr0(iseq, call_node->receiver, ret, src, popped, scope_node, dummy_line_node, lineno, true, lfinish, true);
26082608
if (PM_NODE_TYPE_P(call_node->receiver, PM_CALL_NODE)) {
26092609
ADD_INSNL(ret, &dummy_line_node, branchunless, lfinish[2]);
2610-
ID method_id = pm_constant_id_lookup(scope_node, call_node->name);
2611-
pm_compile_call(iseq, (const pm_call_node_t *)call_node->receiver, ret, src, popped, scope_node, method_id, NULL);
2610+
2611+
const pm_call_node_t *receiver = (const pm_call_node_t *)call_node->receiver;
2612+
ID method_id = pm_constant_id_lookup(scope_node, receiver->name);
2613+
pm_compile_call(iseq, receiver, ret, src, popped, scope_node, method_id, NULL);
26122614
}
26132615
else {
26142616
ADD_INSNL(ret, &dummy_line_node, branchunless, lfinish[1]);

test/ruby/test_compile_prism.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,15 @@ def test_DefinedNode
209209

210210
assert_prism_eval("defined?(a(itself))")
211211
assert_prism_eval("defined?(itself(itself))")
212+
213+
# Method chain on a constant
214+
assert_prism_eval(<<~RUBY)
215+
class PrismDefinedNode
216+
def m1; end
217+
end
218+
219+
defined?(PrismDefinedNode.new.m1)
220+
RUBY
212221
end
213222

214223
def test_GlobalVariableReadNode

0 commit comments

Comments
 (0)
0