private void CheckMatrix(IExpression[] args) { var size = args[0].ParametersCount; if (args.Any(exp => exp.ResultType != ExpressionResultType.Matrix || exp.ParametersCount != size)) throw new MatrixIsInvalidException(); }
public void SetContext(DeltinScriptParser.Call_parametersContext context) { if (_setContext) { throw new Exception("Already set the context for the overload chooser."); } CallContext = context; _setContext = true; IExpression[] values = new IExpression[context.expr().Length]; DocRange[] errorRanges = new DocRange[values.Length]; var parameterRanges = new List <DocRange>(); for (int i = 0; i < values.Length; i++) { values[i] = DeltinScript.GetExpression(parseInfo, getter, context.expr(i)); errorRanges[i] = DocRange.GetRange(context.expr(i)); parameterRanges.Add(errorRanges[i]); } if (!SetParameterCount(values.Length)) { return; } if (values.Any(v => v == null)) { return; } // Match by value types and parameter types. for (int i = 0; i < values.Length; i++) { foreach (var option in CurrentOptions) { CompareParameterTypes(values[i], option, i, errorRanges[i]); } } GetBestOption(); Values = new IExpression[Overload.Parameters.Length]; for (int i = 0; i < values.Length; i++) { Values[i] = values[i]; } if (values.Length < Overload.Parameters.Length) { parameterRanges.Add(new DocRange( DocRange.GetRange(context).end, CallRange.end )); } ParameterRanges = parameterRanges.ToArray(); // Get the missing parameters. for (int i = values.Length; i < Values.Length; i++) { Values[i] = MissingParameter(Overload.Parameters[i]); } GetAdditionalData(); }
private void CheckMatrix(IExpression[] args) { var size = args[0].CountOfParams; if (args.Any(exp => !exp.ResultIsMatrix || exp.CountOfParams != size)) throw new MatrixIsInvalidException(); }