@@ -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