1use crate::*;
2
3#[derive(Clone, Debug, PartialEq, Node)]
6pub struct ProceduralTimingControlStatement {
7 pub nodes: (ProceduralTimingControl, StatementOrNull),
8}
9
10#[derive(Clone, Debug, PartialEq, Node)]
11pub enum DelayOrEventControl {
12 Delay(Box<DelayControl>),
13 Event(Box<EventControl>),
14 Repeat(Box<DelayOrEventControlRepeat>),
15}
16
17#[derive(Clone, Debug, PartialEq, Node)]
18pub struct DelayOrEventControlRepeat {
19 pub nodes: (Keyword, Paren<Expression>, EventControl),
20}
21
22#[derive(Clone, Debug, PartialEq, Node)]
23pub enum DelayControl {
24 Delay(Box<DelayControlDelay>),
25 Mintypmax(Box<DelayControlMintypmax>),
26}
27
28#[derive(Clone, Debug, PartialEq, Node)]
29pub struct DelayControlDelay {
30 pub nodes: (Symbol, DelayValue),
31}
32
33#[derive(Clone, Debug, PartialEq, Node)]
34pub struct DelayControlMintypmax {
35 pub nodes: (Symbol, Paren<MintypmaxExpression>),
36}
37
38#[derive(Clone, Debug, PartialEq, Node)]
39pub enum EventControl {
40 EventIdentifier(Box<EventControlEventIdentifier>),
41 EventExpression(Box<EventControlEventExpression>),
42 Asterisk(Box<EventControlAsterisk>),
43 ParenAsterisk(Box<EventControlParenAsterisk>),
44 SequenceIdentifier(Box<EventControlSequenceIdentifier>),
45}
46
47#[derive(Clone, Debug, PartialEq, Node)]
48pub struct EventControlEventIdentifier {
49 pub nodes: (Symbol, HierarchicalEventIdentifier),
50}
51
52#[derive(Clone, Debug, PartialEq, Node)]
53pub struct EventControlEventExpression {
54 pub nodes: (Symbol, Paren<EventExpression>),
55}
56
57#[derive(Clone, Debug, PartialEq, Node)]
58pub struct EventControlAsterisk {
59 pub nodes: (Symbol,),
60}
61
62#[derive(Clone, Debug, PartialEq, Node)]
63pub struct EventControlParenAsterisk {
64 pub nodes: (Symbol, Paren<Symbol>),
65}
66
67#[derive(Clone, Debug, PartialEq, Node)]
68pub struct EventControlSequenceIdentifier {
69 pub nodes: (Symbol, PsOrHierarchicalSequenceIdentifier),
70}
71
72#[derive(Clone, Debug, PartialEq, Node)]
73pub enum EventExpression {
74 Expression(Box<EventExpressionExpression>),
75 Sequence(Box<EventExpressionSequence>),
76 Or(Box<EventExpressionOr>),
77 Comma(Box<EventExpressionComma>),
78 Paren(Box<EventExpressionParen>),
79}
80
81#[derive(Clone, Debug, PartialEq, Node)]
82pub struct EventExpressionExpression {
83 pub nodes: (
84 Option<EdgeIdentifier>,
85 Expression,
86 Option<(Keyword, Expression)>,
87 ),
88}
89
90#[derive(Clone, Debug, PartialEq, Node)]
91pub struct EventExpressionSequence {
92 pub nodes: (SequenceInstance, Option<(Keyword, Expression)>),
93}
94
95#[derive(Clone, Debug, PartialEq, Node)]
96pub struct EventExpressionOr {
97 pub nodes: (EventExpression, Keyword, EventExpression),
98}
99
100#[derive(Clone, Debug, PartialEq, Node)]
101pub struct EventExpressionComma {
102 pub nodes: (EventExpression, Symbol, EventExpression),
103}
104
105#[derive(Clone, Debug, PartialEq, Node)]
106pub struct EventExpressionParen {
107 pub nodes: (Paren<EventExpression>,),
108}
109
110#[derive(Clone, Debug, PartialEq, Node)]
111pub enum ProceduralTimingControl {
112 DelayControl(Box<DelayControl>),
113 EventControl(Box<EventControl>),
114 CycleDelay(Box<CycleDelay>),
115}
116
117#[derive(Clone, Debug, PartialEq, Node)]
118pub enum JumpStatement {
119 Return(Box<JumpStatementReturn>),
120 Break(Box<JumpStatementBreak>),
121 Continue(Box<JumpStatementContinue>),
122}
123
124#[derive(Clone, Debug, PartialEq, Node)]
125pub struct JumpStatementReturn {
126 pub nodes: (Keyword, Option<Expression>, Symbol),
127}
128
129#[derive(Clone, Debug, PartialEq, Node)]
130pub struct JumpStatementBreak {
131 pub nodes: (Keyword, Symbol),
132}
133
134#[derive(Clone, Debug, PartialEq, Node)]
135pub struct JumpStatementContinue {
136 pub nodes: (Keyword, Symbol),
137}
138
139#[derive(Clone, Debug, PartialEq, Node)]
140pub enum WaitStatement {
141 Wait(Box<WaitStatementWait>),
142 Fork(Box<WaitStatementFork>),
143 Order(Box<WaitStatementOrder>),
144}
145
146#[derive(Clone, Debug, PartialEq, Node)]
147pub struct WaitStatementWait {
148 pub nodes: (Keyword, Paren<Expression>, StatementOrNull),
149}
150
151#[derive(Clone, Debug, PartialEq, Node)]
152pub struct WaitStatementFork {
153 pub nodes: (Keyword, Keyword, Symbol),
154}
155
156#[derive(Clone, Debug, PartialEq, Node)]
157pub struct WaitStatementOrder {
158 pub nodes: (
159 Keyword,
160 Paren<List<Symbol, HierarchicalIdentifier>>,
161 ActionBlock,
162 ),
163}
164
165#[derive(Clone, Debug, PartialEq, Node)]
166pub enum EventTrigger {
167 Named(Box<EventTriggerNamed>),
168 Nonblocking(Box<EventTriggerNonblocking>),
169}
170
171#[derive(Clone, Debug, PartialEq, Node)]
172pub struct EventTriggerNamed {
173 pub nodes: (Symbol, HierarchicalEventIdentifier, Symbol),
174}
175
176#[derive(Clone, Debug, PartialEq, Node)]
177pub struct EventTriggerNonblocking {
178 pub nodes: (
179 Symbol,
180 Option<DelayOrEventControl>,
181 HierarchicalEventIdentifier,
182 Symbol,
183 ),
184}
185
186#[derive(Clone, Debug, PartialEq, Node)]
187pub enum DisableStatement {
188 Task(Box<DisableStatementTask>),
189 Block(Box<DisableStatementBlock>),
190 Fork(Box<DisableStatementFork>),
191}
192
193#[derive(Clone, Debug, PartialEq, Node)]
194pub struct DisableStatementTask {
195 pub nodes: (Keyword, HierarchicalTaskIdentifier, Symbol),
196}
197
198#[derive(Clone, Debug, PartialEq, Node)]
199pub struct DisableStatementBlock {
200 pub nodes: (Keyword, HierarchicalBlockIdentifier, Symbol),
201}
202
203#[derive(Clone, Debug, PartialEq, Node)]
204pub struct DisableStatementFork {
205 pub nodes: (Keyword, Keyword, Symbol),
206}