diff options
Diffstat (limited to '')
| -rw-r--r-- | lib/sublanguage_context.ml | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/sublanguage_context.ml b/lib/sublanguage_context.ml new file mode 100644 index 0000000..c7598f1 --- /dev/null +++ b/lib/sublanguage_context.ml @@ -0,0 +1,39 @@ +(** Execution context passed to every sublanguage. + + - [write_handle] NT branch handle; sublanguages use it for mutations + (create_relation, link_tuple, etc). Read-only + sublanguages (DRL) ignore it. + + - [branch] Structural view over the active branch — gives every + executor random-access to every multigroup bound to + the branch via [mg_of]. Schema lookups for an FQN + [{mg; name}] use [branch#mg_of mg |> Option.bind + (fun m -> m#get_relation name)]. + + - [resolve] Builds an absolute RNT path for an FQN. Pass + [~branch:b] to address a relation on a different + live branch (cross-multigroup reads). + + - [switch_branch] Closes the current branch and opens the named one, + returning the delta describing the new branch's mg + set. Provided by the listener so VCL does not need + direct access to session state. *) + +type branch_view = < + name : string; + tip : string; + mg_of : string -> Management.Multigroup.multigroup option; + multigroups : (string * Management.Multigroup.multigroup) list; + add_multigroup : name:string -> unit; + set_mg : name:string -> + Management.Multigroup.multigroup -> unit; + path : ?branch:string -> Qualified_name.t -> string; +> + +type t = { + write_handle : Nt.branch_handle; + branch : branch_view; + resolve : ?branch:string -> Qualified_name.t -> string; + switch_branch : string -> + (Sublanguage_types.transition_delta, Nt.error) result; +} |
