scarf_syntax/expressions/
subroutine_calls.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ConstantFunctionCall<'a>(pub FunctionSubroutineCall<'a>);
9
10#[derive(Clone, Debug, PartialEq)]
11pub struct TfCall<'a>(
12 pub PsOrHierarchicalTfIdentifier<'a>,
13 pub Vec<AttributeInstance<'a>>,
14 pub Option<(
15 Metadata<'a>, ListOfArguments<'a>,
17 Metadata<'a>, )>,
19);
20
21#[derive(Clone, Debug, PartialEq)]
22pub enum SystemTfCall<'a> {
23 Args(
24 Box<(
25 SystemTfIdentifier<'a>,
26 Option<(
27 Metadata<'a>, ListOfArguments<'a>,
29 Metadata<'a>, )>,
31 )>,
32 ),
33 Data(
34 Box<(
35 SystemTfIdentifier<'a>,
36 Metadata<'a>, DataType<'a>,
38 Option<(
39 Metadata<'a>, Expression<'a>,
41 )>,
42 Metadata<'a>, )>,
44 ),
45 Expressions(
46 Box<(
47 SystemTfIdentifier<'a>,
48 Metadata<'a>, Expression<'a>,
50 Vec<(
51 Metadata<'a>, Option<Expression<'a>>,
53 )>,
54 Option<(
55 Metadata<'a>, Option<ClockingEvent<'a>>,
57 )>,
58 Metadata<'a>, )>,
60 ),
61}
62
63#[derive(Clone, Debug, PartialEq)]
64pub enum SubroutineCall<'a> {
65 Tf(Box<TfCall<'a>>),
66 SystemTf(Box<SystemTfCall<'a>>),
67 Method(Box<MethodCall<'a>>),
68 Randomize(
69 Box<(
70 Option<(
71 Metadata<'a>, Metadata<'a>, )>,
74 RandomizeCall<'a>,
75 )>,
76 ),
77}
78
79#[derive(Clone, Debug, PartialEq)]
80pub struct FunctionSubroutineCall<'a>(pub SubroutineCall<'a>);
81
82#[derive(Clone, Debug, PartialEq)]
83pub enum ListOfArguments<'a> {
84 Expressions(
85 Box<(
86 Option<Expression<'a>>,
87 Vec<(
88 Metadata<'a>, Option<Expression<'a>>,
90 )>,
91 Vec<(
92 Metadata<'a>, Metadata<'a>, Identifier<'a>,
95 Metadata<'a>, Option<Expression<'a>>,
97 Metadata<'a>, )>,
99 )>,
100 ),
101 NoExpressions(
102 Box<(
103 Metadata<'a>, Identifier<'a>,
105 Metadata<'a>, Option<Expression<'a>>,
107 Metadata<'a>, Vec<(
109 Metadata<'a>, Metadata<'a>, Identifier<'a>,
112 Metadata<'a>, Option<Expression<'a>>,
114 Metadata<'a>, )>,
116 )>,
117 ),
118}
119
120#[derive(Clone, Debug, PartialEq)]
121pub struct MethodCall<'a>(
122 pub MethodCallRoot<'a>,
123 pub Metadata<'a>, pub MethodCallBody<'a>,
125);
126
127#[derive(Clone, Debug, PartialEq)]
128pub enum MethodCallBody<'a> {
129 Custom(
130 Box<(
131 MethodIdentifier<'a>,
132 Vec<AttributeInstance<'a>>,
133 Option<(
134 Metadata<'a>, ListOfArguments<'a>,
136 Metadata<'a>, )>,
138 )>,
139 ),
140 BuiltIn(Box<BuiltInMethodCall<'a>>),
141}
142
143#[derive(Clone, Debug, PartialEq)]
144pub enum BuiltInMethodCall<'a> {
145 ArrayManip(Box<ArrayManipulationCall<'a>>),
146 Randomize(Box<RandomizeCall<'a>>),
147}
148
149#[derive(Clone, Debug, PartialEq)]
150pub struct ArrayManipulationCall<'a>(
151 pub ArrayMethodName<'a>,
152 pub Vec<AttributeInstance<'a>>,
153 pub Option<(
154 Metadata<'a>, ListOfArguments<'a>,
156 Metadata<'a>, )>,
158 pub Option<(
159 Metadata<'a>, Metadata<'a>, Expression<'a>,
162 Metadata<'a>, )>,
164);
165
166#[derive(Clone, Debug, PartialEq)]
167pub enum VariableIdentifierListOrNull<'a> {
168 VariableIdentifierList(Box<VariableIdentifierList<'a>>),
169 Null(Box<Metadata<'a>>),
170}
171
172#[derive(Clone, Debug, PartialEq)]
173pub struct RandomizeCall<'a>(
174 pub Metadata<'a>, pub Vec<AttributeInstance<'a>>,
176 pub Option<(
177 Metadata<'a>, Option<VariableIdentifierListOrNull<'a>>,
179 Metadata<'a>, )>,
181 pub Option<(
182 Metadata<'a>, Option<(
184 Metadata<'a>, Option<IdentifierList<'a>>,
186 Metadata<'a>, )>,
188 ConstraintBlock<'a>,
189 )>,
190);
191
192#[derive(Clone, Debug, PartialEq)]
193pub struct VariableIdentifierList<'a>(
194 pub VariableIdentifier<'a>,
195 pub Vec<(
196 Metadata<'a>, VariableIdentifier<'a>,
198 )>,
199);
200
201#[derive(Clone, Debug, PartialEq)]
202pub struct IdentifierList<'a>(
203 pub Identifier<'a>,
204 pub Vec<(
205 Metadata<'a>, Identifier<'a>,
207 )>,
208);
209
210#[derive(Clone, Debug, PartialEq)]
211pub enum MethodCallRoot<'a> {
212 Primary(Box<Primary<'a>>),
213 ImplicitClassHandle(Box<ImplicitClassHandle<'a>>),
214}
215
216#[derive(Clone, Debug, PartialEq)]
217pub enum ArrayMethodName<'a> {
218 Method(Box<MethodIdentifier<'a>>),
219 Unique(Box<Metadata<'a>>),
220 And(Box<Metadata<'a>>),
221 Or(Box<Metadata<'a>>),
222 Xor(Box<Metadata<'a>>),
223}