sv_parser_syntaxtree/source_text/
class_items.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[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}