sv_parser_syntaxtree/behavioral_statements/
procedural_blocks_and_assignments.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[derive(Clone, Debug, PartialEq, Node)]
6pub struct InitialConstruct {
7    pub nodes: (Keyword, StatementOrNull),
8}
9
10#[derive(Clone, Debug, PartialEq, Node)]
11pub struct AlwaysConstruct {
12    pub nodes: (AlwaysKeyword, Statement),
13}
14
15#[derive(Clone, Debug, PartialEq, Node)]
16pub enum AlwaysKeyword {
17    Always(Box<Keyword>),
18    AlwaysComb(Box<Keyword>),
19    AlwaysLatch(Box<Keyword>),
20    AlwaysFf(Box<Keyword>),
21}
22
23#[derive(Clone, Debug, PartialEq, Node)]
24pub struct FinalConstruct {
25    pub nodes: (Keyword, FunctionStatement),
26}
27
28#[derive(Clone, Debug, PartialEq, Node)]
29pub enum BlockingAssignment {
30    Variable(Box<BlockingAssignmentVariable>),
31    NonrangeVariable(Box<BlockingAssignmentNonrangeVariable>),
32    HierarchicalVariable(Box<BlockingAssignmentHierarchicalVariable>),
33    OperatorAssignment(Box<OperatorAssignment>),
34}
35
36#[derive(Clone, Debug, PartialEq, Node)]
37pub struct BlockingAssignmentVariable {
38    pub nodes: (VariableLvalue, Symbol, DelayOrEventControl, Expression),
39}
40
41#[derive(Clone, Debug, PartialEq, Node)]
42pub struct BlockingAssignmentNonrangeVariable {
43    pub nodes: (NonrangeVariableLvalue, Symbol, DynamicArrayNew),
44}
45
46#[derive(Clone, Debug, PartialEq, Node)]
47pub struct BlockingAssignmentHierarchicalVariable {
48    pub nodes: (
49        Option<ImplicitClassHandleOrClassScopeOrPackageScope>,
50        HierarchicalVariableIdentifier,
51        Select,
52        Symbol,
53        ClassNew,
54    ),
55}
56
57#[derive(Clone, Debug, PartialEq, Node)]
58pub struct OperatorAssignment {
59    pub nodes: (VariableLvalue, AssignmentOperator, Expression),
60}
61
62#[derive(Clone, Debug, PartialEq, Node)]
63pub struct AssignmentOperator {
64    pub nodes: (Symbol,),
65}
66
67#[derive(Clone, Debug, PartialEq, Node)]
68pub struct NonblockingAssignment {
69    pub nodes: (
70        VariableLvalue,
71        Symbol,
72        Option<DelayOrEventControl>,
73        Expression,
74    ),
75}
76
77#[derive(Clone, Debug, PartialEq, Node)]
78pub enum ProceduralContinuousAssignment {
79    Assign(Box<ProceduralContinuousAssignmentAssign>),
80    Deassign(Box<ProceduralContinuousAssignmentDeassign>),
81    ForceVariable(Box<ProceduralContinuousAssignmentForceVariable>),
82    ForceNet(Box<ProceduralContinuousAssignmentForceNet>),
83    ReleaseVariable(Box<ProceduralContinuousAssignmentReleaseVariable>),
84    ReleaseNet(Box<ProceduralContinuousAssignmentReleaseNet>),
85}
86
87#[derive(Clone, Debug, PartialEq, Node)]
88pub struct ProceduralContinuousAssignmentAssign {
89    pub nodes: (Keyword, VariableAssignment),
90}
91
92#[derive(Clone, Debug, PartialEq, Node)]
93pub struct ProceduralContinuousAssignmentDeassign {
94    pub nodes: (Keyword, VariableLvalue),
95}
96
97#[derive(Clone, Debug, PartialEq, Node)]
98pub struct ProceduralContinuousAssignmentForceVariable {
99    pub nodes: (Keyword, VariableAssignment),
100}
101
102#[derive(Clone, Debug, PartialEq, Node)]
103pub struct ProceduralContinuousAssignmentForceNet {
104    pub nodes: (Keyword, NetAssignment),
105}
106
107#[derive(Clone, Debug, PartialEq, Node)]
108pub struct ProceduralContinuousAssignmentReleaseVariable {
109    pub nodes: (Keyword, VariableLvalue),
110}
111
112#[derive(Clone, Debug, PartialEq, Node)]
113pub struct ProceduralContinuousAssignmentReleaseNet {
114    pub nodes: (Keyword, NetLvalue),
115}
116
117#[derive(Clone, Debug, PartialEq, Node)]
118pub struct VariableAssignment {
119    pub nodes: (VariableLvalue, Symbol, Expression),
120}