Skip to content

Commit f4137ce

Browse files
committed
Bugfix: check for self on desugared tree
the `sendNode->receiver` has already been moved out by this point, so it's always `nullptr`.
1 parent a9789cf commit f4137ce

File tree

3 files changed

+11
-47
lines changed

3 files changed

+11
-47
lines changed

ast/desugar/Desugar.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ bool isCallToBlockGivenP(parser::Send *sendNode, ast::ExpressionPtr &receiverExp
707707
return false;
708708
}
709709

710-
if (sendNode->receiver == nullptr || parser::isa_node<parser::Self>(sendNode->receiver.get())) {
710+
if (receiverExpr == nullptr || isa_tree<Self>(receiverExpr)) {
711711
return true;
712712
}
713713

ast/desugar/PrismDesugar.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,7 @@ bool isCallToBlockGivenP(parser::Send *sendNode, ast::ExpressionPtr &receiverExp
687687
return false;
688688
}
689689

690-
if (sendNode->receiver == nullptr || parser::isa_node<parser::Self>(sendNode->receiver.get())) {
690+
if (receiverExpr == nullptr || isa_tree<Self>(receiverExpr)) {
691691
return true;
692692
}
693693

test/testdata/desugar/block_given.rb.desugar-tree.exp

Lines changed: 9 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,10 @@ class <emptyTree><<C <root>>> < (::<todo sym>)
2020
else
2121
false
2222
end
23-
if the_block_name
24-
::<root>::<C Kernel>.block_given?()
25-
else
26-
false
27-
end
23+
::<root>::<C Kernel>.block_given?()
2824
<emptyTree>
29-
if the_block_name
30-
<emptyTree>::<C Object>.block_given?()
31-
else
32-
false
33-
end
34-
if the_block_name
35-
<emptyTree>::<C SomethingElse>.block_given?()
36-
else
37-
false
38-
end
25+
<emptyTree>::<C Object>.block_given?()
26+
<emptyTree>::<C SomethingElse>.block_given?()
3927
<self>.block_given?("with parameter")
4028
end
4129
end
@@ -57,22 +45,10 @@ class <emptyTree><<C <root>>> < (::<todo sym>)
5745
else
5846
false
5947
end
60-
if &$2
61-
::<root>::<C Kernel>.block_given?()
62-
else
63-
false
64-
end
48+
::<root>::<C Kernel>.block_given?()
6549
<emptyTree>
66-
if &$2
67-
<emptyTree>::<C Object>.block_given?()
68-
else
69-
false
70-
end
71-
if &$2
72-
<emptyTree>::<C SomethingElse>.block_given?()
73-
else
74-
false
75-
end
50+
<emptyTree>::<C Object>.block_given?()
51+
<emptyTree>::<C SomethingElse>.block_given?()
7652
<self>.block_given?("with parameter")
7753
end
7854
end
@@ -94,22 +70,10 @@ class <emptyTree><<C <root>>> < (::<todo sym>)
9470
else
9571
false
9672
end
97-
if <blk>
98-
::<root>::<C Kernel>.block_given?()
99-
else
100-
false
101-
end
73+
::<root>::<C Kernel>.block_given?()
10274
<emptyTree>
103-
if <blk>
104-
<emptyTree>::<C Object>.block_given?()
105-
else
106-
false
107-
end
108-
if <blk>
109-
<emptyTree>::<C SomethingElse>.block_given?()
110-
else
111-
false
112-
end
75+
<emptyTree>::<C Object>.block_given?()
76+
<emptyTree>::<C SomethingElse>.block_given?()
11377
<self>.block_given?("with parameter")
11478
end
11579
end

0 commit comments

Comments
 (0)