Exemple #1
0
        public IFunctionExpression Generate(FunctionCall functionCall)
        {
            var functionMetadata = _functionMetadataResolver.Resolve(functionCall);

            if (functionMetadata == null)
            {
                throw new InvalidOperationException($"Could not find function of name '{functionCall.FunctionName}'.");
            }

            var argumentExpressions = _functionArgumentExpressionsGenerator.Generate(functionCall.Arguments, functionMetadata.FunctionContract);

            try
            {
                return((IFunctionExpression)_createFunctionExpressionMethod.Value
                       .MakeGenericMethod(functionMetadata.FunctionType,
                                          functionMetadata.FunctionContract.ResultType)
                       .Invoke(this,
                               new object[] { argumentExpressions }));
            }
            catch (TargetInvocationException exception)
            {
                throw exception.InnerException;
            }
        }