Skip to content

Commit 3d15c85

Browse files
committed
Adopt changes in Nodes.NumberedReferenceReadNode
1 parent 3dc4bb5 commit 3d15c85

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

spec/ruby/language/regexp/back-references_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@
2222
$10.should == "0"
2323
end
2424

25+
it "returns nil for numbered variable with too large index" do
26+
-> {
27+
eval(<<~CODE).should == nil
28+
"a" =~ /(.)/
29+
eval('$4294967296')
30+
CODE
31+
}.should complain(/warning: ('|`)\$4294967296' is too big for a number variable, always nil/)
32+
end
33+
2534
it "will not clobber capture variables across threads" do
2635
cap1, cap2, cap3 = nil
2736
"foo" =~ /(o+)/

src/main/java/org/truffleruby/parser/YARPTranslator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2811,6 +2811,12 @@ public RubyNode visitNumberedParametersNode(Nodes.NumberedParametersNode node) {
28112811

28122812
@Override
28132813
public RubyNode visitNumberedReferenceReadNode(Nodes.NumberedReferenceReadNode node) {
2814+
// numbered references that are too large, e.g. $4294967296, are always `nil`
2815+
if (node.number == 0) {
2816+
final RubyNode rubyNode = new NilLiteralNode();
2817+
return assignPositionAndFlags(node, rubyNode);
2818+
}
2819+
28142820
final RubyNode lastMatchNode = ReadGlobalVariableNodeGen.create("$~");
28152821
final RubyNode rubyNode = new ReadMatchReferenceNodes.ReadNthMatchNode(lastMatchNode, node.number);
28162822

0 commit comments

Comments
 (0)