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)); }
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); }
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"); }
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)); }
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; }
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(); } }
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)); }
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()); }