Skip to content

Commit cfc3865

Browse files
committed
The write node needs to be translated first for foo ||= expr
* So foo is added to the local variables map and found by the read node.
1 parent 409d2cf commit cfc3865

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -944,9 +944,9 @@ public RubyNode visitClassVariableOperatorWriteNode(Nodes.ClassVariableOperatorW
944944
public RubyNode visitClassVariableOrWriteNode(Nodes.ClassVariableOrWriteNode node) {
945945
int startOffset = node.startOffset;
946946
int length = node.length;
947+
var writeNode = new Nodes.ClassVariableWriteNode(node.name, node.value, startOffset, length).accept(this);
947948
var readNode = new Nodes.ClassVariableReadNode(node.name, startOffset, length).accept(this);
948949
var definedCheck = AndNodeGen.create(new DefinedNode(readNode), readNode);
949-
var writeNode = new Nodes.ClassVariableWriteNode(node.name, node.value, startOffset, length).accept(this);
950950
final RubyNode rubyNode = OrLazyValueDefinedNodeGen.create(definedCheck, writeNode);
951951
return assignPositionAndFlags(node, rubyNode);
952952
}
@@ -1327,9 +1327,9 @@ public RubyNode visitGlobalVariableOperatorWriteNode(Nodes.GlobalVariableOperato
13271327
public RubyNode visitGlobalVariableOrWriteNode(Nodes.GlobalVariableOrWriteNode node) {
13281328
int startOffset = node.startOffset;
13291329
int length = node.length;
1330+
var writeNode = new Nodes.GlobalVariableWriteNode(node.name, node.value, startOffset, length).accept(this);
13301331
var readNode = new Nodes.GlobalVariableReadNode(node.name, startOffset, length).accept(this);
13311332
var definedCheck = AndNodeGen.create(new DefinedNode(readNode), readNode);
1332-
var writeNode = new Nodes.GlobalVariableWriteNode(node.name, node.value, startOffset, length).accept(this);
13331333
final RubyNode rubyNode = OrLazyValueDefinedNodeGen.create(definedCheck, writeNode);
13341334
return assignPositionAndFlags(node, rubyNode);
13351335
}
@@ -1494,8 +1494,8 @@ public RubyNode visitInstanceVariableOrWriteNode(Nodes.InstanceVariableOrWriteNo
14941494
// No need to check `defined?(@ivar)` before reading, as `@ivar` even if not set returns nil and does not have side effects
14951495
int startOffset = node.startOffset;
14961496
int length = node.length;
1497-
var readNode = new Nodes.InstanceVariableReadNode(node.name, startOffset, length).accept(this);
14981497
var writeNode = new Nodes.InstanceVariableWriteNode(node.name, node.value, startOffset, length).accept(this);
1498+
var readNode = new Nodes.InstanceVariableReadNode(node.name, startOffset, length).accept(this);
14991499
final RubyNode rubyNode = OrLazyValueDefinedNodeGen.create(readNode, writeNode);
15001500
return assignPositionAndFlags(node, rubyNode);
15011501
}
@@ -1640,9 +1640,9 @@ public RubyNode visitLocalVariableOrWriteNode(Nodes.LocalVariableOrWriteNode nod
16401640
// No need to check `defined?(var)` before reading, as `var` even if not set returns nil and does not have side effects
16411641
int startOffset = node.startOffset;
16421642
int length = node.length;
1643-
var readNode = new Nodes.LocalVariableReadNode(node.name, node.depth, startOffset, length).accept(this);
16441643
var writeNode = new Nodes.LocalVariableWriteNode(node.name, node.depth, node.value, startOffset, length)
16451644
.accept(this);
1645+
var readNode = new Nodes.LocalVariableReadNode(node.name, node.depth, startOffset, length).accept(this);
16461646
final RubyNode rubyNode = OrLazyValueDefinedNodeGen.create(readNode, writeNode);
16471647
return assignPositionAndFlags(node, rubyNode);
16481648
}

0 commit comments

Comments
 (0)