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.

Files changed (73) hide show
  1. jaclang/__init__.py +4 -0
  2. jaclang/cli/__init__.py +7 -0
  3. jaclang/cli/cli.jac +46 -0
  4. jaclang/cli/cmds.jac +14 -0
  5. jaclang/cli/impl/__init__.py +1 -0
  6. jaclang/cli/impl/cli_impl.jac +93 -0
  7. jaclang/cli/impl/cmds_impl.jac +26 -0
  8. jaclang/core/__init__.py +12 -0
  9. jaclang/core/impl/__init__.py +1 -0
  10. jaclang/core/impl/arch_impl.jac +112 -0
  11. jaclang/core/impl/element_impl.jac +95 -0
  12. jaclang/core/impl/exec_ctx_impl.jac +17 -0
  13. jaclang/core/impl/memory_impl.jac +57 -0
  14. jaclang/core/primitives.jac +104 -0
  15. jaclang/jac/__init__.py +1 -0
  16. jaclang/jac/absyntree.py +1787 -0
  17. jaclang/jac/constant.py +46 -0
  18. jaclang/jac/importer.py +130 -0
  19. jaclang/jac/lexer.py +538 -0
  20. jaclang/jac/parser.py +1474 -0
  21. jaclang/jac/passes/__init__.py +5 -0
  22. jaclang/jac/passes/blue/__init__.py +25 -0
  23. jaclang/jac/passes/blue/ast_build_pass.py +3190 -0
  24. jaclang/jac/passes/blue/blue_pygen_pass.py +1335 -0
  25. jaclang/jac/passes/blue/decl_def_match_pass.py +278 -0
  26. jaclang/jac/passes/blue/import_pass.py +75 -0
  27. jaclang/jac/passes/blue/sub_node_tab_pass.py +30 -0
  28. jaclang/jac/passes/blue/tests/__init__.py +1 -0
  29. jaclang/jac/passes/blue/tests/test_ast_build_pass.py +61 -0
  30. jaclang/jac/passes/blue/tests/test_blue_pygen_pass.py +117 -0
  31. jaclang/jac/passes/blue/tests/test_decl_def_match_pass.py +43 -0
  32. jaclang/jac/passes/blue/tests/test_import_pass.py +18 -0
  33. jaclang/jac/passes/blue/tests/test_sub_node_pass.py +26 -0
  34. jaclang/jac/passes/blue/tests/test_type_analyze_pass.py +53 -0
  35. jaclang/jac/passes/blue/type_analyze_pass.py +731 -0
  36. jaclang/jac/passes/ir_pass.py +154 -0
  37. jaclang/jac/passes/purple/__init__.py +17 -0
  38. jaclang/jac/passes/purple/impl/__init__.py +1 -0
  39. jaclang/jac/passes/purple/impl/purple_pygen_pass_impl.jac +289 -0
  40. jaclang/jac/passes/purple/purple_pygen_pass.jac +35 -0
  41. jaclang/jac/sym_table.py +127 -0
  42. jaclang/jac/tests/__init__.py +1 -0
  43. jaclang/jac/tests/fixtures/__init__.py +1 -0
  44. jaclang/jac/tests/fixtures/activity.py +10 -0
  45. jaclang/jac/tests/fixtures/fam.jac +68 -0
  46. jaclang/jac/tests/fixtures/hello_world.jac +5 -0
  47. jaclang/jac/tests/fixtures/lexer_fam.jac +61 -0
  48. jaclang/jac/tests/fixtures/stuff.jac +6 -0
  49. jaclang/jac/tests/test_importer.py +24 -0
  50. jaclang/jac/tests/test_lexer.py +57 -0
  51. jaclang/jac/tests/test_parser.py +50 -0
  52. jaclang/jac/tests/test_utils.py +12 -0
  53. jaclang/jac/transform.py +63 -0
  54. jaclang/jac/transpiler.py +69 -0
  55. jaclang/jac/utils.py +120 -0
  56. jaclang/utils/__init__.py +1 -0
  57. jaclang/utils/fstring_parser.py +73 -0
  58. jaclang/utils/log.py +9 -0
  59. jaclang/utils/sly/__init__.py +6 -0
  60. jaclang/utils/sly/docparse.py +62 -0
  61. jaclang/utils/sly/lex.py +510 -0
  62. jaclang/utils/sly/yacc.py +2398 -0
  63. jaclang/utils/test.py +81 -0
  64. jaclang/utils/tests/__init__.py +1 -0
  65. jaclang/utils/tests/test_fstring_parser.py +55 -0
  66. jaclang-0.0.3.dist-info/METADATA +12 -0
  67. jaclang-0.0.3.dist-info/RECORD +70 -0
  68. {jaclang-0.0.1.dist-info → jaclang-0.0.3.dist-info}/WHEEL +1 -1
  69. jaclang-0.0.3.dist-info/entry_points.txt +3 -0
  70. jaclang-0.0.3.dist-info/top_level.txt +1 -0
  71. jaclang-0.0.1.dist-info/METADATA +0 -7
  72. jaclang-0.0.1.dist-info/RECORD +0 -4
  73. jaclang-0.0.1.dist-info/top_level.txt +0 -1
@@ -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())