Skip to content

Commit 0de1440

Browse files
committed
[Truffle] Fix multiple assignment involving global assignments.
1 parent 8bdf5bc commit 0de1440

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

truffle/src/main/java/org/jruby/truffle/translator/BodyTranslator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,6 +1322,10 @@ private void initGlobalVariableAliases() {
13221322

13231323
@Override
13241324
public RubyNode visitGlobalAsgnNode(org.jruby.ast.GlobalAsgnNode node) {
1325+
return translateGlobalAsgnNode(node, node.getValueNode().accept(this));
1326+
}
1327+
1328+
public RubyNode translateGlobalAsgnNode(org.jruby.ast.GlobalAsgnNode node, RubyNode rhs) {
13251329
final SourceSection sourceSection = translate(node.getPosition());
13261330

13271331
String name = node.getName();
@@ -1330,8 +1334,6 @@ public RubyNode visitGlobalAsgnNode(org.jruby.ast.GlobalAsgnNode node) {
13301334
name = globalVariableAliases.get(name);
13311335
}
13321336

1333-
RubyNode rhs = node.getValueNode().accept(this);
1334-
13351337
if (name.equals("$~")) {
13361338
rhs = new CheckMatchVariableTypeNode(context, sourceSection, rhs);
13371339
} else if (name.equals("$0")) {
@@ -2082,6 +2084,8 @@ private RubyNode translateDummyAssignment(org.jruby.ast.Node dummyAssignment, Ru
20822084
} else {
20832085
translated = ((ReadNode) ((WriteLocalVariableNode) dummyTranslated.getNonProxyNode()).makeReadNode()).makeWriteNode(rhs);
20842086
}
2087+
} else if (dummyAssignment instanceof org.jruby.ast.GlobalAsgnNode) {
2088+
return translateGlobalAsgnNode((org.jruby.ast.GlobalAsgnNode) dummyAssignment, rhs);
20852089
} else {
20862090
translated = ((ReadNode) environment.findLocalVarNode(environment.allocateLocalTemp("dummy"), sourceSection)).makeWriteNode(rhs);
20872091
}

0 commit comments

Comments
 (0)