scarf_syntax/behavioral_statements/
statements.rs1use 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>, )>,
15 ),
16}
17
18#[derive(Clone, Debug, PartialEq)]
19pub struct Statement<'a>(
20 pub Option<(
21 BlockIdentifier<'a>,
22 Metadata<'a>, )>,
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>, )>,
35 ),
36 Nonblocking(
37 Box<(
38 NonblockingAssignment<'a>,
39 Metadata<'a>, )>,
41 ),
42 ProceduralContinuous(
43 Box<(
44 ProceduralContinuousAssignment<'a>,
45 Metadata<'a>, )>,
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>, )>,
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>, )>,
82 ),
83}