jaclang 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of jaclang might be problematic. Click here for more details.
- jaclang/__init__.py +4 -0
- jaclang/cli/__init__.py +7 -0
- jaclang/cli/cli.jac +46 -0
- jaclang/cli/cmds.jac +14 -0
- jaclang/cli/impl/__init__.py +1 -0
- jaclang/cli/impl/cli_impl.jac +93 -0
- jaclang/cli/impl/cmds_impl.jac +26 -0
- jaclang/core/__init__.py +12 -0
- jaclang/core/impl/__init__.py +1 -0
- jaclang/core/impl/arch_impl.jac +112 -0
- jaclang/core/impl/element_impl.jac +95 -0
- jaclang/core/impl/exec_ctx_impl.jac +17 -0
- jaclang/core/impl/memory_impl.jac +57 -0
- jaclang/core/primitives.jac +104 -0
- jaclang/jac/__init__.py +1 -0
- jaclang/jac/absyntree.py +1787 -0
- jaclang/jac/constant.py +46 -0
- jaclang/jac/importer.py +130 -0
- jaclang/jac/lexer.py +538 -0
- jaclang/jac/parser.py +1474 -0
- jaclang/jac/passes/__init__.py +5 -0
- jaclang/jac/passes/blue/__init__.py +25 -0
- jaclang/jac/passes/blue/ast_build_pass.py +3190 -0
- jaclang/jac/passes/blue/blue_pygen_pass.py +1335 -0
- jaclang/jac/passes/blue/decl_def_match_pass.py +278 -0
- jaclang/jac/passes/blue/import_pass.py +75 -0
- jaclang/jac/passes/blue/sub_node_tab_pass.py +30 -0
- jaclang/jac/passes/blue/tests/__init__.py +1 -0
- jaclang/jac/passes/blue/tests/test_ast_build_pass.py +61 -0
- jaclang/jac/passes/blue/tests/test_blue_pygen_pass.py +117 -0
- jaclang/jac/passes/blue/tests/test_decl_def_match_pass.py +43 -0
- jaclang/jac/passes/blue/tests/test_import_pass.py +18 -0
- jaclang/jac/passes/blue/tests/test_sub_node_pass.py +26 -0
- jaclang/jac/passes/blue/tests/test_type_analyze_pass.py +53 -0
- jaclang/jac/passes/blue/type_analyze_pass.py +731 -0
- jaclang/jac/passes/ir_pass.py +154 -0
- jaclang/jac/passes/purple/__init__.py +17 -0
- jaclang/jac/passes/purple/impl/__init__.py +1 -0
- jaclang/jac/passes/purple/impl/purple_pygen_pass_impl.jac +289 -0
- jaclang/jac/passes/purple/purple_pygen_pass.jac +35 -0
- jaclang/jac/sym_table.py +127 -0
- jaclang/jac/tests/__init__.py +1 -0
- jaclang/jac/tests/fixtures/__init__.py +1 -0
- jaclang/jac/tests/fixtures/activity.py +10 -0
- jaclang/jac/tests/fixtures/fam.jac +68 -0
- jaclang/jac/tests/fixtures/hello_world.jac +5 -0
- jaclang/jac/tests/fixtures/lexer_fam.jac +61 -0
- jaclang/jac/tests/fixtures/stuff.jac +6 -0
- jaclang/jac/tests/test_importer.py +24 -0
- jaclang/jac/tests/test_lexer.py +57 -0
- jaclang/jac/tests/test_parser.py +50 -0
- jaclang/jac/tests/test_utils.py +12 -0
- jaclang/jac/transform.py +63 -0
- jaclang/jac/transpiler.py +69 -0
- jaclang/jac/utils.py +120 -0
- jaclang/utils/__init__.py +1 -0
- jaclang/utils/fstring_parser.py +73 -0
- jaclang/utils/log.py +9 -0
- jaclang/utils/sly/__init__.py +6 -0
- jaclang/utils/sly/docparse.py +62 -0
- jaclang/utils/sly/lex.py +510 -0
- jaclang/utils/sly/yacc.py +2398 -0
- jaclang/utils/test.py +81 -0
- jaclang/utils/tests/__init__.py +1 -0
- jaclang/utils/tests/test_fstring_parser.py +55 -0
- jaclang-0.0.3.dist-info/METADATA +12 -0
- jaclang-0.0.3.dist-info/RECORD +70 -0
- {jaclang-0.0.1.dist-info → jaclang-0.0.3.dist-info}/WHEEL +1 -1
- jaclang-0.0.3.dist-info/entry_points.txt +3 -0
- jaclang-0.0.3.dist-info/top_level.txt +1 -0
- jaclang-0.0.1.dist-info/METADATA +0 -7
- jaclang-0.0.1.dist-info/RECORD +0 -4
- jaclang-0.0.1.dist-info/top_level.txt +0 -1
jaclang/jac/absyntree.py
ADDED
|
@@ -0,0 +1,1787 @@
|
|
|
1
|
+
"""Abstract class for IR Passes for Jac."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import pprint
|
|
5
|
+
from typing import Optional, Union
|
|
6
|
+
|
|
7
|
+
from jaclang.jac.constant import EdgeDir
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class AstNode:
|
|
11
|
+
"""Abstract syntax tree node for Jac."""
|
|
12
|
+
|
|
13
|
+
def __init__(
|
|
14
|
+
self,
|
|
15
|
+
parent: Optional["AstNode"],
|
|
16
|
+
mod_link: Optional[Module],
|
|
17
|
+
kid: list,
|
|
18
|
+
line: int,
|
|
19
|
+
) -> None:
|
|
20
|
+
"""Initialize ast."""
|
|
21
|
+
self.parent = parent
|
|
22
|
+
self.kid = kid if kid else []
|
|
23
|
+
self.mod_link = mod_link
|
|
24
|
+
self.line = line
|
|
25
|
+
self._sub_node_tab: dict[type[AstNode], list[AstNode]] = {}
|
|
26
|
+
self._typ: type = type(None)
|
|
27
|
+
self.meta: dict = {}
|
|
28
|
+
|
|
29
|
+
def to_dict(self) -> dict:
|
|
30
|
+
"""Return dict representation of node."""
|
|
31
|
+
ret = {
|
|
32
|
+
"node": str(type(self).__name__),
|
|
33
|
+
"kid": [x.to_dict() for x in self.kid if x],
|
|
34
|
+
"line": self.line,
|
|
35
|
+
}
|
|
36
|
+
if isinstance(self, Token):
|
|
37
|
+
ret["name"] = self.name
|
|
38
|
+
ret["value"] = self.value
|
|
39
|
+
return ret
|
|
40
|
+
|
|
41
|
+
def print(self, depth: Optional[int] = None) -> None:
|
|
42
|
+
"""Print ast."""
|
|
43
|
+
pprint.PrettyPrinter(depth=depth).pprint(self.to_dict())
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# Utiliiy functions
|
|
47
|
+
# -----------------
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def replace_node(node: AstNode, new_node: Optional[AstNode]) -> AstNode | None:
|
|
51
|
+
"""Replace node with new_node."""
|
|
52
|
+
if node.parent:
|
|
53
|
+
node.parent.kid[node.parent.kid.index(node)] = new_node
|
|
54
|
+
if new_node:
|
|
55
|
+
new_node.parent = node.parent
|
|
56
|
+
for i in new_node.kid:
|
|
57
|
+
if i:
|
|
58
|
+
i.parent = new_node
|
|
59
|
+
return new_node
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def append_node(node: AstNode, new_node: Optional[AstNode]) -> AstNode | None:
|
|
63
|
+
"""Replace node with new_node."""
|
|
64
|
+
node.kid.append(new_node)
|
|
65
|
+
if new_node:
|
|
66
|
+
new_node.parent = node
|
|
67
|
+
return new_node
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# AST Parse Level Node Types
|
|
71
|
+
# --------------------------
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class Parse(AstNode):
|
|
75
|
+
"""Parse node type for Jac Ast."""
|
|
76
|
+
|
|
77
|
+
def __init__(
|
|
78
|
+
self,
|
|
79
|
+
name: str,
|
|
80
|
+
parent: Optional[AstNode],
|
|
81
|
+
mod_link: Optional[Module],
|
|
82
|
+
kid: list[AstNode],
|
|
83
|
+
line: int,
|
|
84
|
+
) -> None:
|
|
85
|
+
"""Initialize parse."""
|
|
86
|
+
self.name = name
|
|
87
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class Token(AstNode):
|
|
91
|
+
"""Token node type for Jac Ast."""
|
|
92
|
+
|
|
93
|
+
def __init__(
|
|
94
|
+
self,
|
|
95
|
+
name: str,
|
|
96
|
+
value: str,
|
|
97
|
+
col_start: int,
|
|
98
|
+
col_end: int,
|
|
99
|
+
parent: Optional[AstNode],
|
|
100
|
+
mod_link: Optional[Module],
|
|
101
|
+
kid: list[AstNode],
|
|
102
|
+
line: int,
|
|
103
|
+
) -> None:
|
|
104
|
+
"""Initialize token."""
|
|
105
|
+
self.name = name
|
|
106
|
+
self.value = value
|
|
107
|
+
self.col_start = col_start
|
|
108
|
+
self.col_end = col_end
|
|
109
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class Name(Token):
|
|
113
|
+
"""Name node type for Jac Ast."""
|
|
114
|
+
|
|
115
|
+
def __init__(
|
|
116
|
+
self,
|
|
117
|
+
name: str,
|
|
118
|
+
value: str,
|
|
119
|
+
col_start: int,
|
|
120
|
+
col_end: int,
|
|
121
|
+
already_declared: bool,
|
|
122
|
+
parent: Optional[AstNode],
|
|
123
|
+
mod_link: Optional[Module],
|
|
124
|
+
kid: list[AstNode],
|
|
125
|
+
line: int,
|
|
126
|
+
) -> None:
|
|
127
|
+
"""Initialize name."""
|
|
128
|
+
self.already_declared = already_declared
|
|
129
|
+
super().__init__(
|
|
130
|
+
name=name,
|
|
131
|
+
value=value,
|
|
132
|
+
col_start=col_start,
|
|
133
|
+
col_end=col_end,
|
|
134
|
+
parent=parent,
|
|
135
|
+
mod_link=mod_link,
|
|
136
|
+
kid=kid,
|
|
137
|
+
line=line,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class Constant(Token):
|
|
142
|
+
"""Constant node type for Jac Ast."""
|
|
143
|
+
|
|
144
|
+
def __init__(
|
|
145
|
+
self,
|
|
146
|
+
name: str,
|
|
147
|
+
value: str,
|
|
148
|
+
col_start: int,
|
|
149
|
+
col_end: int,
|
|
150
|
+
typ: type,
|
|
151
|
+
parent: Optional[AstNode],
|
|
152
|
+
mod_link: Optional[Module],
|
|
153
|
+
kid: list[AstNode],
|
|
154
|
+
line: int,
|
|
155
|
+
) -> None:
|
|
156
|
+
"""Initialize constant."""
|
|
157
|
+
super().__init__(
|
|
158
|
+
name=name,
|
|
159
|
+
value=value,
|
|
160
|
+
col_start=col_start,
|
|
161
|
+
col_end=col_end,
|
|
162
|
+
parent=parent,
|
|
163
|
+
mod_link=mod_link,
|
|
164
|
+
kid=kid,
|
|
165
|
+
line=line,
|
|
166
|
+
)
|
|
167
|
+
self._typ = typ
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
# AST Mid Level Node Types
|
|
171
|
+
# --------------------------
|
|
172
|
+
class Module(AstNode):
|
|
173
|
+
"""Whole Program node type for Jac Ast."""
|
|
174
|
+
|
|
175
|
+
def __init__(
|
|
176
|
+
self,
|
|
177
|
+
name: str,
|
|
178
|
+
doc: Token,
|
|
179
|
+
body: Optional["Elements"],
|
|
180
|
+
mod_path: str,
|
|
181
|
+
rel_mod_path: str,
|
|
182
|
+
is_imported: bool,
|
|
183
|
+
parent: Optional[AstNode],
|
|
184
|
+
mod_link: Optional[Module],
|
|
185
|
+
kid: list[AstNode],
|
|
186
|
+
line: int,
|
|
187
|
+
) -> None:
|
|
188
|
+
"""Initialize whole program node."""
|
|
189
|
+
self.name = name
|
|
190
|
+
self.doc = doc
|
|
191
|
+
self.body = body
|
|
192
|
+
self.mod_path = mod_path
|
|
193
|
+
self.rel_mod_path = rel_mod_path
|
|
194
|
+
self.is_imported = is_imported
|
|
195
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
class Elements(AstNode):
|
|
199
|
+
"""Elements node type for Jac Ast."""
|
|
200
|
+
|
|
201
|
+
def __init__(
|
|
202
|
+
self,
|
|
203
|
+
elements: list["GlobalVars|Test|ModuleCode|Import|Architype|Ability"],
|
|
204
|
+
parent: Optional[AstNode],
|
|
205
|
+
mod_link: Optional[Module],
|
|
206
|
+
kid: list[AstNode],
|
|
207
|
+
line: int,
|
|
208
|
+
) -> None:
|
|
209
|
+
"""Initialize elements node."""
|
|
210
|
+
self.elements = elements
|
|
211
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class OOPAccessNode(AstNode):
|
|
215
|
+
"""OOPAccessNode node type for Jac Ast."""
|
|
216
|
+
|
|
217
|
+
def __init__(
|
|
218
|
+
self,
|
|
219
|
+
access: Optional[Token],
|
|
220
|
+
parent: Optional[AstNode],
|
|
221
|
+
mod_link: Optional[Module],
|
|
222
|
+
kid: list[AstNode],
|
|
223
|
+
line: int,
|
|
224
|
+
) -> None:
|
|
225
|
+
"""Initialize OOPAccessible node."""
|
|
226
|
+
self.access = access
|
|
227
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
class GlobalVars(OOPAccessNode):
|
|
231
|
+
"""GlobalVars node type for Jac Ast."""
|
|
232
|
+
|
|
233
|
+
def __init__(
|
|
234
|
+
self,
|
|
235
|
+
doc: Optional["Token"],
|
|
236
|
+
access: Optional[Token],
|
|
237
|
+
assignments: "AssignmentList",
|
|
238
|
+
is_frozen: bool,
|
|
239
|
+
parent: Optional[AstNode],
|
|
240
|
+
mod_link: Optional[Module],
|
|
241
|
+
kid: list[AstNode],
|
|
242
|
+
line: int,
|
|
243
|
+
) -> None:
|
|
244
|
+
"""Initialize global var node."""
|
|
245
|
+
self.doc = doc
|
|
246
|
+
self.assignments = assignments
|
|
247
|
+
self.is_frozen = is_frozen
|
|
248
|
+
super().__init__(
|
|
249
|
+
access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
class Test(AstNode):
|
|
254
|
+
"""Test node type for Jac Ast."""
|
|
255
|
+
|
|
256
|
+
def __init__(
|
|
257
|
+
self,
|
|
258
|
+
name: Name,
|
|
259
|
+
doc: Optional["Token"],
|
|
260
|
+
description: Token,
|
|
261
|
+
body: "CodeBlock",
|
|
262
|
+
parent: Optional[AstNode],
|
|
263
|
+
mod_link: Optional[Module],
|
|
264
|
+
kid: list[AstNode],
|
|
265
|
+
line: int,
|
|
266
|
+
) -> None:
|
|
267
|
+
"""Initialize test node."""
|
|
268
|
+
self.doc = doc
|
|
269
|
+
self.name = name
|
|
270
|
+
self.description = description
|
|
271
|
+
self.body = body
|
|
272
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
class ModuleCode(AstNode):
|
|
276
|
+
"""Free mod code for Jac Ast."""
|
|
277
|
+
|
|
278
|
+
def __init__(
|
|
279
|
+
self,
|
|
280
|
+
doc: Optional["Token"],
|
|
281
|
+
body: "CodeBlock",
|
|
282
|
+
parent: Optional[AstNode],
|
|
283
|
+
mod_link: Optional[Module],
|
|
284
|
+
kid: list[AstNode],
|
|
285
|
+
line: int,
|
|
286
|
+
) -> None:
|
|
287
|
+
"""Initialize test node."""
|
|
288
|
+
self.doc = doc
|
|
289
|
+
self.body = body
|
|
290
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
class Import(AstNode):
|
|
294
|
+
"""Import node type for Jac Ast."""
|
|
295
|
+
|
|
296
|
+
def __init__(
|
|
297
|
+
self,
|
|
298
|
+
lang: Name,
|
|
299
|
+
path: "ModulePath",
|
|
300
|
+
alias: Optional[Name],
|
|
301
|
+
items: Optional["ModuleItems"],
|
|
302
|
+
is_absorb: bool, # For includes
|
|
303
|
+
parent: Optional[AstNode],
|
|
304
|
+
mod_link: Optional[Module],
|
|
305
|
+
kid: list[AstNode],
|
|
306
|
+
line: int,
|
|
307
|
+
sub_module: Optional["Module"] = None,
|
|
308
|
+
) -> None:
|
|
309
|
+
"""Initialize import node."""
|
|
310
|
+
self.lang = lang
|
|
311
|
+
self.path = path
|
|
312
|
+
self.alias = alias
|
|
313
|
+
self.items = items
|
|
314
|
+
self.is_absorb = is_absorb
|
|
315
|
+
self.sub_module = sub_module
|
|
316
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
class ModulePath(AstNode):
|
|
320
|
+
"""ModulePath node type for Jac Ast."""
|
|
321
|
+
|
|
322
|
+
def __init__(
|
|
323
|
+
self,
|
|
324
|
+
path: list[Token],
|
|
325
|
+
parent: Optional[AstNode],
|
|
326
|
+
mod_link: Optional[Module],
|
|
327
|
+
kid: list[AstNode],
|
|
328
|
+
line: int,
|
|
329
|
+
) -> None:
|
|
330
|
+
"""Initialize module path node."""
|
|
331
|
+
self.path = path
|
|
332
|
+
self.path_str = ".".join([p.value for p in path])
|
|
333
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
class ModuleItems(AstNode):
|
|
337
|
+
"""ModuleItems node type for Jac Ast."""
|
|
338
|
+
|
|
339
|
+
def __init__(
|
|
340
|
+
self,
|
|
341
|
+
items: list["ModuleItem"],
|
|
342
|
+
parent: Optional[AstNode],
|
|
343
|
+
mod_link: Optional[Module],
|
|
344
|
+
kid: list["ModuleItem"],
|
|
345
|
+
line: int,
|
|
346
|
+
) -> None:
|
|
347
|
+
"""Initialize module items node."""
|
|
348
|
+
self.items = items
|
|
349
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
class ModuleItem(AstNode):
|
|
353
|
+
"""ModuleItem node type for Jac Ast."""
|
|
354
|
+
|
|
355
|
+
def __init__(
|
|
356
|
+
self,
|
|
357
|
+
name: Name,
|
|
358
|
+
alias: Optional[Token],
|
|
359
|
+
parent: Optional[AstNode],
|
|
360
|
+
mod_link: Optional[Module],
|
|
361
|
+
kid: list[AstNode],
|
|
362
|
+
line: int,
|
|
363
|
+
body: Optional[AstNode] = None,
|
|
364
|
+
) -> None:
|
|
365
|
+
"""Initialize module item node."""
|
|
366
|
+
self.name = name
|
|
367
|
+
self.alias = alias
|
|
368
|
+
self.body = body
|
|
369
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
class Architype(OOPAccessNode):
|
|
373
|
+
"""ObjectArch node type for Jac Ast."""
|
|
374
|
+
|
|
375
|
+
def __init__(
|
|
376
|
+
self,
|
|
377
|
+
name: Name,
|
|
378
|
+
arch_type: Token,
|
|
379
|
+
doc: Optional[Token],
|
|
380
|
+
decorators: Optional[Decorators],
|
|
381
|
+
access: Optional[Token],
|
|
382
|
+
base_classes: BaseClasses,
|
|
383
|
+
body: Optional[ArchBlock],
|
|
384
|
+
parent: Optional[AstNode],
|
|
385
|
+
mod_link: Optional[Module],
|
|
386
|
+
kid: list[AstNode],
|
|
387
|
+
line: int,
|
|
388
|
+
) -> None:
|
|
389
|
+
"""Initialize object arch node."""
|
|
390
|
+
self.name = name
|
|
391
|
+
self.arch_type = arch_type
|
|
392
|
+
self.doc = doc
|
|
393
|
+
self.decorators = decorators
|
|
394
|
+
self.base_classes = base_classes
|
|
395
|
+
self.body = body
|
|
396
|
+
super().__init__(
|
|
397
|
+
access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
class ArchDef(AstNode):
|
|
402
|
+
"""ArchDef node type for Jac Ast."""
|
|
403
|
+
|
|
404
|
+
def __init__(
|
|
405
|
+
self,
|
|
406
|
+
doc: Optional[Token],
|
|
407
|
+
mod: Optional["NameList"],
|
|
408
|
+
arch: "ArchRef",
|
|
409
|
+
body: "ArchBlock",
|
|
410
|
+
parent: Optional[AstNode],
|
|
411
|
+
mod_link: Optional[Module],
|
|
412
|
+
kid: list[AstNode],
|
|
413
|
+
line: int,
|
|
414
|
+
) -> None:
|
|
415
|
+
"""Initialize arch def node."""
|
|
416
|
+
self.doc = doc
|
|
417
|
+
self.mod = mod
|
|
418
|
+
self.arch = arch
|
|
419
|
+
self.body = body
|
|
420
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
class Decorators(AstNode):
|
|
424
|
+
"""Decorators node type for Jac Ast."""
|
|
425
|
+
|
|
426
|
+
def __init__(
|
|
427
|
+
self,
|
|
428
|
+
calls: list["ExprType"],
|
|
429
|
+
parent: Optional[AstNode],
|
|
430
|
+
mod_link: Optional[Module],
|
|
431
|
+
kid: list[AstNode],
|
|
432
|
+
line: int,
|
|
433
|
+
) -> None:
|
|
434
|
+
"""Initialize decorators node."""
|
|
435
|
+
self.calls = calls
|
|
436
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
class BaseClasses(AstNode):
|
|
440
|
+
"""BaseArch node type for Jac Ast."""
|
|
441
|
+
|
|
442
|
+
def __init__(
|
|
443
|
+
self,
|
|
444
|
+
base_classes: list["NameList"],
|
|
445
|
+
parent: Optional[AstNode],
|
|
446
|
+
mod_link: Optional[Module],
|
|
447
|
+
kid: list[AstNode],
|
|
448
|
+
line: int,
|
|
449
|
+
) -> None:
|
|
450
|
+
"""Initialize base classes node."""
|
|
451
|
+
self.base_classes = base_classes
|
|
452
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
class Ability(OOPAccessNode):
|
|
456
|
+
"""Ability node type for Jac Ast."""
|
|
457
|
+
|
|
458
|
+
def __init__(
|
|
459
|
+
self,
|
|
460
|
+
name: Name,
|
|
461
|
+
is_func: bool,
|
|
462
|
+
is_async: bool,
|
|
463
|
+
is_static: bool,
|
|
464
|
+
doc: Optional[Token],
|
|
465
|
+
decorators: Optional["Decorators"],
|
|
466
|
+
access: Optional[Token],
|
|
467
|
+
signature: Optional["FuncSignature | TypeSpec | EventSignature"],
|
|
468
|
+
body: Optional["CodeBlock"],
|
|
469
|
+
parent: Optional[AstNode],
|
|
470
|
+
mod_link: Optional[Module],
|
|
471
|
+
kid: list[AstNode],
|
|
472
|
+
line: int,
|
|
473
|
+
arch_attached: Optional["ArchBlock"] = None,
|
|
474
|
+
) -> None:
|
|
475
|
+
"""Initialize func arch node."""
|
|
476
|
+
self.name = name
|
|
477
|
+
self.is_func = is_func
|
|
478
|
+
self.is_async = is_async
|
|
479
|
+
self.is_static = is_static
|
|
480
|
+
self.doc = doc
|
|
481
|
+
self.decorators = decorators
|
|
482
|
+
self.signature = signature
|
|
483
|
+
self.body = body
|
|
484
|
+
self.arch_attached = arch_attached
|
|
485
|
+
super().__init__(
|
|
486
|
+
access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
|
|
487
|
+
)
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
class AbilityDef(AstNode):
|
|
491
|
+
"""AbilityDef node type for Jac Ast."""
|
|
492
|
+
|
|
493
|
+
def __init__(
|
|
494
|
+
self,
|
|
495
|
+
doc: Optional[Token],
|
|
496
|
+
target: Optional["NameList"],
|
|
497
|
+
ability: "ArchRef",
|
|
498
|
+
signature: "FuncSignature | EventSignature",
|
|
499
|
+
body: "CodeBlock",
|
|
500
|
+
parent: Optional[AstNode],
|
|
501
|
+
mod_link: Optional[Module],
|
|
502
|
+
kid: list[AstNode],
|
|
503
|
+
line: int,
|
|
504
|
+
) -> None:
|
|
505
|
+
"""Initialize ability def node."""
|
|
506
|
+
self.doc = doc
|
|
507
|
+
self.target = target
|
|
508
|
+
self.ability = ability
|
|
509
|
+
self.signature = signature
|
|
510
|
+
self.body = body
|
|
511
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
class EventSignature(AstNode):
|
|
515
|
+
"""EventSignature node type for Jac Ast."""
|
|
516
|
+
|
|
517
|
+
def __init__(
|
|
518
|
+
self,
|
|
519
|
+
event: Token,
|
|
520
|
+
arch_tag_info: Optional[TypeSpecList],
|
|
521
|
+
return_type: Optional["TypeSpec"],
|
|
522
|
+
parent: Optional[AstNode],
|
|
523
|
+
mod_link: Optional[Module],
|
|
524
|
+
kid: list[AstNode],
|
|
525
|
+
line: int,
|
|
526
|
+
) -> None:
|
|
527
|
+
"""Initialize event signature node."""
|
|
528
|
+
self.event = event
|
|
529
|
+
self.arch_tag_info = arch_tag_info
|
|
530
|
+
self.return_type = return_type
|
|
531
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
class NameList(AstNode):
|
|
535
|
+
"""NameList node type for Jac Ast."""
|
|
536
|
+
|
|
537
|
+
def __init__(
|
|
538
|
+
self,
|
|
539
|
+
names: list["Token|SpecialVarRef|ArchRef|Name"],
|
|
540
|
+
parent: Optional[AstNode],
|
|
541
|
+
mod_link: Optional[Module],
|
|
542
|
+
kid: list[AstNode],
|
|
543
|
+
line: int,
|
|
544
|
+
) -> None:
|
|
545
|
+
"""Initialize name list node."""
|
|
546
|
+
self.names = names
|
|
547
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
class FuncSignature(AstNode):
|
|
551
|
+
"""FuncSignature node type for Jac Ast."""
|
|
552
|
+
|
|
553
|
+
def __init__(
|
|
554
|
+
self,
|
|
555
|
+
params: Optional["FuncParams"],
|
|
556
|
+
return_type: Optional["TypeSpec"],
|
|
557
|
+
parent: Optional[AstNode],
|
|
558
|
+
mod_link: Optional[Module],
|
|
559
|
+
kid: list[AstNode],
|
|
560
|
+
line: int,
|
|
561
|
+
) -> None:
|
|
562
|
+
"""Initialize method signature node."""
|
|
563
|
+
self.params = params
|
|
564
|
+
self.return_type = return_type
|
|
565
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
class FuncParams(AstNode):
|
|
569
|
+
"""ArchBlock node type for Jac Ast."""
|
|
570
|
+
|
|
571
|
+
def __init__(
|
|
572
|
+
self,
|
|
573
|
+
params: list["ParamVar"],
|
|
574
|
+
parent: Optional[AstNode],
|
|
575
|
+
mod_link: Optional[Module],
|
|
576
|
+
kid: list[AstNode],
|
|
577
|
+
line: int,
|
|
578
|
+
) -> None:
|
|
579
|
+
"""Initialize method params node."""
|
|
580
|
+
self.params = params
|
|
581
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
class ParamVar(AstNode):
|
|
585
|
+
"""ParamVar node type for Jac Ast."""
|
|
586
|
+
|
|
587
|
+
def __init__(
|
|
588
|
+
self,
|
|
589
|
+
name: Name,
|
|
590
|
+
unpack: Optional[Token],
|
|
591
|
+
type_tag: "TypeSpec",
|
|
592
|
+
value: Optional["ExprType"],
|
|
593
|
+
parent: Optional[AstNode],
|
|
594
|
+
mod_link: Optional[Module],
|
|
595
|
+
kid: list[AstNode],
|
|
596
|
+
line: int,
|
|
597
|
+
) -> None:
|
|
598
|
+
"""Initialize param var node."""
|
|
599
|
+
self.name = name
|
|
600
|
+
self.unpack = unpack
|
|
601
|
+
self.type_tag = type_tag
|
|
602
|
+
self.value = value
|
|
603
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
class Enum(OOPAccessNode):
|
|
607
|
+
"""Enum node type for Jac Ast."""
|
|
608
|
+
|
|
609
|
+
def __init__(
|
|
610
|
+
self,
|
|
611
|
+
name: Name,
|
|
612
|
+
doc: Optional[Token],
|
|
613
|
+
decorators: Optional["Decorators"],
|
|
614
|
+
access: Optional[Token],
|
|
615
|
+
base_classes: "BaseClasses",
|
|
616
|
+
body: Optional["EnumBlock"],
|
|
617
|
+
parent: Optional[AstNode],
|
|
618
|
+
mod_link: Optional[Module],
|
|
619
|
+
kid: list[AstNode],
|
|
620
|
+
line: int,
|
|
621
|
+
) -> None:
|
|
622
|
+
"""Initialize object arch node."""
|
|
623
|
+
self.name = name
|
|
624
|
+
self.doc = doc
|
|
625
|
+
self.decorators = decorators
|
|
626
|
+
self.base_classes = base_classes
|
|
627
|
+
self.body = body
|
|
628
|
+
super().__init__(
|
|
629
|
+
access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
|
|
630
|
+
)
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
class EnumDef(AstNode):
|
|
634
|
+
"""EnumDef node type for Jac Ast."""
|
|
635
|
+
|
|
636
|
+
def __init__(
|
|
637
|
+
self,
|
|
638
|
+
doc: Optional[Token],
|
|
639
|
+
enum: "ArchRef",
|
|
640
|
+
mod: Optional["NameList"],
|
|
641
|
+
body: "EnumBlock",
|
|
642
|
+
parent: Optional[AstNode],
|
|
643
|
+
mod_link: Optional[Module],
|
|
644
|
+
kid: list[AstNode],
|
|
645
|
+
line: int,
|
|
646
|
+
) -> None:
|
|
647
|
+
"""Initialize arch def node."""
|
|
648
|
+
self.enum = enum
|
|
649
|
+
self.doc = doc
|
|
650
|
+
self.mod = mod
|
|
651
|
+
self.body = body
|
|
652
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
class EnumBlock(AstNode):
|
|
656
|
+
"""EnumBlock node type for Jac Ast."""
|
|
657
|
+
|
|
658
|
+
def __init__(
|
|
659
|
+
self,
|
|
660
|
+
stmts: list["Name|Assignment"],
|
|
661
|
+
parent: Optional[AstNode],
|
|
662
|
+
mod_link: Optional[Module],
|
|
663
|
+
kid: list[AstNode],
|
|
664
|
+
line: int,
|
|
665
|
+
) -> None:
|
|
666
|
+
"""Initialize enum block node."""
|
|
667
|
+
self.stmts = stmts
|
|
668
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
class ArchBlock(AstNode):
|
|
672
|
+
"""ArchBlock node type for Jac Ast."""
|
|
673
|
+
|
|
674
|
+
def __init__(
|
|
675
|
+
self,
|
|
676
|
+
members: list["ArchHas | Ability"],
|
|
677
|
+
parent: Optional[AstNode],
|
|
678
|
+
mod_link: Optional[Module],
|
|
679
|
+
kid: list[AstNode],
|
|
680
|
+
line: int,
|
|
681
|
+
) -> None:
|
|
682
|
+
"""Initialize arch block node."""
|
|
683
|
+
self.members = members
|
|
684
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
685
|
+
|
|
686
|
+
|
|
687
|
+
class ArchHas(OOPAccessNode):
|
|
688
|
+
"""HasStmt node type for Jac Ast."""
|
|
689
|
+
|
|
690
|
+
counter: int = 1
|
|
691
|
+
|
|
692
|
+
def __init__(
|
|
693
|
+
self,
|
|
694
|
+
doc: Optional[Token],
|
|
695
|
+
is_static: bool,
|
|
696
|
+
access: Optional[Token],
|
|
697
|
+
vars: "HasVarList",
|
|
698
|
+
is_frozen: bool,
|
|
699
|
+
parent: Optional[AstNode],
|
|
700
|
+
mod_link: Optional[Module],
|
|
701
|
+
kid: list[AstNode],
|
|
702
|
+
line: int,
|
|
703
|
+
) -> None:
|
|
704
|
+
"""Initialize has statement node."""
|
|
705
|
+
self.doc = doc
|
|
706
|
+
self.is_static = is_static
|
|
707
|
+
self.vars = vars
|
|
708
|
+
self.is_frozen = is_frozen
|
|
709
|
+
self.h_id = ArchHas.counter
|
|
710
|
+
ArchHas.counter += 1
|
|
711
|
+
super().__init__(
|
|
712
|
+
access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
|
|
713
|
+
)
|
|
714
|
+
|
|
715
|
+
|
|
716
|
+
class HasVarList(AstNode):
|
|
717
|
+
"""HasVarList node type for Jac Ast."""
|
|
718
|
+
|
|
719
|
+
def __init__(
|
|
720
|
+
self,
|
|
721
|
+
vars: list["HasVar"],
|
|
722
|
+
parent: Optional[AstNode],
|
|
723
|
+
mod_link: Optional[Module],
|
|
724
|
+
kid: list[AstNode],
|
|
725
|
+
line: int,
|
|
726
|
+
) -> None:
|
|
727
|
+
"""Initialize has var list node."""
|
|
728
|
+
self.vars = vars
|
|
729
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
class HasVar(AstNode):
|
|
733
|
+
"""HasVar node type for Jac Ast."""
|
|
734
|
+
|
|
735
|
+
def __init__(
|
|
736
|
+
self,
|
|
737
|
+
name: Name,
|
|
738
|
+
type_tag: "TypeSpec",
|
|
739
|
+
value: Optional["ExprType"],
|
|
740
|
+
parent: Optional[AstNode],
|
|
741
|
+
mod_link: Optional[Module],
|
|
742
|
+
kid: list[AstNode],
|
|
743
|
+
line: int,
|
|
744
|
+
) -> None:
|
|
745
|
+
"""Initialize has var node."""
|
|
746
|
+
self.name = name
|
|
747
|
+
self.type_tag = type_tag
|
|
748
|
+
self.value = value
|
|
749
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
class TypeSpecList(AstNode):
|
|
753
|
+
"""TypeSpecList node type for Jac Ast."""
|
|
754
|
+
|
|
755
|
+
def __init__(
|
|
756
|
+
self,
|
|
757
|
+
types: list[TypeSpec],
|
|
758
|
+
parent: Optional[AstNode],
|
|
759
|
+
mod_link: Optional[Module],
|
|
760
|
+
kid: list[AstNode],
|
|
761
|
+
line: int,
|
|
762
|
+
) -> None:
|
|
763
|
+
"""Initialize type list node."""
|
|
764
|
+
self.types = types
|
|
765
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
class TypeSpec(AstNode):
|
|
769
|
+
"""TypeSpec node type for Jac Ast."""
|
|
770
|
+
|
|
771
|
+
def __init__(
|
|
772
|
+
self,
|
|
773
|
+
spec_type: Token | NameList,
|
|
774
|
+
list_nest: TypeSpec, # needed for lists
|
|
775
|
+
dict_nest: TypeSpec, # needed for dicts, uses list_nest as key
|
|
776
|
+
null_ok: bool,
|
|
777
|
+
parent: Optional[AstNode],
|
|
778
|
+
mod_link: Optional[Module],
|
|
779
|
+
kid: list[AstNode],
|
|
780
|
+
line: int,
|
|
781
|
+
) -> None:
|
|
782
|
+
"""Initialize type spec node."""
|
|
783
|
+
self.spec_type = spec_type
|
|
784
|
+
self.list_nest = list_nest
|
|
785
|
+
self.dict_nest = dict_nest
|
|
786
|
+
self.null_ok = null_ok
|
|
787
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
788
|
+
|
|
789
|
+
|
|
790
|
+
class CodeBlock(AstNode):
|
|
791
|
+
"""CodeBlock node type for Jac Ast."""
|
|
792
|
+
|
|
793
|
+
def __init__(
|
|
794
|
+
self,
|
|
795
|
+
stmts: list[StmtType],
|
|
796
|
+
parent: Optional[AstNode],
|
|
797
|
+
mod_link: Optional[Module],
|
|
798
|
+
kid: list[AstNode],
|
|
799
|
+
line: int,
|
|
800
|
+
) -> None:
|
|
801
|
+
"""Initialize code block node."""
|
|
802
|
+
self.stmts = stmts
|
|
803
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
class TypedCtxBlock(AstNode):
|
|
807
|
+
"""TypedCtxBlock node type for Jac Ast."""
|
|
808
|
+
|
|
809
|
+
def __init__(
|
|
810
|
+
self,
|
|
811
|
+
type_ctx: TypeSpecList,
|
|
812
|
+
body: CodeBlock,
|
|
813
|
+
parent: Optional[AstNode],
|
|
814
|
+
mod_link: Optional[Module],
|
|
815
|
+
kid: list[AstNode],
|
|
816
|
+
line: int,
|
|
817
|
+
) -> None:
|
|
818
|
+
"""Initialize typed context block node."""
|
|
819
|
+
self.type_ctx = type_ctx
|
|
820
|
+
self.body = body
|
|
821
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
class IfStmt(AstNode):
|
|
825
|
+
"""IfStmt node type for Jac Ast."""
|
|
826
|
+
|
|
827
|
+
def __init__(
|
|
828
|
+
self,
|
|
829
|
+
condition: "ExprType",
|
|
830
|
+
body: "CodeBlock",
|
|
831
|
+
elseifs: Optional["ElseIfs"],
|
|
832
|
+
else_body: Optional["ElseStmt"],
|
|
833
|
+
parent: Optional[AstNode],
|
|
834
|
+
mod_link: Optional[Module],
|
|
835
|
+
kid: list[AstNode],
|
|
836
|
+
line: int,
|
|
837
|
+
) -> None:
|
|
838
|
+
"""Initialize if statement node."""
|
|
839
|
+
self.condition = condition
|
|
840
|
+
self.body = body
|
|
841
|
+
self.elseifs = elseifs
|
|
842
|
+
self.else_body = else_body
|
|
843
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
class ElseIfs(AstNode):
|
|
847
|
+
"""ElseIfs node type for Jac Ast."""
|
|
848
|
+
|
|
849
|
+
def __init__(
|
|
850
|
+
self,
|
|
851
|
+
elseifs: list["IfStmt"],
|
|
852
|
+
parent: Optional[AstNode],
|
|
853
|
+
mod_link: Optional[Module],
|
|
854
|
+
kid: list["IfStmt"],
|
|
855
|
+
line: int,
|
|
856
|
+
) -> None:
|
|
857
|
+
"""Initialize elseifs node."""
|
|
858
|
+
self.elseifs = elseifs
|
|
859
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
class ElseStmt(AstNode):
|
|
863
|
+
"""Else node type for Jac Ast."""
|
|
864
|
+
|
|
865
|
+
def __init__(
|
|
866
|
+
self,
|
|
867
|
+
body: "CodeBlock",
|
|
868
|
+
parent: Optional[AstNode],
|
|
869
|
+
mod_link: Optional[Module],
|
|
870
|
+
kid: list[AstNode],
|
|
871
|
+
line: int,
|
|
872
|
+
) -> None:
|
|
873
|
+
"""Initialize else node."""
|
|
874
|
+
self.body = body
|
|
875
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
class TryStmt(AstNode):
|
|
879
|
+
"""TryStmt node type for Jac Ast."""
|
|
880
|
+
|
|
881
|
+
def __init__(
|
|
882
|
+
self,
|
|
883
|
+
body: "CodeBlock",
|
|
884
|
+
excepts: Optional["ExceptList"],
|
|
885
|
+
finally_body: Optional["FinallyStmt"],
|
|
886
|
+
parent: Optional[AstNode],
|
|
887
|
+
mod_link: Optional[Module],
|
|
888
|
+
kid: list[AstNode],
|
|
889
|
+
line: int,
|
|
890
|
+
) -> None:
|
|
891
|
+
"""Initialize try statement node."""
|
|
892
|
+
self.body = body
|
|
893
|
+
self.excepts = excepts
|
|
894
|
+
self.finally_body = finally_body
|
|
895
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
class ExceptList(AstNode):
|
|
899
|
+
"""ExceptList node type for Jac Ast."""
|
|
900
|
+
|
|
901
|
+
def __init__(
|
|
902
|
+
self,
|
|
903
|
+
excepts: list["Except"],
|
|
904
|
+
parent: Optional[AstNode],
|
|
905
|
+
mod_link: Optional[Module],
|
|
906
|
+
kid: list[AstNode],
|
|
907
|
+
line: int,
|
|
908
|
+
) -> None:
|
|
909
|
+
"""Initialize excepts node."""
|
|
910
|
+
self.excepts = excepts
|
|
911
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
class Except(AstNode):
|
|
915
|
+
"""Except node type for Jac Ast."""
|
|
916
|
+
|
|
917
|
+
def __init__(
|
|
918
|
+
self,
|
|
919
|
+
ex_type: "ExprType",
|
|
920
|
+
name: Optional[Token],
|
|
921
|
+
body: "CodeBlock",
|
|
922
|
+
parent: Optional[AstNode],
|
|
923
|
+
mod_link: Optional[Module],
|
|
924
|
+
kid: list[AstNode],
|
|
925
|
+
line: int,
|
|
926
|
+
) -> None:
|
|
927
|
+
"""Initialize except node."""
|
|
928
|
+
self.ex_type = ex_type
|
|
929
|
+
self.name = name
|
|
930
|
+
self.body = body
|
|
931
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
class FinallyStmt(AstNode):
|
|
935
|
+
"""FinallyStmt node type for Jac Ast."""
|
|
936
|
+
|
|
937
|
+
def __init__(
|
|
938
|
+
self,
|
|
939
|
+
body: "CodeBlock",
|
|
940
|
+
parent: Optional[AstNode],
|
|
941
|
+
mod_link: Optional[Module],
|
|
942
|
+
kid: list[AstNode],
|
|
943
|
+
line: int,
|
|
944
|
+
) -> None:
|
|
945
|
+
"""Initialize finally statement node."""
|
|
946
|
+
self.body = body
|
|
947
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
class IterForStmt(AstNode):
|
|
951
|
+
"""IterFor node type for Jac Ast."""
|
|
952
|
+
|
|
953
|
+
def __init__(
|
|
954
|
+
self,
|
|
955
|
+
iter: "Assignment",
|
|
956
|
+
condition: "ExprType",
|
|
957
|
+
count_by: "ExprType",
|
|
958
|
+
body: "CodeBlock",
|
|
959
|
+
parent: Optional[AstNode],
|
|
960
|
+
mod_link: Optional[Module],
|
|
961
|
+
kid: list[AstNode],
|
|
962
|
+
line: int,
|
|
963
|
+
) -> None:
|
|
964
|
+
"""Initialize iter for node."""
|
|
965
|
+
self.iter = iter
|
|
966
|
+
self.condition = condition
|
|
967
|
+
self.count_by = count_by
|
|
968
|
+
self.body = body
|
|
969
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
class InForStmt(AstNode):
|
|
973
|
+
"""InFor node type for Jac Ast."""
|
|
974
|
+
|
|
975
|
+
def __init__(
|
|
976
|
+
self,
|
|
977
|
+
name: Name,
|
|
978
|
+
collection: "ExprType",
|
|
979
|
+
body: "CodeBlock",
|
|
980
|
+
parent: Optional[AstNode],
|
|
981
|
+
mod_link: Optional[Module],
|
|
982
|
+
kid: list[AstNode],
|
|
983
|
+
line: int,
|
|
984
|
+
) -> None:
|
|
985
|
+
"""Initialize in for node."""
|
|
986
|
+
self.name = name
|
|
987
|
+
self.collection = collection
|
|
988
|
+
self.body = body
|
|
989
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
990
|
+
|
|
991
|
+
|
|
992
|
+
class DictForStmt(AstNode):
|
|
993
|
+
"""DictForStmt node type for Jac Ast."""
|
|
994
|
+
|
|
995
|
+
def __init__(
|
|
996
|
+
self,
|
|
997
|
+
k_name: Name,
|
|
998
|
+
v_name: Name,
|
|
999
|
+
collection: "ExprType",
|
|
1000
|
+
body: "CodeBlock",
|
|
1001
|
+
parent: Optional[AstNode],
|
|
1002
|
+
mod_link: Optional[Module],
|
|
1003
|
+
kid: list[AstNode],
|
|
1004
|
+
line: int,
|
|
1005
|
+
) -> None:
|
|
1006
|
+
"""Initialize dict for node."""
|
|
1007
|
+
self.k_name = k_name
|
|
1008
|
+
self.v_name = v_name
|
|
1009
|
+
self.collection = collection
|
|
1010
|
+
self.body = body
|
|
1011
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1012
|
+
|
|
1013
|
+
|
|
1014
|
+
class WhileStmt(AstNode):
|
|
1015
|
+
"""WhileStmt node type for Jac Ast."""
|
|
1016
|
+
|
|
1017
|
+
def __init__(
|
|
1018
|
+
self,
|
|
1019
|
+
condition: "ExprType",
|
|
1020
|
+
body: "CodeBlock",
|
|
1021
|
+
parent: Optional[AstNode],
|
|
1022
|
+
mod_link: Optional[Module],
|
|
1023
|
+
kid: list[AstNode],
|
|
1024
|
+
line: int,
|
|
1025
|
+
) -> None:
|
|
1026
|
+
"""Initialize while statement node."""
|
|
1027
|
+
self.condition = condition
|
|
1028
|
+
self.body = body
|
|
1029
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1030
|
+
|
|
1031
|
+
|
|
1032
|
+
class WithStmt(AstNode):
|
|
1033
|
+
"""WithStmt node type for Jac Ast."""
|
|
1034
|
+
|
|
1035
|
+
def __init__(
|
|
1036
|
+
self,
|
|
1037
|
+
exprs: "ExprAsItemList",
|
|
1038
|
+
body: "CodeBlock",
|
|
1039
|
+
parent: Optional[AstNode],
|
|
1040
|
+
mod_link: Optional[Module],
|
|
1041
|
+
kid: list[AstNode],
|
|
1042
|
+
line: int,
|
|
1043
|
+
) -> None:
|
|
1044
|
+
"""Initialize with statement node."""
|
|
1045
|
+
self.exprs = exprs
|
|
1046
|
+
self.body = body
|
|
1047
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1048
|
+
|
|
1049
|
+
|
|
1050
|
+
class ExprAsItemList(AstNode):
|
|
1051
|
+
"""ExprAsItemList node type for Jac Ast."""
|
|
1052
|
+
|
|
1053
|
+
def __init__(
|
|
1054
|
+
self,
|
|
1055
|
+
items: list["ExprAsItem"],
|
|
1056
|
+
parent: Optional[AstNode],
|
|
1057
|
+
mod_link: Optional[Module],
|
|
1058
|
+
kid: list["ExprAsItem"],
|
|
1059
|
+
line: int,
|
|
1060
|
+
) -> None:
|
|
1061
|
+
"""Initialize module items node."""
|
|
1062
|
+
self.items = items
|
|
1063
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1064
|
+
|
|
1065
|
+
|
|
1066
|
+
class ExprAsItem(AstNode):
|
|
1067
|
+
"""ExprAsItem node type for Jac Ast."""
|
|
1068
|
+
|
|
1069
|
+
def __init__(
|
|
1070
|
+
self,
|
|
1071
|
+
expr: "ExprType",
|
|
1072
|
+
alias: Optional[Name],
|
|
1073
|
+
parent: Optional[AstNode],
|
|
1074
|
+
mod_link: Optional[Module],
|
|
1075
|
+
kid: list[AstNode],
|
|
1076
|
+
line: int,
|
|
1077
|
+
) -> None:
|
|
1078
|
+
"""Initialize module item node."""
|
|
1079
|
+
self.expr = expr
|
|
1080
|
+
self.alias = alias
|
|
1081
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1082
|
+
|
|
1083
|
+
|
|
1084
|
+
class RaiseStmt(AstNode):
|
|
1085
|
+
"""RaiseStmt node type for Jac Ast."""
|
|
1086
|
+
|
|
1087
|
+
def __init__(
|
|
1088
|
+
self,
|
|
1089
|
+
cause: Optional["ExprType"],
|
|
1090
|
+
parent: Optional[AstNode],
|
|
1091
|
+
mod_link: Optional[Module],
|
|
1092
|
+
kid: list[AstNode],
|
|
1093
|
+
line: int,
|
|
1094
|
+
) -> None:
|
|
1095
|
+
"""Initialize raise statement node."""
|
|
1096
|
+
self.cause = cause
|
|
1097
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1098
|
+
|
|
1099
|
+
|
|
1100
|
+
class AssertStmt(AstNode):
|
|
1101
|
+
"""AssertStmt node type for Jac Ast."""
|
|
1102
|
+
|
|
1103
|
+
def __init__(
|
|
1104
|
+
self,
|
|
1105
|
+
condition: "ExprType",
|
|
1106
|
+
error_msg: Optional["ExprType"],
|
|
1107
|
+
parent: Optional[AstNode],
|
|
1108
|
+
mod_link: Optional[Module],
|
|
1109
|
+
kid: list[AstNode],
|
|
1110
|
+
line: int,
|
|
1111
|
+
) -> None:
|
|
1112
|
+
"""Initialize assert statement node."""
|
|
1113
|
+
self.condition = condition
|
|
1114
|
+
self.error_msg = error_msg
|
|
1115
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1116
|
+
|
|
1117
|
+
|
|
1118
|
+
class CtrlStmt(AstNode):
|
|
1119
|
+
"""CtrlStmt node type for Jac Ast."""
|
|
1120
|
+
|
|
1121
|
+
def __init__(
|
|
1122
|
+
self,
|
|
1123
|
+
ctrl: Token,
|
|
1124
|
+
parent: Optional[AstNode],
|
|
1125
|
+
mod_link: Optional[Module],
|
|
1126
|
+
kid: list[AstNode],
|
|
1127
|
+
line: int,
|
|
1128
|
+
) -> None:
|
|
1129
|
+
"""Initialize control statement node."""
|
|
1130
|
+
self.ctrl = ctrl
|
|
1131
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
class DeleteStmt(AstNode):
|
|
1135
|
+
"""DeleteStmt node type for Jac Ast."""
|
|
1136
|
+
|
|
1137
|
+
def __init__(
|
|
1138
|
+
self,
|
|
1139
|
+
target: "ExprType",
|
|
1140
|
+
parent: Optional[AstNode],
|
|
1141
|
+
mod_link: Optional[Module],
|
|
1142
|
+
kid: list[AstNode],
|
|
1143
|
+
line: int,
|
|
1144
|
+
) -> None:
|
|
1145
|
+
"""Initialize delete statement node."""
|
|
1146
|
+
self.target = target
|
|
1147
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1148
|
+
|
|
1149
|
+
|
|
1150
|
+
class ReportStmt(AstNode):
|
|
1151
|
+
"""ReportStmt node type for Jac Ast."""
|
|
1152
|
+
|
|
1153
|
+
def __init__(
|
|
1154
|
+
self,
|
|
1155
|
+
expr: "ExprType",
|
|
1156
|
+
parent: Optional[AstNode],
|
|
1157
|
+
mod_link: Optional[Module],
|
|
1158
|
+
kid: list[AstNode],
|
|
1159
|
+
line: int,
|
|
1160
|
+
) -> None:
|
|
1161
|
+
"""Initialize report statement node."""
|
|
1162
|
+
self.expr = expr
|
|
1163
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
class ReturnStmt(AstNode):
|
|
1167
|
+
"""ReturnStmt node type for Jac Ast."""
|
|
1168
|
+
|
|
1169
|
+
def __init__(
|
|
1170
|
+
self,
|
|
1171
|
+
expr: Optional["ExprType"],
|
|
1172
|
+
parent: Optional[AstNode],
|
|
1173
|
+
mod_link: Optional[Module],
|
|
1174
|
+
kid: list[AstNode],
|
|
1175
|
+
line: int,
|
|
1176
|
+
) -> None:
|
|
1177
|
+
"""Initialize return statement node."""
|
|
1178
|
+
self.expr = expr
|
|
1179
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1180
|
+
|
|
1181
|
+
|
|
1182
|
+
class YieldStmt(AstNode):
|
|
1183
|
+
"""YieldStmt node type for Jac Ast."""
|
|
1184
|
+
|
|
1185
|
+
def __init__(
|
|
1186
|
+
self,
|
|
1187
|
+
expr: Optional["ExprType"],
|
|
1188
|
+
parent: Optional[AstNode],
|
|
1189
|
+
mod_link: Optional[Module],
|
|
1190
|
+
kid: list[AstNode],
|
|
1191
|
+
line: int,
|
|
1192
|
+
) -> None:
|
|
1193
|
+
"""Initialize yeild statement node."""
|
|
1194
|
+
self.expr = expr
|
|
1195
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1196
|
+
|
|
1197
|
+
|
|
1198
|
+
class IgnoreStmt(AstNode):
|
|
1199
|
+
"""IgnoreStmt node type for Jac Ast."""
|
|
1200
|
+
|
|
1201
|
+
def __init__(
|
|
1202
|
+
self,
|
|
1203
|
+
target: "ExprType",
|
|
1204
|
+
parent: Optional[AstNode],
|
|
1205
|
+
mod_link: Optional[Module],
|
|
1206
|
+
kid: list[AstNode],
|
|
1207
|
+
line: int,
|
|
1208
|
+
) -> None:
|
|
1209
|
+
"""Initialize ignore statement node."""
|
|
1210
|
+
self.target = target
|
|
1211
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1212
|
+
|
|
1213
|
+
|
|
1214
|
+
class VisitStmt(AstNode):
|
|
1215
|
+
"""VisitStmt node type for Jac Ast."""
|
|
1216
|
+
|
|
1217
|
+
def __init__(
|
|
1218
|
+
self,
|
|
1219
|
+
vis_type: Optional[Token],
|
|
1220
|
+
target: ExprType,
|
|
1221
|
+
else_body: Optional["ElseStmt"],
|
|
1222
|
+
parent: Optional[AstNode],
|
|
1223
|
+
mod_link: Optional[Module],
|
|
1224
|
+
kid: list[AstNode],
|
|
1225
|
+
line: int,
|
|
1226
|
+
from_walker: bool = False,
|
|
1227
|
+
) -> None:
|
|
1228
|
+
"""Initialize visit statement node."""
|
|
1229
|
+
self.vis_type = vis_type
|
|
1230
|
+
self.target = target
|
|
1231
|
+
self.else_body = else_body
|
|
1232
|
+
self.from_walker = from_walker
|
|
1233
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1234
|
+
|
|
1235
|
+
|
|
1236
|
+
class RevisitStmt(AstNode):
|
|
1237
|
+
"""ReVisitStmt node type for Jac Ast."""
|
|
1238
|
+
|
|
1239
|
+
def __init__(
|
|
1240
|
+
self,
|
|
1241
|
+
hops: Optional["ExprType"],
|
|
1242
|
+
else_body: Optional["ElseStmt"],
|
|
1243
|
+
parent: Optional[AstNode],
|
|
1244
|
+
mod_link: Optional[Module],
|
|
1245
|
+
kid: list[AstNode],
|
|
1246
|
+
line: int,
|
|
1247
|
+
) -> None:
|
|
1248
|
+
"""Initialize revisit statement node."""
|
|
1249
|
+
self.hops = hops
|
|
1250
|
+
self.else_body = else_body
|
|
1251
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1252
|
+
|
|
1253
|
+
|
|
1254
|
+
class DisengageStmt(AstNode):
|
|
1255
|
+
"""DisengageStmt node type for Jac Ast."""
|
|
1256
|
+
|
|
1257
|
+
def __init__(
|
|
1258
|
+
self,
|
|
1259
|
+
parent: Optional[AstNode],
|
|
1260
|
+
mod_link: Optional[Module],
|
|
1261
|
+
kid: list[AstNode],
|
|
1262
|
+
line: int,
|
|
1263
|
+
from_walker: bool = False,
|
|
1264
|
+
) -> None:
|
|
1265
|
+
"""Initialize disengage statement node."""
|
|
1266
|
+
self.from_walker = from_walker
|
|
1267
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1268
|
+
|
|
1269
|
+
|
|
1270
|
+
class AwaitStmt(AstNode):
|
|
1271
|
+
"""AwaitStmt node type for Jac Ast."""
|
|
1272
|
+
|
|
1273
|
+
def __init__(
|
|
1274
|
+
self,
|
|
1275
|
+
target: "ExprType",
|
|
1276
|
+
parent: Optional[AstNode],
|
|
1277
|
+
mod_link: Optional[Module],
|
|
1278
|
+
kid: list[AstNode],
|
|
1279
|
+
line: int,
|
|
1280
|
+
) -> None:
|
|
1281
|
+
"""Initialize sync statement node."""
|
|
1282
|
+
self.target = target
|
|
1283
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1284
|
+
|
|
1285
|
+
|
|
1286
|
+
class Assignment(AstNode):
|
|
1287
|
+
"""Assignment node type for Jac Ast."""
|
|
1288
|
+
|
|
1289
|
+
def __init__(
|
|
1290
|
+
self,
|
|
1291
|
+
is_static: bool,
|
|
1292
|
+
target: "AtomType",
|
|
1293
|
+
value: "ExprType",
|
|
1294
|
+
mutable: bool,
|
|
1295
|
+
parent: Optional[AstNode],
|
|
1296
|
+
mod_link: Optional[Module],
|
|
1297
|
+
kid: list[AstNode],
|
|
1298
|
+
line: int,
|
|
1299
|
+
) -> None:
|
|
1300
|
+
"""Initialize assignment node."""
|
|
1301
|
+
self.is_static = is_static
|
|
1302
|
+
self.target = target
|
|
1303
|
+
self.value = value
|
|
1304
|
+
self.mutable = mutable
|
|
1305
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1306
|
+
|
|
1307
|
+
|
|
1308
|
+
class BinaryExpr(AstNode):
|
|
1309
|
+
"""ExprBinary node type for Jac Ast."""
|
|
1310
|
+
|
|
1311
|
+
def __init__(
|
|
1312
|
+
self,
|
|
1313
|
+
left: "ExprType",
|
|
1314
|
+
right: "ExprType",
|
|
1315
|
+
op: Token | DisconnectOp | ConnectOp,
|
|
1316
|
+
parent: Optional[AstNode],
|
|
1317
|
+
mod_link: Optional[Module],
|
|
1318
|
+
kid: list[AstNode],
|
|
1319
|
+
line: int,
|
|
1320
|
+
) -> None:
|
|
1321
|
+
"""Initialize binary expression node."""
|
|
1322
|
+
self.left = left
|
|
1323
|
+
self.right = right
|
|
1324
|
+
self.op = op
|
|
1325
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1326
|
+
|
|
1327
|
+
|
|
1328
|
+
class IfElseExpr(AstNode):
|
|
1329
|
+
"""ExprIfElse node type for Jac Ast."""
|
|
1330
|
+
|
|
1331
|
+
def __init__(
|
|
1332
|
+
self,
|
|
1333
|
+
condition: "BinaryExpr | IfElseExpr",
|
|
1334
|
+
value: "ExprType",
|
|
1335
|
+
else_value: "ExprType",
|
|
1336
|
+
parent: Optional[AstNode],
|
|
1337
|
+
mod_link: Optional[Module],
|
|
1338
|
+
kid: list[AstNode],
|
|
1339
|
+
line: int,
|
|
1340
|
+
) -> None:
|
|
1341
|
+
"""Initialize if else expression node."""
|
|
1342
|
+
self.condition = condition
|
|
1343
|
+
self.value = value
|
|
1344
|
+
self.else_value = else_value
|
|
1345
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1346
|
+
|
|
1347
|
+
|
|
1348
|
+
class UnaryExpr(AstNode):
|
|
1349
|
+
"""ExprUnary node type for Jac Ast."""
|
|
1350
|
+
|
|
1351
|
+
def __init__(
|
|
1352
|
+
self,
|
|
1353
|
+
operand: "ExprType",
|
|
1354
|
+
op: Token,
|
|
1355
|
+
parent: Optional[AstNode],
|
|
1356
|
+
mod_link: Optional[Module],
|
|
1357
|
+
kid: list[AstNode],
|
|
1358
|
+
line: int,
|
|
1359
|
+
) -> None:
|
|
1360
|
+
"""Initialize unary expression node."""
|
|
1361
|
+
self.operand = operand
|
|
1362
|
+
self.op = op
|
|
1363
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1364
|
+
|
|
1365
|
+
|
|
1366
|
+
class UnpackExpr(AstNode):
|
|
1367
|
+
"""ExprUnpack node type for Jac Ast."""
|
|
1368
|
+
|
|
1369
|
+
def __init__(
|
|
1370
|
+
self,
|
|
1371
|
+
target: "ExprType",
|
|
1372
|
+
is_dict: bool,
|
|
1373
|
+
parent: Optional[AstNode],
|
|
1374
|
+
mod_link: Optional[Module],
|
|
1375
|
+
kid: list[AstNode],
|
|
1376
|
+
line: int,
|
|
1377
|
+
) -> None:
|
|
1378
|
+
"""Initialize unpack expression node."""
|
|
1379
|
+
self.target = target
|
|
1380
|
+
self.is_dict = is_dict
|
|
1381
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1382
|
+
|
|
1383
|
+
|
|
1384
|
+
class MultiString(AstNode):
|
|
1385
|
+
"""ExprMultiString node type for Jac Ast."""
|
|
1386
|
+
|
|
1387
|
+
def __init__(
|
|
1388
|
+
self,
|
|
1389
|
+
strings: list["Token | FString"],
|
|
1390
|
+
parent: Optional[AstNode],
|
|
1391
|
+
mod_link: Optional[Module],
|
|
1392
|
+
kid: list[AstNode],
|
|
1393
|
+
line: int,
|
|
1394
|
+
) -> None:
|
|
1395
|
+
"""Initialize multi string expression node."""
|
|
1396
|
+
self.strings = strings
|
|
1397
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1398
|
+
|
|
1399
|
+
|
|
1400
|
+
class ExprList(AstNode):
|
|
1401
|
+
"""ExprList node type for Jac Ast."""
|
|
1402
|
+
|
|
1403
|
+
def __init__(
|
|
1404
|
+
self,
|
|
1405
|
+
values: list["ExprType"],
|
|
1406
|
+
parent: Optional[AstNode],
|
|
1407
|
+
mod_link: Optional[Module],
|
|
1408
|
+
kid: list[AstNode],
|
|
1409
|
+
line: int,
|
|
1410
|
+
) -> None:
|
|
1411
|
+
"""Initialize expr value node."""
|
|
1412
|
+
self.values = values
|
|
1413
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1414
|
+
|
|
1415
|
+
|
|
1416
|
+
class ListVal(ExprList):
|
|
1417
|
+
"""ListVal node type for Jac Ast."""
|
|
1418
|
+
|
|
1419
|
+
|
|
1420
|
+
class SetVal(ExprList):
|
|
1421
|
+
"""SetVal node type for Jac Ast."""
|
|
1422
|
+
|
|
1423
|
+
|
|
1424
|
+
class TupleVal(AstNode):
|
|
1425
|
+
"""TupleVal node type for Jac Ast."""
|
|
1426
|
+
|
|
1427
|
+
def __init__(
|
|
1428
|
+
self,
|
|
1429
|
+
first_expr: Optional["ExprType"],
|
|
1430
|
+
exprs: Optional[ExprList],
|
|
1431
|
+
assigns: Optional[AssignmentList],
|
|
1432
|
+
parent: Optional[AstNode],
|
|
1433
|
+
mod_link: Optional[Module],
|
|
1434
|
+
kid: list[AstNode],
|
|
1435
|
+
line: int,
|
|
1436
|
+
) -> None:
|
|
1437
|
+
"""Initialize tuple value node."""
|
|
1438
|
+
self.first_expr = first_expr
|
|
1439
|
+
self.exprs = exprs
|
|
1440
|
+
self.assigns = assigns
|
|
1441
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1442
|
+
|
|
1443
|
+
|
|
1444
|
+
class DictVal(AstNode):
|
|
1445
|
+
"""ExprDict node type for Jac Ast."""
|
|
1446
|
+
|
|
1447
|
+
def __init__(
|
|
1448
|
+
self,
|
|
1449
|
+
kv_pairs: list["KVPair"],
|
|
1450
|
+
parent: Optional[AstNode],
|
|
1451
|
+
mod_link: Optional[Module],
|
|
1452
|
+
kid: list[AstNode],
|
|
1453
|
+
line: int,
|
|
1454
|
+
) -> None:
|
|
1455
|
+
"""Initialize dict expression node."""
|
|
1456
|
+
self.kv_pairs = kv_pairs
|
|
1457
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1458
|
+
|
|
1459
|
+
|
|
1460
|
+
class InnerCompr(AstNode):
|
|
1461
|
+
"""ListCompr node type for Jac Ast."""
|
|
1462
|
+
|
|
1463
|
+
def __init__(
|
|
1464
|
+
self,
|
|
1465
|
+
out_expr: "ExprType",
|
|
1466
|
+
name: Name,
|
|
1467
|
+
collection: "ExprType",
|
|
1468
|
+
conditional: Optional["ExprType"],
|
|
1469
|
+
is_list: bool,
|
|
1470
|
+
is_gen: bool,
|
|
1471
|
+
is_set: bool,
|
|
1472
|
+
parent: Optional[AstNode],
|
|
1473
|
+
mod_link: Optional[Module],
|
|
1474
|
+
kid: list[AstNode],
|
|
1475
|
+
line: int,
|
|
1476
|
+
) -> None:
|
|
1477
|
+
"""Initialize comprehension expression node."""
|
|
1478
|
+
self.out_expr = out_expr
|
|
1479
|
+
self.name = name
|
|
1480
|
+
self.collection = collection
|
|
1481
|
+
self.conditional = conditional
|
|
1482
|
+
self.is_list = is_list
|
|
1483
|
+
self.is_gen = is_gen
|
|
1484
|
+
self.is_set = is_set
|
|
1485
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1486
|
+
|
|
1487
|
+
|
|
1488
|
+
class DictCompr(AstNode):
|
|
1489
|
+
"""DictCompr node type for Jac Ast."""
|
|
1490
|
+
|
|
1491
|
+
def __init__(
|
|
1492
|
+
self,
|
|
1493
|
+
outk_expr: "ExprType",
|
|
1494
|
+
outv_expr: "ExprType",
|
|
1495
|
+
k_name: Name,
|
|
1496
|
+
v_name: Optional[Token],
|
|
1497
|
+
collection: "ExprType",
|
|
1498
|
+
conditional: Optional["ExprType"],
|
|
1499
|
+
parent: Optional[AstNode],
|
|
1500
|
+
mod_link: Optional[Module],
|
|
1501
|
+
kid: list[AstNode],
|
|
1502
|
+
line: int,
|
|
1503
|
+
) -> None:
|
|
1504
|
+
"""Initialize comprehension expression node."""
|
|
1505
|
+
self.outk_expr = outk_expr
|
|
1506
|
+
self.outv_expr = outv_expr
|
|
1507
|
+
self.k_name = k_name
|
|
1508
|
+
self.v_name = v_name
|
|
1509
|
+
self.collection = collection
|
|
1510
|
+
self.conditional = conditional
|
|
1511
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1512
|
+
|
|
1513
|
+
|
|
1514
|
+
class KVPair(AstNode):
|
|
1515
|
+
"""ExprKVPair node type for Jac Ast."""
|
|
1516
|
+
|
|
1517
|
+
def __init__(
|
|
1518
|
+
self,
|
|
1519
|
+
key: "ExprType",
|
|
1520
|
+
value: "ExprType",
|
|
1521
|
+
parent: Optional[AstNode],
|
|
1522
|
+
mod_link: Optional[Module],
|
|
1523
|
+
kid: list[AstNode],
|
|
1524
|
+
line: int,
|
|
1525
|
+
) -> None:
|
|
1526
|
+
"""Initialize key value pair expression node."""
|
|
1527
|
+
self.key = key
|
|
1528
|
+
self.value = value
|
|
1529
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1530
|
+
|
|
1531
|
+
|
|
1532
|
+
class AtomTrailer(AstNode):
|
|
1533
|
+
"""AtomTrailer node type for Jac Ast."""
|
|
1534
|
+
|
|
1535
|
+
def __init__(
|
|
1536
|
+
self,
|
|
1537
|
+
target: "AtomType",
|
|
1538
|
+
right: "IndexSlice | ArchRef | Token",
|
|
1539
|
+
null_ok: bool,
|
|
1540
|
+
parent: Optional[AstNode],
|
|
1541
|
+
mod_link: Optional[Module],
|
|
1542
|
+
kid: list[AstNode],
|
|
1543
|
+
line: int,
|
|
1544
|
+
) -> None:
|
|
1545
|
+
"""Initialize atom trailer expression node."""
|
|
1546
|
+
self.target = target
|
|
1547
|
+
self.right = right
|
|
1548
|
+
self.null_ok = null_ok
|
|
1549
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1550
|
+
|
|
1551
|
+
|
|
1552
|
+
class FuncCall(AstNode):
|
|
1553
|
+
"""FuncCall node type for Jac Ast."""
|
|
1554
|
+
|
|
1555
|
+
def __init__(
|
|
1556
|
+
self,
|
|
1557
|
+
target: "AtomType",
|
|
1558
|
+
params: Optional["ParamList"],
|
|
1559
|
+
parent: Optional[AstNode],
|
|
1560
|
+
mod_link: Optional[Module],
|
|
1561
|
+
kid: list[AstNode],
|
|
1562
|
+
line: int,
|
|
1563
|
+
) -> None:
|
|
1564
|
+
"""Initialize function call expression node."""
|
|
1565
|
+
self.target = target
|
|
1566
|
+
self.params = params
|
|
1567
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1568
|
+
|
|
1569
|
+
|
|
1570
|
+
class ParamList(AstNode):
|
|
1571
|
+
"""ParamList node type for Jac Ast."""
|
|
1572
|
+
|
|
1573
|
+
def __init__(
|
|
1574
|
+
self,
|
|
1575
|
+
p_args: Optional[ExprList],
|
|
1576
|
+
p_kwargs: Optional["AssignmentList"],
|
|
1577
|
+
parent: Optional[AstNode],
|
|
1578
|
+
mod_link: Optional[Module],
|
|
1579
|
+
kid: list[AstNode],
|
|
1580
|
+
line: int,
|
|
1581
|
+
) -> None:
|
|
1582
|
+
"""Initialize parameter list expression node."""
|
|
1583
|
+
self.p_args = p_args
|
|
1584
|
+
self.p_kwargs = p_kwargs
|
|
1585
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1586
|
+
|
|
1587
|
+
|
|
1588
|
+
class AssignmentList(AstNode):
|
|
1589
|
+
"""AssignmentList node type for Jac Ast."""
|
|
1590
|
+
|
|
1591
|
+
def __init__(
|
|
1592
|
+
self,
|
|
1593
|
+
values: list["Assignment"],
|
|
1594
|
+
parent: Optional[AstNode],
|
|
1595
|
+
mod_link: Optional[Module],
|
|
1596
|
+
kid: list[AstNode],
|
|
1597
|
+
line: int,
|
|
1598
|
+
) -> None:
|
|
1599
|
+
"""Initialize expr value node."""
|
|
1600
|
+
self.values = values
|
|
1601
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1602
|
+
|
|
1603
|
+
|
|
1604
|
+
class IndexSlice(AstNode):
|
|
1605
|
+
"""IndexSlice node type for Jac Ast."""
|
|
1606
|
+
|
|
1607
|
+
def __init__(
|
|
1608
|
+
self,
|
|
1609
|
+
start: Optional["ExprType"],
|
|
1610
|
+
stop: Optional["ExprType"],
|
|
1611
|
+
is_range: bool,
|
|
1612
|
+
parent: Optional[AstNode],
|
|
1613
|
+
mod_link: Optional[Module],
|
|
1614
|
+
kid: list[AstNode],
|
|
1615
|
+
line: int,
|
|
1616
|
+
) -> None:
|
|
1617
|
+
"""Initialize index slice expression node."""
|
|
1618
|
+
self.start = start
|
|
1619
|
+
self.stop = stop
|
|
1620
|
+
self.is_range = is_range
|
|
1621
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1622
|
+
|
|
1623
|
+
|
|
1624
|
+
class ArchRef(AstNode):
|
|
1625
|
+
"""GlobalRef node type for Jac Ast."""
|
|
1626
|
+
|
|
1627
|
+
def __init__(
|
|
1628
|
+
self,
|
|
1629
|
+
name: Name,
|
|
1630
|
+
arch: Token,
|
|
1631
|
+
parent: Optional[AstNode],
|
|
1632
|
+
mod_link: Optional[Module],
|
|
1633
|
+
kid: list[AstNode],
|
|
1634
|
+
line: int,
|
|
1635
|
+
) -> None:
|
|
1636
|
+
"""Initialize global reference expression node."""
|
|
1637
|
+
self.name = name
|
|
1638
|
+
self.arch = arch
|
|
1639
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1640
|
+
|
|
1641
|
+
|
|
1642
|
+
class SpecialVarRef(AstNode):
|
|
1643
|
+
"""HereRef node type for Jac Ast."""
|
|
1644
|
+
|
|
1645
|
+
def __init__(
|
|
1646
|
+
self,
|
|
1647
|
+
var: Token,
|
|
1648
|
+
parent: Optional[AstNode],
|
|
1649
|
+
mod_link: Optional[Module],
|
|
1650
|
+
kid: list[AstNode],
|
|
1651
|
+
line: int,
|
|
1652
|
+
) -> None:
|
|
1653
|
+
"""Initialize special var reference expression node."""
|
|
1654
|
+
self.var = var
|
|
1655
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1656
|
+
|
|
1657
|
+
|
|
1658
|
+
class EdgeOpRef(AstNode):
|
|
1659
|
+
"""EdgeOpRef node type for Jac Ast."""
|
|
1660
|
+
|
|
1661
|
+
def __init__(
|
|
1662
|
+
self,
|
|
1663
|
+
filter_type: Optional[ExprType],
|
|
1664
|
+
filter_cond: Optional[FilterCompr],
|
|
1665
|
+
edge_dir: EdgeDir,
|
|
1666
|
+
parent: Optional[AstNode],
|
|
1667
|
+
mod_link: Optional[Module],
|
|
1668
|
+
kid: list[AstNode],
|
|
1669
|
+
line: int,
|
|
1670
|
+
) -> None:
|
|
1671
|
+
"""Initialize edge op reference expression node."""
|
|
1672
|
+
self.filter_type = filter_type
|
|
1673
|
+
self.filter_cond = filter_cond
|
|
1674
|
+
self.edge_dir = edge_dir
|
|
1675
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1676
|
+
|
|
1677
|
+
|
|
1678
|
+
class DisconnectOp(EdgeOpRef):
|
|
1679
|
+
"""DisconnectOpRef node type for Jac Ast."""
|
|
1680
|
+
|
|
1681
|
+
|
|
1682
|
+
class ConnectOp(AstNode):
|
|
1683
|
+
"""ConnectOpRef node type for Jac Ast."""
|
|
1684
|
+
|
|
1685
|
+
def __init__(
|
|
1686
|
+
self,
|
|
1687
|
+
conn_type: Optional[ExprType],
|
|
1688
|
+
conn_assign: Optional[AssignmentList],
|
|
1689
|
+
edge_dir: EdgeDir,
|
|
1690
|
+
parent: Optional[AstNode],
|
|
1691
|
+
mod_link: Optional[Module],
|
|
1692
|
+
kid: list[AstNode],
|
|
1693
|
+
line: int,
|
|
1694
|
+
) -> None:
|
|
1695
|
+
"""Initialize connect op reference expression node."""
|
|
1696
|
+
self.conn_type = conn_type
|
|
1697
|
+
self.conn_assign = conn_assign
|
|
1698
|
+
self.edge_dir = edge_dir
|
|
1699
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1700
|
+
|
|
1701
|
+
|
|
1702
|
+
class FilterCompr(AstNode):
|
|
1703
|
+
"""FilterCtx node type for Jac Ast."""
|
|
1704
|
+
|
|
1705
|
+
def __init__(
|
|
1706
|
+
self,
|
|
1707
|
+
compares: list[BinaryExpr],
|
|
1708
|
+
parent: Optional[AstNode],
|
|
1709
|
+
mod_link: Optional[Module],
|
|
1710
|
+
kid: list[AstNode],
|
|
1711
|
+
line: int,
|
|
1712
|
+
) -> None:
|
|
1713
|
+
"""Initialize filter_cond context expression node."""
|
|
1714
|
+
self.compares = compares
|
|
1715
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1716
|
+
|
|
1717
|
+
|
|
1718
|
+
class FString(AstNode):
|
|
1719
|
+
"""FString node type for Jac Ast."""
|
|
1720
|
+
|
|
1721
|
+
def __init__(
|
|
1722
|
+
self,
|
|
1723
|
+
parts: list["Token | ExprType"],
|
|
1724
|
+
parent: Optional[AstNode],
|
|
1725
|
+
mod_link: Optional[Module],
|
|
1726
|
+
kid: list[AstNode],
|
|
1727
|
+
line: int,
|
|
1728
|
+
) -> None:
|
|
1729
|
+
"""Initialize fstring expression node."""
|
|
1730
|
+
self.parts = parts
|
|
1731
|
+
super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
|
|
1732
|
+
|
|
1733
|
+
|
|
1734
|
+
AtomType = Union[
|
|
1735
|
+
MultiString,
|
|
1736
|
+
ListVal,
|
|
1737
|
+
TupleVal,
|
|
1738
|
+
SetVal,
|
|
1739
|
+
DictVal,
|
|
1740
|
+
InnerCompr,
|
|
1741
|
+
DictCompr,
|
|
1742
|
+
AtomTrailer,
|
|
1743
|
+
EdgeOpRef,
|
|
1744
|
+
FilterCompr,
|
|
1745
|
+
]
|
|
1746
|
+
|
|
1747
|
+
ExprType = Union[
|
|
1748
|
+
UnaryExpr,
|
|
1749
|
+
BinaryExpr,
|
|
1750
|
+
IfElseExpr,
|
|
1751
|
+
UnpackExpr,
|
|
1752
|
+
AtomType,
|
|
1753
|
+
]
|
|
1754
|
+
|
|
1755
|
+
|
|
1756
|
+
StmtType = Union[
|
|
1757
|
+
Architype,
|
|
1758
|
+
Ability,
|
|
1759
|
+
Assignment,
|
|
1760
|
+
ExprType,
|
|
1761
|
+
IfStmt,
|
|
1762
|
+
TryStmt,
|
|
1763
|
+
IterForStmt,
|
|
1764
|
+
InForStmt,
|
|
1765
|
+
DictForStmt,
|
|
1766
|
+
WhileStmt,
|
|
1767
|
+
WithStmt,
|
|
1768
|
+
RaiseStmt,
|
|
1769
|
+
AssertStmt,
|
|
1770
|
+
CtrlStmt,
|
|
1771
|
+
DeleteStmt,
|
|
1772
|
+
ReportStmt,
|
|
1773
|
+
ReturnStmt,
|
|
1774
|
+
YieldStmt,
|
|
1775
|
+
AwaitStmt,
|
|
1776
|
+
DisengageStmt,
|
|
1777
|
+
RevisitStmt,
|
|
1778
|
+
VisitStmt,
|
|
1779
|
+
IgnoreStmt,
|
|
1780
|
+
]
|
|
1781
|
+
|
|
1782
|
+
|
|
1783
|
+
# Test the function
|
|
1784
|
+
if __name__ == "__main__":
|
|
1785
|
+
from jaclang.jac.utils import load_ast_and_print_pass_template
|
|
1786
|
+
|
|
1787
|
+
print(load_ast_and_print_pass_template())
|