pub enum PathEdge {
None,
Any,
Specific(EdgeKind),
}Expand description
A module path’s own edge-sensitivity (LRM 1800-2023 §30.4.3, Task 7 —
docs/superpowers/plans/2026-10-03-sdf.md).
Derived from TWO sv-lang accessors together, never one alone:
Symbol::timing_path_edge_identifier() alone cannot distinguish “this is
a plain, non-edge-sensitive path” from “this is an edge-sensitive path
with no edge keyword written” — BOTH report sv_lang::EdgeKind::None
(verified live against sv-lang=0.1.9/slang 11.0: (posedge clk => q) = 1; — the edge-sensitive grammar’s OWN “simple destination” alternative,
no (dest:data) suffix at all — reports PosEdge, proving the
identifier is a direct field of the edge-sensitive grammar’s shared
[edge_identifier] production regardless of which destination suffix
alternative is used; (clock => (out:in))=10; — LRM 30.4.3’s own
Example 3, no edge keyword at all but WITH the (dest:data) suffix —
reports None for the identifier yet Some for
timing_path_edge_source_expr(); a PLAIN 30.4.2 simple path reports
None/None for both). So the discriminator for “is this path
edge-sensitive AT ALL” is identifier != EdgeKind::None || edge_source_expr().is_some(), and PathEdge::Any is exactly the
“edge-sensitive, but no keyword written” case LRM 30.4.3’s own text
gives an explicit rule for: “If the edge transition is not specified,
the path shall be considered active on any transition at the input
terminal.”
Variants§
None
Not an edge-sensitive path at all (LRM 30.4.2 simple paths, 30.4.5
full/parallel connection paths with no edge-sensitive suffix) — no
edge gating whatsoever; vj::specify::PathRetimer fires on
any transition of the destination’s own staging cell, exactly the
pre-Task-7 behavior every earlier task’s fixture already exercises.
Any
An edge-sensitive path (30.4.3) with no edge_identifier written —
gated on “any transition at the input terminal” (30.4.3’s own text,
quoted above), i.e. from != to on the member’s own input, with no
further direction requirement.
Specific(EdgeKind)
An edge-sensitive path with a specific posedge/negedge/edge
identifier — never sv_lang::EdgeKind::None here (that raw value
is exactly what distinguishes PathEdge::None/PathEdge::Any
from this variant in the first place, so constructing Specific
with EdgeKind::None would be a caller bug, not a real state; see
PathEdge::from_accessors’s own body, the only constructor).
Trait Implementations§
impl Copy for PathEdge
impl Eq for PathEdge
impl StructuralPartialEq for PathEdge
Auto Trait Implementations§
impl Freeze for PathEdge
impl RefUnwindSafe for PathEdge
impl Send for PathEdge
impl Sync for PathEdge
impl Unpin for PathEdge
impl UnsafeUnpin for PathEdge
impl UnwindSafe for PathEdge
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.