public static D CompileDelegateLambda <D>(Func <TExArgCtx, TEx> exConstructor, params TExArgCtx.Arg[] args) where D : Delegate { var tac = new TExArgCtx(args); return(exConstructor(tac).BakeAndCompile <D>(tac, args.Select(a => ((Expression)a.expr) is ParameterExpression p ? p : null).NotNull().ToArray())); }
private static T InLetCtx <T>(ITexMovement vel, TExArgCtx tac, Func <TExArgCtx, T> exec) { using var root = tac.Let(MOV_ROOT_ALIAS, vel.root); using var ang = tac.Let(MOV_ANGLE_ALIAS, vel.angle); using var angc = tac.Let(MOV_COS_ALIAS, vel.cos); using var angs = tac.Let(MOV_SIN_ALIAS, vel.sin); return(exec(tac)); }
public void TestPrivateHoist() { var ex = "sine 13h 0.4 + * 13 &fitr / p ^ dl 1.2".Into <Func <TExArgCtx, TEx <float> > >(); var exc = GCXFRepo._Fake(ex); var _gcx = TExArgCtx.Arg.Make <GenCtx>("gcx", true); var tac = new TExArgCtx(_gcx); exc(tac).BakeAndCompile <GCXF <float> >(tac, _gcx.expr); var ex2 = @"sync sun-red/w <2;:> gsr { start gcxVar =v2 pxy(1, 2) } s offset :: { letVar1 0 letVar2 (-1 + &letVar1) } px &letVar2 :: { letVar1 [&gcxVar].x letVar2 (1 + &letVar1) } pxy @0 publicVar ss0 &letVar2" .Into <StateMachine>(); //var s = BakeCodeGenerator.Generated; }