Skip to main content

scarf_syntax/behavioral_statements/
statements.rs

1// =======================================================================
2// statements.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.6.4
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum StatementOrNull<'a> {
9    Statement(Box<Statement<'a>>),
10    Null(
11        Box<(
12            Vec<AttributeInstance<'a>>,
13            Metadata<'a>, // ;
14        )>,
15    ),
16}
17
18#[derive(Clone, Debug, PartialEq)]
19pub struct Statement<'a>(
20    pub  Option<(
21        BlockIdentifier<'a>,
22        Metadata<'a>, // :
23    )>,
24    pub Vec<AttributeInstance<'a>>,
25    pub StatementItem<'a>,
26);
27
28#[derive(Clone, Debug, PartialEq)]
29pub enum StatementItem<'a> {
30    Blocking(
31        Box<(
32            BlockingAssignment<'a>,
33            Metadata<'a>, // ;
34        )>,
35    ),
36    Nonblocking(
37        Box<(
38            NonblockingAssignment<'a>,
39            Metadata<'a>, // ;
40        )>,
41    ),
42    ProceduralContinuous(
43        Box<(
44            ProceduralContinuousAssignment<'a>,
45            Metadata<'a>, // ;
46        )>,
47    ),
48    Case(Box<CaseStatement<'a>>),
49    Conditional(Box<ConditionalStatement<'a>>),
50    SubroutineCall(Box<SubroutineCallStatement<'a>>),
51    Disable(Box<DisableStatement<'a>>),
52    Event(Box<EventTrigger<'a>>),
53    Loop(Box<LoopStatement<'a>>),
54    Jump(Box<JumpStatement<'a>>),
55    Par(Box<ParBlock<'a>>),
56    ProceduralTimingControl(Box<ProceduralTimingControlStatement<'a>>),
57    Seq(Box<SeqBlock<'a>>),
58    Wait(Box<WaitStatement<'a>>),
59    ProceduralAssertion(Box<ProceduralAssertionStatement<'a>>),
60    Clocking(
61        Box<(
62            ClockingDrive<'a>,
63            Metadata<'a>, // ;
64        )>,
65    ),
66    Randsequence(Box<RandsequenceStatement<'a>>),
67    Randcase(Box<RandcaseStatement<'a>>),
68    Expect(Box<ExpectPropertyStatement<'a>>),
69}
70
71#[derive(Clone, Debug, PartialEq)]
72pub struct FunctionStatement<'a>(pub Statement<'a>);
73
74#[derive(Clone, Debug, PartialEq)]
75pub enum FunctionStatementOrNull<'a> {
76    FunctionStatement(Box<FunctionStatement<'a>>),
77    Null(
78        Box<(
79            Vec<AttributeInstance<'a>>,
80            Metadata<'a>, // ;
81        )>,
82    ),
83}