Skip to content

Commit 1fb8f10

Browse files
committed
Always read implicit block argument for super from method argument.
1 parent 683e1b6 commit 1fb8f10

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.truffleruby.language.SourceIndexLength;
2828
import org.truffleruby.language.arguments.MissingArgumentBehavior;
2929
import org.truffleruby.language.arguments.ProfileArgumentNodeGen;
30-
import org.truffleruby.language.arguments.ReadBlockNode;
3130
import org.truffleruby.language.arguments.ReadPreArgumentNode;
3231
import org.truffleruby.language.arguments.ShouldDestructureNode;
3332
import org.truffleruby.language.control.AndNode;
@@ -319,7 +318,7 @@ public RubyNode visitSuperNode(SuperParseNode node) {
319318
final ArgumentsAndBlockTranslation argumentsAndBlock = translateArgumentsAndBlock(sourceSection, node.getIterNode(), node.getArgsNode(), environment.getNamedMethodName());
320319

321320
final RubyNode arguments = new ReadSuperArgumentsNode(argumentsAndBlock.getArguments(), argumentsAndBlock.isSplatted());
322-
final RubyNode block = executeOrInheritBlock(argumentsAndBlock.getBlock());
321+
final RubyNode block = executeOrInheritBlock(argumentsAndBlock.getBlock(), node);
323322

324323
RubyNode callNode = new SuperCallNode(arguments, block);
325324
callNode = wrapCallWithLiteralBlock(argumentsAndBlock, callNode);
@@ -354,19 +353,19 @@ public RubyNode visitZSuperNode(ZSuperParseNode node) {
354353
final RubyNode arguments = new ReadZSuperArgumentsNode(
355354
reloadTranslator.getRestParameterIndex(),
356355
reloadSequence.getSequence());
357-
final RubyNode block = executeOrInheritBlock(argumentsAndBlock.getBlock());
356+
final RubyNode block = executeOrInheritBlock(argumentsAndBlock.getBlock(), node);
358357

359358
RubyNode callNode = new SuperCallNode(arguments, block);
360359
callNode = wrapCallWithLiteralBlock(argumentsAndBlock, callNode);
361360

362361
return withSourceSection(sourceSection, callNode);
363362
}
364363

365-
private RubyNode executeOrInheritBlock(RubyNode blockNode) {
364+
private RubyNode executeOrInheritBlock(RubyNode blockNode, ParseNode callNode) {
366365
if (blockNode != null) {
367366
return blockNode;
368367
} else {
369-
return new ReadBlockNode(context.getCoreLibrary().getNil());
368+
return environment.findLocalVarOrNilNode(TranslatorEnvironment.METHOD_BLOCK_NAME, callNode.getPosition());
370369
}
371370
}
372371

0 commit comments

Comments
 (0)