private MSA.Expression /*!*/ MakeParametersInitialization(AstGenerator /*!*/ gen, MSA.Expression[] /*!*/ parameters) { Assert.NotNull(gen); Assert.NotNullItems(parameters); var result = AstFactory.CreateExpressionArray( _parameters.LeftValues.Count + (_parameters.UnsplattedValue != null ? 1 : 0) + 1 ); int resultIndex = 0; bool paramsInArray = HasFormalParametersInArray; for (int i = 0; i < _parameters.LeftValues.Count; i++) { var parameter = paramsInArray ? Ast.ArrayAccess(parameters[HiddenParameterCount], Ast.Constant(i)) : parameters[HiddenParameterCount + i]; result[resultIndex++] = _parameters.LeftValues[i].TransformWrite(gen, parameter); } if (_parameters.UnsplattedValue != null) { // the last parameter is unsplat: var parameter = parameters[parameters.Length - 1]; result[resultIndex++] = _parameters.UnsplattedValue.TransformWrite(gen, parameter); } result[resultIndex++] = Ast.Empty(); Debug.Assert(resultIndex == result.Length); return(AstFactory.Block(result)); }