1use crate::*;
2
3#[derive(Clone, Debug, PartialEq, Node)]
6pub enum ClassItem {
7 Property(Box<ClassItemProperty>),
8 Method(Box<ClassItemMethod>),
9 Constraint(Box<ClassItemConstraint>),
10 Declaration(Box<ClassItemDeclaration>),
11 Covergroup(Box<ClassItemCovergroup>),
12 LocalParameterDeclaration(Box<(LocalParameterDeclaration, Symbol)>),
13 ParameterDeclaration(Box<(ParameterDeclaration, Symbol)>),
14 Empty(Box<Symbol>),
15}
16
17#[derive(Clone, Debug, PartialEq, Node)]
18pub struct ClassItemProperty {
19 pub nodes: (Vec<AttributeInstance>, ClassProperty),
20}
21
22#[derive(Clone, Debug, PartialEq, Node)]
23pub struct ClassItemMethod {
24 pub nodes: (Vec<AttributeInstance>, ClassMethod),
25}
26
27#[derive(Clone, Debug, PartialEq, Node)]
28pub struct ClassItemConstraint {
29 pub nodes: (Vec<AttributeInstance>, ClassConstraint),
30}
31
32#[derive(Clone, Debug, PartialEq, Node)]
33pub struct ClassItemDeclaration {
34 pub nodes: (Vec<AttributeInstance>, ClassDeclaration),
35}
36
37#[derive(Clone, Debug, PartialEq, Node)]
38pub struct ClassItemCovergroup {
39 pub nodes: (Vec<AttributeInstance>, CovergroupDeclaration),
40}
41
42#[derive(Clone, Debug, PartialEq, Node)]
43pub enum ClassProperty {
44 NonConst(Box<ClassPropertyNonConst>),
45 Const(Box<ClassPropertyConst>),
46}
47
48#[derive(Clone, Debug, PartialEq, Node)]
49pub struct ClassPropertyNonConst {
50 pub nodes: (Vec<PropertyQualifier>, DataDeclaration),
51}
52
53#[derive(Clone, Debug, PartialEq, Node)]
54pub struct ClassPropertyConst {
55 pub nodes: (
56 Keyword,
57 Vec<ClassItemQualifier>,
58 DataType,
59 ConstIdentifier,
60 Option<(Symbol, ClassPropertyConstExpression)>,
61 Symbol,
62 ),
63}
64
65#[derive(Clone, Debug, PartialEq, Node)]
66pub enum ClassPropertyConstExpression {
67 ConstantExpression(Box<ConstantExpression>),
68 ClassNew(Box<ClassNew>),
69}
70
71#[derive(Clone, Debug, PartialEq, Node)]
72pub enum ClassMethod {
73 Task(Box<ClassMethodTask>),
74 Function(Box<ClassMethodFunction>),
75 PureVirtual(Box<ClassMethodPureVirtual>),
76 ExternMethod(Box<ClassMethodExternMethod>),
77 Constructor(Box<ClassMethodConstructor>),
78 ExternConstructor(Box<ClassMethodExternConstructor>),
79}
80
81#[derive(Clone, Debug, PartialEq, Node)]
82pub struct ClassMethodTask {
83 pub nodes: (Vec<MethodQualifier>, TaskDeclaration),
84}
85
86#[derive(Clone, Debug, PartialEq, Node)]
87pub struct ClassMethodFunction {
88 pub nodes: (Vec<MethodQualifier>, FunctionDeclaration),
89}
90
91#[derive(Clone, Debug, PartialEq, Node)]
92pub struct ClassMethodPureVirtual {
93 pub nodes: (
94 Keyword,
95 Keyword,
96 Vec<ClassItemQualifier>,
97 MethodPrototype,
98 Symbol,
99 ),
100}
101
102#[derive(Clone, Debug, PartialEq, Node)]
103pub struct ClassMethodExternMethod {
104 pub nodes: (Keyword, Vec<MethodQualifier>, MethodPrototype, Symbol),
105}
106
107#[derive(Clone, Debug, PartialEq, Node)]
108pub struct ClassMethodConstructor {
109 pub nodes: (Vec<MethodQualifier>, ClassConstructorDeclaration),
110}
111
112#[derive(Clone, Debug, PartialEq, Node)]
113pub struct ClassMethodExternConstructor {
114 pub nodes: (Keyword, Vec<MethodQualifier>, ClassConstructorPrototype),
115}
116
117#[derive(Clone, Debug, PartialEq, Node)]
118pub struct ClassConstructorPrototype {
119 pub nodes: (Keyword, Keyword, Option<Paren<Option<TfPortList>>>, Symbol),
120}
121
122#[derive(Clone, Debug, PartialEq, Node)]
123pub enum ClassConstraint {
124 ConstraintPrototype(Box<ConstraintPrototype>),
125 ConstraintDeclaration(Box<ConstraintDeclaration>),
126}
127
128#[derive(Clone, Debug, PartialEq, Node)]
129pub enum ClassItemQualifier {
130 Static(Box<Keyword>),
131 Protected(Box<Keyword>),
132 Local(Box<Keyword>),
133}
134
135#[derive(Clone, Debug, PartialEq, Node)]
136pub enum PropertyQualifier {
137 RandomQualifier(Box<RandomQualifier>),
138 ClassItemQualifier(Box<ClassItemQualifier>),
139}
140
141#[derive(Clone, Debug, PartialEq, Node)]
142pub enum RandomQualifier {
143 Rand(Box<Keyword>),
144 Randc(Box<Keyword>),
145}
146
147#[derive(Clone, Debug, PartialEq, Node)]
148pub enum MethodQualifier {
149 Virtual(Box<Keyword>),
150 PureVirtual(Box<(Keyword, Keyword)>),
151 ClassItemQualifier(Box<ClassItemQualifier>),
152}
153
154#[derive(Clone, Debug, PartialEq, Node)]
155pub enum MethodPrototype {
156 TaskPrototype(Box<TaskPrototype>),
157 FunctionPrototype(Box<FunctionPrototype>),
158}
159
160#[derive(Clone, Debug, PartialEq, Node)]
161pub struct ClassConstructorDeclaration {
162 pub nodes: (
163 Keyword,
164 Option<ClassScope>,
165 Keyword,
166 Option<Paren<Option<TfPortList>>>,
167 Symbol,
168 Vec<BlockItemDeclaration>,
169 Option<(
170 Keyword,
171 Symbol,
172 Keyword,
173 Option<Paren<ListOfArguments>>,
174 Symbol,
175 )>,
176 Vec<FunctionStatementOrNull>,
177 Keyword,
178 Option<(Symbol, New)>,
179 ),
180}
181
182#[derive(Clone, Debug, PartialEq, Node)]
183pub struct New {
184 pub nodes: (Keyword,),
185}