execution_generalized_system_leaf.bend
bendvy-ecs-core@0.1.0.3 · 43 lines · 10 definitions
1import Base
2import bendvy-ecs-core@0.1.0.3/execution_composer_layout.bend as L
3import bendvy-ecs-core@0.1.0.3/execution_builder.bend as Build
4import bendvy-ecs-core@0.1.0.3/execution_declaration.bend as D
5import bendvy-ecs-core@0.1.0.3/execution_system.bend as Sys
6import bendvy-ecs-core@0.1.0.3/execution_system_registration.bend as Registration
7import bendvy-ecs-core@0.1.0.3/execution_retained_system.bend as Retained
8import bendvy-ecs-core@0.1.0.3/execution_resource_admission.bend as Admission
9import bendvy-ecs-core@0.1.0.3/dependency_registration.bend as Reg
10import bendvy-ecs-core@0.1.0.3/dependency_executor.bend as Exec
11import bendvy-ecs-core@0.1.0.3/dependency_plan.bend as Plan
12import bendvy-ecs-core@0.1.0.3/world.bend as W
13
14def Node(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out)) -> Type:
15 Retained.CompiledBinding<D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>>
16def define_with_compilation(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),compilation:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,world:W.World<S,L.columns(~S,components),L.resources(~S,resources),E>,name:String,local:Local) -> D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops> & Sys.Defined<W.World<S,L.columns(~S,components),L.resources(~S,resources),E>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,Local>:
17 Registration.define_with_compilation(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~E,~Ops,~Local,~Error,~Out,~declaration,~body,~L.resources(~S,resources),compilation,world,name,local)
18def run_returned(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),result:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops> & Sys.RunResult<W.World<S,L.columns(~S,components),L.resources(~S,resources),E>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,Error,Out>) -> Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body) & (W.World<S,L.columns(~S,components),L.resources(~S,resources),E> & Exec.Invocation<Error,Out>):
19 match result:
20 case (compilation,Sys.Refused{world,system}):(Retained.pack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,compilation,system),(world,Exec.AdmissionRefused{}))
21 case (compilation,Sys.Executed{world,system,Sys.Success{output}}):(Retained.pack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,compilation,system),(world,Exec.Completed{output}))
22 case (compilation,Sys.Executed{world,system,Sys.BodyError{error,output}}):(Retained.pack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,compilation,system),(world,Exec.BodyError{error,output}))
23def run_inspected(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),~construction:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,owner:Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,inspected:Admission.Inspection<S,components,resources,L.columns(~S,components),L.resources(~S,resources),E,Ops,declaration>) -> Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body) & (W.World<S,L.columns(~S,components),L.resources(~S,resources),E> & Exec.Invocation<Error,Out>):
24 match inspected:
25 case Admission.Refused{world,compilation}:(Retained.pack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,compilation,owner),(world,Exec.AdmissionRefused{}))
26 case Admission.Admitted{world,compilation,_}:run_returned(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body,Sys.run_retained_compilation(~S,~L.columns(~S,components),~L.resources(~S,resources),~E,~Ops,~Local,~Error,~Out,~declaration,~body,~D.trusted_construction_caps(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops,construction),compilation,owner,world))
27def run(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),~construction:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,node:Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body),world:W.World<S,L.columns(~S,components),L.resources(~S,resources),E>) -> Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body) & (W.World<S,L.columns(~S,components),L.resources(~S,resources),E> & Exec.Invocation<Error,Out>):
28 {\{Tuple: compilation => owner => run_inspected(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body,~construction,owner,Admission.inspect_with_compilation(~S,~components,~resources,~L.columns(~S,components),~L.resources(~S,resources),~E,~Ops,~declaration,compilation,world))} : (D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops> & Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>) -> Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body) & (W.World<S,L.columns(~S,components),L.resources(~S,resources),E> & Exec.Invocation<Error,Out>)}(Retained.unpack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,node))
29def dispatch_selected(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),~construction:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,node:Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body),world:W.World<S,L.columns(~S,components),L.resources(~S,resources),E>,selected:Bool) -> Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body) & (W.World<S,L.columns(~S,components),L.resources(~S,resources),E> & Exec.Invocation<Error,Out>):
30 match selected:
31 case False{}:(node,(world,Exec.AdmissionRefused{}))
32 case True{}:run(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body,~construction,node,world)
33def dispatch_unpacked(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),~construction:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,node:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops> & Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,world:W.World<S,L.columns(~S,components),L.resources(~S,resources),E>,id:U32) -> Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body) & (W.World<S,L.columns(~S,components),L.resources(~S,resources),E> & Exec.Invocation<Error,Out>):
34 match node:
35 case (compilation,Sys.Owner{namespace,+actual,name,access,cursor,local}):dispatch_selected(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body,~construction,Retained.pack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,compilation,Sys.Owner{namespace,actual,name,access,cursor,local}),world,U32.is_eq(actual,id))
36def dispatch(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),~construction:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,node:Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body),world:W.World<S,L.columns(~S,components),L.resources(~S,resources),E>,id:U32) -> Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body) & (W.World<S,L.columns(~S,components),L.resources(~S,resources),E> & Exec.Invocation<Error,Out>):
37 dispatch_unpacked(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body,~construction,Retained.unpack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,node),world,id)
38def facts_unpacked(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),~construction:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,node:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops> & Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>) -> Reg.Registry<W.World<S,L.columns(~S,components),L.resources(~S,resources),E>,Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body),Error,Out,dispatch(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body,~construction)>:
39 match node:
40 case (D.Supported{D.Declaration{caps,+requirements},recipes},Sys.Owner{namespace,+id,name,access,cursor,local}):Reg.Registry{Retained.pack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,D.Supported{D.Declaration{caps,requirements},recipes},Sys.Owner{namespace,id,name,access,cursor,local}),[Plan.Node{id,D.qualified(requirements)}]}
41 case (D.Unsupported{caps,+requirements,recipes},Sys.Owner{namespace,+id,name,access,cursor,local}):Reg.Registry{Retained.pack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,D.Unsupported{caps,requirements,recipes},Sys.Owner{namespace,id,name,access,cursor,local}),[Plan.Node{id,D.qualified(requirements)}]}
42def facts(~S:Data,~components:L.Layout,~resources:L.Layout,~E:Data,~Ops:Data -> (Type -> Type) -> Type -> Type,~Local:Type,~Error:Data,~Out:Data,~declaration:Build.FrameworkProgram(~S,~L.columns(~S,components),~L.columns(~S,components),~L.resources(~S,resources),~Ops),~body:Sys.Body(~S,~Ops,~Local,~Error,~Out),~construction:D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,node:Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body)) -> Reg.Registry<W.World<S,L.columns(~S,components),L.resources(~S,resources),E>,Node(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body),Error,Out,dispatch(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body,~construction)>:
43 facts_unpacked(~S,~components,~resources,~E,~Ops,~Local,~Error,~Out,~declaration,~body,~construction,Retained.unpack(D.Compilation<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),Ops>,Sys.Owner<S,L.columns(~S,components),L.columns(~S,components),L.resources(~S,resources),E,Ops,Local,Error,Out,declaration,body>,node))