1 import Base 2 import ./world.bend as W 3 import ./system.bend as Sys 4 import ./transaction.bend as T 5 import ./machine.bend as M 6 import ./machine_handlers.bend as H 7 import ./machine_handler_bundle.bend as B 8 import ./machine_world.bend as MachineWorld 9 import ./ordinary_machine_declaration.bend as Machine 10 import ./ordinary_machine_schedule.bend as Ordinary 11 import ./ordinary_app_machine_handler.bend as App 12 import ./ordinary_app_resource_field_declaration.bend as D 13 import ./ordinary_resource_field_system.bend as Field 14 import ./ordinary_machine_handler_bundle_context.bend as Operation 15 import ./machine_handler_trace.bend as TraceRun 16 import ./ordinary_machine_handler_bundle.bend as Classic 17 import ./execution_trace.bend as Trace 18 import ./trace_facts.bend as Facts 19 type Registration -> H.Invocation -> Sys.Outcome,String,Unit>> is Type: 20 Registered{world:W.World,entry:B.Scheduled} 21 Rejected{world:W.World,selector:B.Selector,requirements:List<&2,Q>,ordinal:U32,name:String} 22 def access_fields(~S:Data,~Owner:Type,~Ops:Type,value:Field.Declaration) -> List<&2,String>: 23 match value: 24 case Field.Declaration{_,clauses}:Field.access(~S,clauses) 25 def access(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration) -> List<&2,String>: 26 access_fields(~S,~T.Tx,E>,~Ops(T.Tx,E>),D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration)) 27 def registered(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,selector:B.Selector,requirements:List<&2,Q>,ordinal:U32,name:String,result:Sys.RegistrationResult,String,Unit,runner>) -> Registration: 28 match result: 29 case Sys.Registered{world,registry}:Registered{world,B.Scheduled{selector,requirements,H.Entry{ordinal,registry}}} 30 case Sys.RegistrationFailed{world}:Rejected{world,selector,requirements,ordinal,name} 31 def register(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> H.Invocation -> H -> H & (T.Outcome & Unit),world:W.World,selector:B.Selector,requirements:List<&2,Q>,ordinal:U32,+name:String) -> Registration,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>: 32 registered(~S,~K,~V,~Q,~C,~R,~E,~Field.runner(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),selector,requirements,ordinal,name,Sys.register(~S,~C,~R,~E,~H.Invocation,~String,~Unit,~Field.runner(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),world,name,access(~S,~C,~R,~E,~Ops,~Value,~declaration))) 33 def Application(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> H.Invocation -> H -> H & (T.Outcome & Unit),~Extra:Type) -> Type:App.Application,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),Extra> 34 def Bundle(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> H.Invocation -> H -> H & (T.Outcome & Unit)) -> Type:B.Bundle,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)> 35 def Entry(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> H.Invocation -> H -> H & (T.Outcome & Unit)) -> Type:B.Scheduled,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)> 36 def bind(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> H.Invocation -> H -> H & (T.Outcome & Unit),~Extra:Type,world:W.World,bundle:B.Bundle,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>,phase:Ordinary.Declaration,extra:Extra) -> App.Application,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),Extra>: 37 App.bind(~S,~K,~V,~Q,~C,~R,~E,~Field.runner(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Extra,world,bundle,phase,extra) 38 def returned(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,declaration:Ordinary.Declaration,extra:Extra,debug:Bool,result:Classic.MarkerResult & Trace.Batch) -> App.RunResult & Trace.Batch: 39 match result: 40 case (result,batch):(App.RunResult{result,declaration,extra,debug},batch) 41 def state(debug:Bool) -> Facts.State: 42 match debug: 43 case False{}:Facts.Off{} 44 case True{}:Facts.On{[]} 45 def run(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration,~body:@-H:Type -> @-caps:Ops(H) -> H.Invocation -> H -> H & (T.Outcome & Unit),~take:R -> R & M.Slot,~put:R -> M.Slot -> R,~machine:Machine.Declaration,~publish:W.World -> M.Transition -> W.World,~same:V -> V -> Bool,~requirement_same:Q -> Q -> Bool,~has:W.World -> Q -> W.World & Bool,~frame:W.World -> W.World,~Extra:Type,app:App.Application,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),Extra>) -> App.RunResult,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),Extra> & Trace.Batch: 46 match app: 47 case App.Recovering{result,declaration,extra,debug}:(App.RunResult{result,declaration,extra,debug},Trace.Disabled{}) 48 case App.Application{world,bundle,Ordinary.Declaration{+name},extra,+debug}:returned(~S,~K,~V,~Q,~C,~R,~E,~Field.runner(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Extra,Ordinary.Declaration{name},extra,debug,TraceRun.captured(~S,~K,~V,~Q,~C,~R,~E,~Field.runner(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),name,Operation.run(~S,~K,~V,~Q,~C,~R,~E,~Field.runner(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Field.runner_observed(~S,~C,~R,~E,~Ops,~H.Invocation,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Machine.name(~S,~K,~V,~R,~take,machine),~MachineWorld.take(~S,~K,~V,~C,~R,~E,~take),~MachineWorld.put(~S,~K,~V,~C,~R,~E,~put),~publish,~same,~requirement_same,~has,~frame,Ordinary.Declaration{name},bundle,world,state(debug)))) 49 def resumed(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,declaration:Ordinary.Declaration,extra:Extra,debug:Bool,value:Classic.MarkerResult) -> App.Application & B.Status: 50 match value: 51 case Classic.MarkerResult{B.Returned{bundle,world,status},_,_}:(App.Application{world,bundle,declaration,extra,debug},status) 52 case Classic.MarkerResult{B.InternalOwnerRemainder{namespace,recovery,world,+status},steps,observations}:(App.Recovering{Classic.MarkerResult{B.InternalOwnerRemainder{namespace,recovery,world,status},steps,observations},declaration,extra,debug},status) 53 def resume(~S:Data,~K:Data,~V:Data,~Q:Data,~C:Type,~R:Type,~E:Data,~runner:W.World -> H.Invocation -> Sys.Outcome,String,Unit>,~Extra:Type,value:App.RunResult) -> App.Application & B.Status: 54 match value: 55 case App.RunResult{result,declaration,extra,debug}:resumed(~S,~K,~V,~Q,~C,~R,~E,~runner,~Extra,declaration,extra,debug,result)