pub struct ScopeNode {
pub kind: ScopeKind,
pub parent: Option<ScopeNodeIdx>,
pub children: Vec<ScopeNodeIdx>,
pub depth: usize,
pub pragmas: PragmaSet,
pub cached_kernel: OnceLock<Arc<ScopeKernel>>,
pub materialised: Option<bool>,
pub logical_name: String,
}Expand description
One node in the runtime scope tree. Carries enough metadata for the scheduler to walk and the compiler to fill in.
Fields§
§kind: ScopeKind§parent: Option<ScopeNodeIdx>§children: Vec<ScopeNodeIdx>§depth: usizeDepth from the root. Root is 0; its children are 1; and
so on. The scheduler’s schedule=<level0>/<level1>/...
spec indexes by child depth, so a node at depth d
schedules its children with the spec entry for index
d.
pragmas: PragmaSetPragmas declared at this scope level. Empty by default; step 2 of the migration fills these in by walking the node’s source (or, for control-flow nodes, the optional inline pragma block once the workload model supports per-node pragmas).
cached_kernel: OnceLock<Arc<ScopeKernel>>This scope’s canonical kernel (crate::scope_kernel::ScopeKernel):
the interpreter program synthesis reads, beside the kernel that runs
on the fiber engine, and for an op-template scope the module each
fiber instantiates its per-op kernel from. Populated at pre-map
time by ScopeTree::install_kernel.
SRD 18b §“Iteration variables as scope outputs”: every
non-trivial scope owns a kernel. The cached kernel is
shared via Arc (read-only canonical state). Mutable
per-iteration / per-fiber execution binds another instance of
it under the live parent (crate::scope_kernel::ScopeKernel::bind_under).
OnceLock keeps installation lock-free; downstream
readers walk the parent chain via
[ScopeTree::lookup_name] and never touch this slot
directly.
materialised: Option<bool>SRD-13d §3 scope-elision mark — set once at
pre-walk by ScopeTree::mark_scope_elision and
read by every consumer (premap, runtime, diagnostics).
None means “not yet computed”; the pre-walk
guarantees every node has Some after it finishes.
true ⇒ this scope materialises its own kernel;
false ⇒ elided into the nearest materialised
ancestor.
logical_name: StringSRD-13d §5.3 logical kernel name. Stable, fully-
qualified scope-tree path (workload, phase.<n>,
phase.<n>.op.<o>, etc.). Used by dryrun=op
diagnostics and nmbrs describe wiring displays. Empty
before the pre-walk runs.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for ScopeNode
impl !RefUnwindSafe for ScopeNode
impl !UnwindSafe for ScopeNode
impl Send for ScopeNode
impl Sync for ScopeNode
impl Unpin for ScopeNode
impl UnsafeUnpin for ScopeNode
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