scarf_syntax/behavioral_statements/
procedural_blocks_and_assignments.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct InitialConstruct<'a>(
9 pub Metadata<'a>, pub StatementOrNull<'a>,
11);
12
13#[derive(Clone, Debug, PartialEq)]
14pub struct AlwaysConstruct<'a>(pub AlwaysKeyword<'a>, pub Statement<'a>);
15
16#[derive(Clone, Debug, PartialEq)]
17pub enum AlwaysKeyword<'a> {
18 Always(Metadata<'a>),
19 AlwaysComb(Metadata<'a>),
20 AlwaysLatch(Metadata<'a>),
21 AlwaysFf(Metadata<'a>),
22}
23
24#[derive(Clone, Debug, PartialEq)]
25pub struct FinalConstruct<'a>(
26 pub Metadata<'a>, pub FunctionStatement<'a>,
28);
29
30#[derive(Clone, Debug, PartialEq)]
31pub enum ImplicitClassHandleOrClassScopeOrPackageScope<'a> {
32 ImplicitClassHandle(
33 Box<(
34 ImplicitClassHandle<'a>,
35 Metadata<'a>, )>,
37 ),
38 Class(Box<ClassScope<'a>>),
39 Package(Box<PackageScope<'a>>),
40}
41
42#[derive(Clone, Debug, PartialEq)]
43pub enum BlockingAssignment<'a> {
44 Variable(
45 Box<(
46 VariableLvalue<'a>,
47 Metadata<'a>, DelayOrEventControl<'a>,
49 Expression<'a>,
50 )>,
51 ),
52 Dynamic(
53 Box<(
54 NonrangeVariableLvalue<'a>,
55 Metadata<'a>, DynamicArrayNew<'a>,
57 )>,
58 ),
59 Class(
60 Box<(
61 ImplicitClassHandleOrClassScopeOrPackageScope<'a>,
62 HierarchicalVariableIdentifier<'a>,
63 Select<'a>,
64 Metadata<'a>, ClassNew<'a>,
66 )>,
67 ),
68 Operator(Box<OperatorAssignment<'a>>),
69 IncOrDec(Box<IncOrDecExpression<'a>>),
70}
71
72#[derive(Clone, Debug, PartialEq)]
73pub struct OperatorAssignment<'a>(
74 pub VariableLvalue<'a>,
75 pub AssignmentOperator<'a>,
76 pub Expression<'a>,
77);
78
79#[derive(Clone, Debug, PartialEq)]
80pub enum AssignmentOperator<'a> {
81 Eq(Metadata<'a>),
82 PlusEq(Metadata<'a>),
83 MinusEq(Metadata<'a>),
84 StarEq(Metadata<'a>),
85 SlashEq(Metadata<'a>),
86 PercentEq(Metadata<'a>),
87 AmpEq(Metadata<'a>),
88 PipeEq(Metadata<'a>),
89 CaretEq(Metadata<'a>),
90 LtLtEq(Metadata<'a>),
91 GtGtEq(Metadata<'a>),
92 LtLtLtEq(Metadata<'a>),
93 GtGtGtEq(Metadata<'a>),
94}
95
96#[derive(Clone, Debug, PartialEq)]
97pub struct NonblockingAssignment<'a>(
98 pub VariableLvalue<'a>,
99 pub Metadata<'a>, pub Option<DelayOrEventControl<'a>>,
101 pub Expression<'a>,
102);
103
104#[derive(Clone, Debug, PartialEq)]
105pub enum ProceduralContinuousAssignment<'a> {
106 Assign(
107 Box<(
108 Metadata<'a>, VariableAssignment<'a>,
110 )>,
111 ),
112 Deassign(
113 Box<(
114 Metadata<'a>, VariableLvalue<'a>,
116 )>,
117 ),
118 ForceVar(
119 Box<(
120 Metadata<'a>, VariableAssignment<'a>,
122 )>,
123 ),
124 ForceNet(
125 Box<(
126 Metadata<'a>, NetAssignment<'a>,
128 )>,
129 ),
130 ReleaseVar(
131 Box<(
132 Metadata<'a>, VariableLvalue<'a>,
134 )>,
135 ),
136 ReleaseNet(
137 Box<(
138 Metadata<'a>, NetLvalue<'a>,
140 )>,
141 ),
142}
143
144#[derive(Clone, Debug, PartialEq)]
145pub struct VariableAssignment<'a>(
146 pub VariableLvalue<'a>,
147 pub Metadata<'a>, pub Expression<'a>,
149);