コード例 #1
0
ファイル: Matrix.cs プロジェクト: smwentum/xFunc
        private void CheckMatrix(IExpression[] args)
        {
            var size = args[0].ParametersCount;

            if (args.Any(exp => exp.ResultType != ExpressionResultType.Matrix || exp.ParametersCount != size))
                throw new MatrixIsInvalidException();
        }
コード例 #2
0
        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();
        }
コード例 #3
0
ファイル: Matrix.cs プロジェクト: ronnycsharp/xFunc
        private void CheckMatrix(IExpression[] args)
        {
            var size = args[0].CountOfParams;

            if (args.Any(exp => !exp.ResultIsMatrix || exp.CountOfParams != size))
                throw new MatrixIsInvalidException();
        }