Skip to content

Commit c425e91

Browse files
committed
Fixes for 'it' nodes found in ruby/spec language run
1 parent 34e7641 commit c425e91

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

src/main/java/org/jruby/prism/builder/IRBuilderPrism.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,8 @@ protected Operand build(Variable result, Node node) {
280280
return buildInterpolatedSymbol(result, (InterpolatedSymbolNode) node);
281281
} else if (node instanceof InterpolatedXStringNode) {
282282
return buildInterpolatedXString(result, (InterpolatedXStringNode) node);
283+
} else if (node instanceof ItLocalVariableReadNode) {
284+
return buildItRead();
283285
} else if (node instanceof KeywordHashNode) {
284286
return buildKeywordHash((KeywordHashNode) node, new int[1]); // FIXME: we don't care about flags but this is odd (seems to only be for array syntax with kwrest?).
285287
// KeywordParameterNode, KeywordRestParameterNode processed by call
@@ -642,6 +644,10 @@ public void receiveBlockArgs(Node node) {
642644
addInstr(new ReceivePreReqdArgInstr(argumentResult(name), keywords, i));
643645
}
644646
addInstr(new CheckArityInstr(params.maximum, 0, false, params.maximum, keywords));
647+
} else if (node instanceof ItParametersNode) {
648+
Variable keywords = addResultInstr(new ReceiveKeywordsInstr(temp(), true, true));
649+
Variable v = getLocalVariable(symbol("it"), 0);
650+
addInstr(new ReceivePreReqdArgInstr(v, keywords, 0));
645651
} else {
646652
// FIXME: Missing locals? Not sure how we handle those but I would have thought with a scope?
647653
buildParameters(((BlockParametersNode) node).parameters);
@@ -1467,6 +1473,10 @@ private Operand buildInterpolatedRegularExpression(Variable result, Interpolated
14671473
return buildDRegex(result, node.parts, calculateRegexpOptions(node.flags));
14681474
}
14691475

1476+
private Operand buildItRead() {
1477+
return getLocalVariable(symbol("it"), 0);
1478+
}
1479+
14701480
protected Operand buildDRegex(Variable result, Node[] children, RegexpOptions options) {
14711481
Node[] pieces;
14721482
if (children.length == 1) { // Case of interpolation only being an embedded element
@@ -2717,6 +2727,8 @@ private Signature calculateSignature(Node parameters) {
27172727
return calculateSignature(((BlockParametersNode) parameters).parameters);
27182728
} else if (parameters instanceof NumberedParametersNode) {
27192729
return Signature.from(((NumberedParametersNode) parameters).maximum, 0, 0, 0, 0, Signature.Rest.NONE, -1);
2730+
} else if (parameters instanceof ItParametersNode) {
2731+
return Signature.from(1, 0, 0, 0, 0, Signature.Rest.NONE, -1);
27202732
}
27212733

27222734
throw notCompilable("Unknown signature for block parameters", parameters);

0 commit comments

Comments
 (0)