pub enum ScopeKind {
Session,
Workload,
Scenario {
name: String,
},
Comprehension {
comprehension: Comprehension,
},
IncludedScenario {
name: String,
},
DoWhile {
condition: String,
counter: Option<String>,
},
DoUntil {
condition: String,
counter: Option<String>,
},
Phase {
name: String,
},
OpTemplate {
name: String,
},
Bindings {
source: String,
},
}Expand description
What kind of scope a ScopeNode represents. Mirrors the
ScenarioNode variants 1:1, with two extra kinds for the
implicit workload root and the named scenario layer that
wraps the user’s authored children. SRD 18b §“Canonical
traversal”.
Variants§
Session
The session root — one per process (SRD-88). The shared
common root every execution derives from: it owns the session
polydat scope (the process/session-level args) and the
session=<id> identity. Each ScopeKind::Workload hangs
under it as one execution. For a single-execution run there is
exactly one workload child.
Workload
A workload root — one per execution (SRD-88). Owns the outer Polydat Kernel for its workload, compiled at execution start, binding the session scope as its outer.
Scenario
A named scenario. Wraps the scenario’s children so that “phase P in scenario default” survives as a path query rather than a elided label.
Comprehension
Iteration scope — for_each (single or multi-clause) or
for_each_union. The Comprehension AST captures the
shape and clauses; the executor uses it to enumerate
tuples and bind iteration variables on per-iteration
child kernels.
Fields
comprehension: ComprehensionIncludedScenario
Logical inclusion of another scenario by name. The
runtime walks straight through to the children; the
scope is preserved purely so the scope tree retains the
include hierarchy for dryrun=phase and TUI output.
See
nmbrs_workload::model::ScenarioNode::IncludedScenario.
DoWhile
do_while with optional counter as a scope output.
DoUntil
do_until with optional counter as a scope output.
Phase
A phase reference. With SRD-13d Phase 6 the phase is no
longer a leaf — every op template the phase declares
becomes an OpTemplate child of this node. The kernel
slot, if filled, holds the per-phase Polydat program.
OpTemplate
SRD-13d Phase 6 — an op template’s scope, child of its
declaring phase. Per-template Polydat content (bindings:,
metrics: wire-injections, inline {{<expr>}} rewrites)
hangs off this node; the scope-elision pre-walk
(§3.3) decides whether it materialises its own kernel
or elides into the parent phase. Op-template scopes
also own per-op Component instances at runtime so
SRD-40b’s duplicate-family check (via
Component::register_instrument) surfaces per-op
rather than per-phase.
Bindings
Scenario-tree-level Polydat bindings block (see
nmbrs_workload::model::ScenarioNode::Bindings). The
source is Polydat matter text that compiles into a kernel
layered over the parent scope. Used for any scope-tree-
level state injection: workload-param shadowing (the
set: { ... } sugar form), derived bindings spanning a
subtree, shared cells, etc. — the Polydat grammar is the
only constraint on what the source may contain.
Implementations§
Source§impl ScopeKind
impl ScopeKind
Sourcepub fn opens_kernel(&self) -> bool
pub fn opens_kernel(&self) -> bool
True if this kind opens a new Polydat scope (its own kernel + pragmas + extern wiring). Phase scopes are only “new” when the phase has its own bindings or it’s an iteration of a parent — that decision lives in the compiler step, not this static descriptor.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ScopeKind
impl RefUnwindSafe for ScopeKind
impl Send for ScopeKind
impl Sync for ScopeKind
impl Unpin for ScopeKind
impl UnsafeUnpin for ScopeKind
impl UnwindSafe for ScopeKind
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more