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))