/// <inheritdoc/> public bool TryCompile(IReadOnlyList <MathExpression> arguments, ICompilationContext <object?> context, ITypeHintHandler typeHintHandler, [MaybeNullWhen(false)] out Expression expr) { if (arguments.Count != 1) { expr = null; return(false); } var argExpr = context.Transform(arguments.First()); if (argExpr.Type == typeof(float) || argExpr.Type == typeof(double)) { // if this is a floating point var method = Helpers.GetMethod <Action <double> >(d => Math.Log(d)) !; expr = Expression.Call(method, CompilerHelpers.ConvertToType(argExpr, typeof(double))); return(true); } else if (CompilerHelpers.IsFloating(argExpr.Type) || CompilerHelpers.IsIntegral(argExpr.Type)) { // if this is a built-in integer or decimal var method = Helpers.GetMethod <Action <decimal> >(d => DecimalMath.Ln(d)) !; expr = Expression.Call(method, CompilerHelpers.ConvertToType(argExpr, typeof(decimal))); return(true); } expr = null; return(false); }
public bool TryCompile(IReadOnlyList <MathExpression> arguments, ICompilationContext <object?> context, ITypeHintHandler hinting, out Expression expr) { var arg = arguments.First(); var concatMethod = Helpers.GetMethod <Action <string> >(a => string.Concat(a, a)) !; expr = Expression.Call(typeof(Convert), nameof(Convert.ToString), null, context.Transform(arg)); expr = Expression.Call(concatMethod, Expression.Constant("hello "), expr); return(true); }