Esempio n. 1
0
        // For performance testing
        public static ParseResult <object> ParseDelegate(string exprString, IFunctions <string> functions = null)
        {
            var parseResult = CSharpParser(functions).Parse(exprString);
            var expr        = parseResult.Expression;

            var csharpExpr = expr.Evaluate(new CSharpObjectContext(ConcatStringMonad.Instance, Constants.DefaultContext));

            var(type, emitResult) = CodeGenCSharpClass.Generate("VcelTesting", csharpExpr);
            if (type == null)
            {
                return(new ParseResult <object>(emitResult.Diagnostics.Select(
                                                    x => new ParseError(
                                                        x.GetMessage(),
                                                        x.Id,
                                                        x.Location.GetLineSpan().StartLinePosition.Line,
                                                        x.Location.GetLineSpan().StartLinePosition.Line,
                                                        x.Location.GetLineSpan().EndLinePosition.Line)).ToList()));
            }

            var method = type.GetMethod("Evaluate");

            Debug.Assert(method != null, nameof(method) + " != null");
            var func = (Func <object, object>)Delegate.CreateDelegate(typeof(Func <object, object>), null, method);

            return(new ParseResult <object>(new CSharpDelegateExpr(null, func)));
        }
Esempio n. 2
0
        // For functional testing
        public static ParseResult <object> ParseMethod(string exprString, IFunctions <string> functions = null)
        {
            var parseResult = CSharpParser(functions).Parse(exprString);

            if (!parseResult.Success)
            {
                return(new ParseResult <object>(parseResult.ParseErrors));
            }

            var expr       = parseResult.Expression;
            var csharpExpr = expr.Evaluate(new CSharpObjectContext(ConcatStringMonad.Instance, Constants.DefaultContext));

            var(type, emitResult) = CodeGenCSharpClass.Generate("VcelTesting", csharpExpr);
            if (type == null)
            {
                return(new ParseResult <object>(emitResult.Diagnostics.Select(
                                                    x => new ParseError(
                                                        x.GetMessage(),
                                                        x.Id,
                                                        x.Location.GetLineSpan().StartLinePosition.Line,
                                                        x.Location.GetLineSpan().StartLinePosition.Line,
                                                        x.Location.GetLineSpan().EndLinePosition.Line)).ToList()));
            }

            var method = type.GetMethod("Evaluate");

            return(new ParseResult <object>(new CSharpMethodExpr(null, method)));
        }