Beispiel #1
0
        public string ToStringTree(int level)
        {
            var indent = new string(' ', level *2);

            if (level != 0)
            {
                indent += "| ";
            }
            string PrintChildren(params AstNode[] nodes)
            {
                string res = "\n";

                foreach (var n in nodes)
                {
                    res += n.ToStringTree(level + 1);
                }
                return(res);
            }

            var impl = new LambdaVisitor <string>(
                (Int v) => $"int: {v.val}\n",
                (Binary v) => $"binary: " + PrintChildren(v.a, v.b),
                (Unary v) => $"unary: " + PrintChildren(v.a),
                (Variable v) => $"var '{v.name}'\n",
                (FunCall v) => $"funCall: " + PrintChildren(v.fun, v.arg),
                (Lambda v) => $"lambda {v.param}: " + PrintChildren(v.body),
                (Assign v) => $"assign: " + PrintChildren(v.rvalue, v.rvalue),
                (Or v) => $"or: " + PrintChildren(v.a, v.b),
                (And v) => $"and: " + PrintChildren(v.a, v.b),
                (If v) => $"if: " + PrintChildren(v.cond, v.t, v.f)
                );

            return(indent + impl.Visit((dynamic)this));
        }
Beispiel #2
0
    public static Program Desugar(Program program, out List<Expr /*!*/> /*!*/ axioms,
      out List<Function /*!*/> /*!*/ functions)
    {
      Contract.Requires(program != null);
      Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out functions)));
      Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out axioms)));
      Contract.Ensures(Contract.Result<Program>() != null);
      LambdaVisitor v = new LambdaVisitor();
      program = v.VisitProgram(program);
      axioms = v.lambdaAxioms;
      functions = v.lambdaFunctions;
      if (CommandLineOptions.Clo.TraceVerify)
      {
        Console.WriteLine("Desugaring of lambda expressions produced {0} functions and {1} axioms:", functions.Count,
          axioms.Count);
        TokenTextWriter wr = new TokenTextWriter("<console>", Console.Out, /*pretty=*/ false);
        foreach (Function f in functions)
        {
          f.Emit(wr, 0);
        }

        foreach (Expr ax in axioms)
        {
          ax.Emit(wr);
          Console.WriteLine();
        }
      }

      return program;
    }
        private static Expression ChangeSource_VisitLambda <T>(Expression <T> node, Dictionary <string, ParameterExpression> paramters, Dictionary <Type, Type> typeMap)
        {
            var lambdaVisitor = new LambdaVisitor(paramters, typeMap);
            var newLambdaBody = lambdaVisitor.Visit(node.Body);
            var theParamters  = node.Parameters.Select(x => paramters[x.Name]).ToArray();
            var lambda        = Expression.Lambda(newLambdaBody, theParamters);

            return(lambda);
        }
Beispiel #4
0
        private static void TestLambdaExpressionVisitor()
        {
            Expression <Action <string> > printNameExpression = i => Console.WriteLine(i);
            var lambdaVisitor = new LambdaVisitor(new LambdaNameValue {
                Name = "i", Value = "Mikita"
            })
                                .VisitAndConvert(printNameExpression, "");

            Console.WriteLine(lambdaVisitor);
            lambdaVisitor.Compile().Invoke("asdsd");
        }
Beispiel #5
0
        public override string ToString()
        {
            var impl = new LambdaVisitor <string>(
                (Int v) => v.val.ToString(),
                (Binary v) => $"({v.a} @ {v.b})",
                (Unary v) => $"(~{v.a})",
                (Variable v) => $"{v.name}",
                (FunCall v) => $"({v.fun} {v.arg})",
                (Lambda v) => $"λ{v.param}. {v.body}",
                (Assign v) => $"({v.rvalue} = {v.rvalue})",
                (Or v) => $"({v.a} || {v.b})",
                (And v) => $"({v.a} && {v.b})",
                (If v) => $"({v.cond} ? {v.t} : {v.f})"
                );

            return(impl.Visit((dynamic)this));
        }
Beispiel #6
0
 public static Program Desugar(Program program, out List<Expr/*!*/>/*!*/ axioms, out List<Function/*!*/>/*!*/ functions) {
   Contract.Requires(program != null);
   Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out functions)));
   Contract.Ensures(cce.NonNullElements(Contract.ValueAtReturn(out axioms)));
   Contract.Ensures(Contract.Result<Program>() != null);
   LambdaVisitor v = new LambdaVisitor();
   program = v.VisitProgram(program);
   axioms = v.lambdaAxioms;
   functions = v.lambdaFunctions;
   if (CommandLineOptions.Clo.TraceVerify) {
     Console.WriteLine("Desugaring of lambda expressions produced {0} functions and {1} axioms:", functions.Count, axioms.Count);
     TokenTextWriter wr = new TokenTextWriter("<console>", Console.Out, /*pretty=*/ false);
     foreach (Function f in functions) {
       f.Emit(wr, 0);
     }
     foreach (Expr ax in axioms) {
       ax.Emit(wr);
       Console.WriteLine();
     }
   }
   return program;
 }
Beispiel #7
0
        public Expression Process(Expression expression)
        {
            RootExpression = expression;


            var memberVisitor = new MemberVisitor(MemberMapper, MemberMapper.Options.Safety.PerformNullChecksOnCustomMappings, Variables);

            // Pass 1: Transform member access so they do null-checks first, if needed
            expression     = memberVisitor.Visit(expression);
            RootExpression = expression;

            var paramVisitor = new ParameterVisitor(this.ParametersToReplace);

            // Pass 2: Transform parameter placeholders with their final ones
            expression = paramVisitor.Visit(expression);

            RootExpression = expression;

            var visibilityVisitor = new VisibilityVisitor(this);

            // Pass 3: Check visibility of what is accessed, to establish if we can compile to a new dynamic assembly.
            visibilityVisitor.Visit(expression);

            RootExpression = expression;

            this.NonPublicMembersAccessed = visibilityVisitor.NonPublicMembersAccessed;

            if (this.NonPublicMembersAccessed)
            {
                var lambdaVisitor = new LambdaVisitor(this);

                expression = lambdaVisitor.Visit(expression);

                RootExpression = expression;
            }

            return(expression);
        }
        private async void OnStart()
        {
            RestoreDefaults();

            TaskScheduler        uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
            IPathStrategyVisitor visitor     = new LambdaVisitor((m, g) =>
            {
                Task.Delay(10).ContinueWith((t) => { CurrentGeneration++; }, uiScheduler).Wait();
            }, m => { });

            IsExecutingHandle.Reset();
            IsExecuting = true;

            try
            {
                await Task.Factory.StartNew(() => { _strategy.GetDestinationPoint(MatrixVM, visitor); });
            }
            finally
            {
                IsExecuting = false;
                IsExecutingHandle.Set();
            }
        }
Beispiel #9
0
        public static Expression <Func <T, bool> > AndAny <T, TItem>(this Expression <Func <T, bool> > first, Expression <Func <T, IEnumerable <TItem> > > collection, Expression <Func <TItem, bool> > itemFilter)
        {
            var second = LambdaVisitor <T, TItem> .CallAny(collection, itemFilter);

            return(first.AndAlso(second));
        }
Beispiel #10
0
            public static Expression <Func <T, bool> > CallAny(Expression <Func <T, IEnumerable <TItem> > > collection, Expression <Func <TItem, bool> > filterExpression)
            {
                var callExpression = new LambdaVisitor <T, TItem>(filterExpression, "Any").Visit(collection);

                return(callExpression as Expression <Func <T, bool> >);
            }
    public override void TestInitialize()
    {
        base.TestInitialize();

        ClassUnderTest = new LambdaVisitor(new StringBuilder(), new KSqlQueryMetadata());
    }