Skip to content

Commit

Permalink
Showing 1 changed file with 19 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1832,7 +1832,7 @@ private RubyNode translateBlockLikeNode(org.jruby.ast.IterNode node, boolean isL
// Unset this flag for any for any blocks within the for statement's body
final boolean hasOwnScope = isLambda || !translatingForStatement;

final String name = isLambda ? "(lambda)" : currentCallMethodName;
final String name = isLambda ? "(lambda)" : getIdentifierInNewEnvironment(true, currentCallMethodName);
final boolean isProc = !isLambda;

final SharedMethodInfo sharedMethodInfo = new SharedMethodInfo(sourceSection, environment.getLexicalScope(), MethodTranslator.getArity(argsNode), name, true, Helpers.argsNodeToArgumentDescriptors(argsNode), false, false, false);
@@ -3054,6 +3054,24 @@ protected String getIdentifier() {
}
}

protected String getIdentifierInNewEnvironment(boolean isBlock, String namedMethodName) {
if (isBlock) {
TranslatorEnvironment methodParent = environment;

while (methodParent.isBlock()) {
methodParent = methodParent.getParent();
}

if (environment.getBlockDepth() + 1 > 1) {
return StringUtils.format("block (%d levels) in %s", environment.getBlockDepth() + 1, methodParent.getNamedMethodName());
} else {
return StringUtils.format("block in %s", methodParent.getNamedMethodName());
}
} else {
return namedMethodName;
}
}

@Override
public RubyNode visitOther(org.jruby.ast.Node node) {
if (node instanceof ReadLocalDummyNode) {

0 comments on commit e98c935

Please sign in to comment.