#[repr(C)]pub enum WaitSpecStorage {
None,
Delay(SimTime),
Edge {
edge: EdgeKind,
signal: StateCellId,
iff: Option<PredicateFn>,
},
EdgeList(ArenaRange),
ImplicitComb(SubscriptionSetId),
}Expand description
The POD cache of the last-returned suspend reason, embedded directly in
ActivationRecord. docs/design/process.md §3/§4 names this exact
split: the persisted field is WaitSpecStorage, distinct from the richer
WaitSpec the suspend/resume ABI exchanges with the scheduler on every
call (“last-returned WaitSpec, re-derivable but cached for O(1) resume
dispatch and for the debugger inspector”). Edge’s single term is already
Copy (PredicateFn is a bare extern "C" fn pointer) so it is inlined
directly; EdgeList’s term count is unbounded (an arbitrary-length
@(a or b or c or ...)), so like ActivationRecord::frame it is instead
an ArenaRange into a static, elaboration-time-built edge-term table
(the concrete StateCellIds for a given suspend point are fixed once
elaboration resolves the instance’s signals and never change for the life
of the run, so this table is a read-only lookup, never a rollback hazard).