jaclang 0.0.5__py3-none-any.whl → 0.0.8__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 (94) hide show
  1. jaclang/__init__.py +2 -1
  2. jaclang/cli/__jac_gen__/__init__.py +0 -0
  3. jaclang/cli/__jac_gen__/cli.py +175 -0
  4. jaclang/cli/__jac_gen__/cmds.py +132 -0
  5. jaclang/cli/cli.jac +2 -2
  6. jaclang/cli/cmds.jac +8 -2
  7. jaclang/cli/impl/__jac_gen__/__init__.py +0 -0
  8. jaclang/cli/impl/__jac_gen__/cli_impl.py +16 -0
  9. jaclang/cli/impl/__jac_gen__/cmds_impl.py +26 -0
  10. jaclang/cli/impl/cli_impl.jac +25 -8
  11. jaclang/cli/impl/cmds_impl.jac +35 -6
  12. jaclang/core/__jac_gen__/__init__.py +0 -0
  13. jaclang/core/__jac_gen__/primitives.py +567 -0
  14. jaclang/core/impl/__jac_gen__/__init__.py +0 -0
  15. jaclang/core/impl/__jac_gen__/arch_impl.py +24 -0
  16. jaclang/core/impl/__jac_gen__/element_impl.py +26 -0
  17. jaclang/core/impl/__jac_gen__/exec_ctx_impl.py +12 -0
  18. jaclang/core/impl/__jac_gen__/memory_impl.py +14 -0
  19. jaclang/core/impl/element_impl.jac +3 -3
  20. jaclang/core/impl/exec_ctx_impl.jac +3 -6
  21. jaclang/core/primitives.jac +4 -3
  22. jaclang/jac/absyntree.py +555 -180
  23. jaclang/jac/constant.py +6 -0
  24. jaclang/jac/importer.py +34 -56
  25. jaclang/jac/langserve.py +26 -0
  26. jaclang/jac/lexer.py +35 -3
  27. jaclang/jac/parser.py +146 -115
  28. jaclang/jac/passes/blue/__init__.py +8 -3
  29. jaclang/jac/passes/blue/ast_build_pass.py +454 -305
  30. jaclang/jac/passes/blue/blue_pygen_pass.py +112 -74
  31. jaclang/jac/passes/blue/decl_def_match_pass.py +49 -277
  32. jaclang/jac/passes/blue/import_pass.py +1 -1
  33. jaclang/jac/passes/blue/pyout_pass.py +74 -0
  34. jaclang/jac/passes/blue/semantic_check_pass.py +37 -0
  35. jaclang/jac/passes/blue/sym_tab_build_pass.py +1045 -0
  36. jaclang/jac/passes/blue/tests/test_ast_build_pass.py +2 -2
  37. jaclang/jac/passes/blue/tests/test_blue_pygen_pass.py +9 -28
  38. jaclang/jac/passes/blue/tests/test_decl_def_match_pass.py +13 -22
  39. jaclang/jac/passes/blue/tests/test_sym_tab_build_pass.py +22 -0
  40. jaclang/jac/passes/ir_pass.py +8 -6
  41. jaclang/jac/passes/purple/__jac_gen__/__init__.py +0 -0
  42. jaclang/jac/passes/purple/__jac_gen__/analyze_pass.py +37 -0
  43. jaclang/jac/passes/purple/__jac_gen__/purple_pygen_pass.py +305 -0
  44. jaclang/jac/passes/purple/impl/__jac_gen__/__init__.py +0 -0
  45. jaclang/jac/passes/purple/impl/__jac_gen__/purple_pygen_pass_impl.py +23 -0
  46. jaclang/jac/passes/purple/impl/purple_pygen_pass_impl.jac +2 -5
  47. jaclang/jac/symtable.py +154 -0
  48. jaclang/jac/tests/fixtures/__jac_gen__/__init__.py +0 -0
  49. jaclang/jac/tests/fixtures/__jac_gen__/hello_world.py +16 -0
  50. jaclang/jac/tests/fixtures/fam.jac +7 -8
  51. jaclang/jac/tests/fixtures/mod_doc_test.jac +1 -0
  52. jaclang/jac/tests/test_parser.py +8 -0
  53. jaclang/jac/transform.py +41 -14
  54. jaclang/jac/transpiler.py +18 -9
  55. jaclang/utils/fstring_parser.py +2 -2
  56. jaclang/utils/helpers.py +41 -0
  57. jaclang/utils/lang_tools.py +12 -2
  58. jaclang/utils/test.py +41 -0
  59. jaclang/vendor/__init__.py +1 -0
  60. jaclang/vendor/pygls/__init__.py +25 -0
  61. jaclang/vendor/pygls/capabilities.py +502 -0
  62. jaclang/vendor/pygls/client.py +176 -0
  63. jaclang/vendor/pygls/constants.py +26 -0
  64. jaclang/vendor/pygls/exceptions.py +220 -0
  65. jaclang/vendor/pygls/feature_manager.py +241 -0
  66. jaclang/vendor/pygls/lsp/__init__.py +139 -0
  67. jaclang/vendor/pygls/lsp/client.py +2224 -0
  68. jaclang/vendor/pygls/lsprotocol/__init__.py +2 -0
  69. jaclang/vendor/pygls/lsprotocol/_hooks.py +1233 -0
  70. jaclang/vendor/pygls/lsprotocol/converters.py +17 -0
  71. jaclang/vendor/pygls/lsprotocol/types.py +12820 -0
  72. jaclang/vendor/pygls/lsprotocol/validators.py +47 -0
  73. jaclang/vendor/pygls/progress.py +79 -0
  74. jaclang/vendor/pygls/protocol.py +1184 -0
  75. jaclang/vendor/pygls/server.py +620 -0
  76. jaclang/vendor/pygls/uris.py +184 -0
  77. jaclang/vendor/pygls/workspace/__init__.py +81 -0
  78. jaclang/vendor/pygls/workspace/position.py +204 -0
  79. jaclang/vendor/pygls/workspace/text_document.py +234 -0
  80. jaclang/vendor/pygls/workspace/workspace.py +311 -0
  81. {jaclang-0.0.5.dist-info → jaclang-0.0.8.dist-info}/METADATA +1 -1
  82. jaclang-0.0.8.dist-info/RECORD +118 -0
  83. jaclang/core/jaclang.jac +0 -62
  84. jaclang/jac/passes/blue/tests/test_type_analyze_pass.py +0 -53
  85. jaclang/jac/passes/blue/type_analyze_pass.py +0 -728
  86. jaclang/jac/sym_table.py +0 -127
  87. jaclang-0.0.5.dist-info/RECORD +0 -73
  88. /jaclang/{utils → vendor}/sly/__init__.py +0 -0
  89. /jaclang/{utils → vendor}/sly/docparse.py +0 -0
  90. /jaclang/{utils → vendor}/sly/lex.py +0 -0
  91. /jaclang/{utils → vendor}/sly/yacc.py +0 -0
  92. {jaclang-0.0.5.dist-info → jaclang-0.0.8.dist-info}/WHEEL +0 -0
  93. {jaclang-0.0.5.dist-info → jaclang-0.0.8.dist-info}/entry_points.txt +0 -0
  94. {jaclang-0.0.5.dist-info → jaclang-0.0.8.dist-info}/top_level.txt +0 -0
jaclang/jac/absyntree.py CHANGED
@@ -6,6 +6,7 @@ from typing import Optional, Union
6
6
 
7
7
  from jaclang.jac.constant import Constants as Con, EdgeDir
8
8
  from jaclang.jac.constant import Tokens as Tok
9
+ from jaclang.jac.symtable import SymbolTable
9
10
 
10
11
 
11
12
  class AstNode:
@@ -13,16 +14,18 @@ class AstNode:
13
14
 
14
15
  def __init__(
15
16
  self,
16
- parent: Optional["AstNode"],
17
+ parent: Optional[AstNode],
17
18
  mod_link: Optional[Module],
18
19
  kid: list,
19
20
  line: int,
21
+ sym_tab: Optional[SymbolTable] = None,
20
22
  ) -> None:
21
23
  """Initialize ast."""
22
24
  self.parent = parent
23
25
  self.kid = kid if kid else []
24
26
  self.mod_link = mod_link
25
27
  self.line = line
28
+ self.sym_tab = sym_tab
26
29
  self._sub_node_tab: dict[type[AstNode], list[AstNode]] = {}
27
30
  self._typ: type = type(None)
28
31
  self.meta: dict = {}
@@ -61,6 +64,7 @@ class Module(AstNode):
61
64
  mod_link: Optional[Module],
62
65
  kid: list[AstNode],
63
66
  line: int,
67
+ sym_tab: Optional[SymbolTable] = None,
64
68
  ) -> None:
65
69
  """Initialize whole program node."""
66
70
  self.name = name
@@ -69,7 +73,9 @@ class Module(AstNode):
69
73
  self.mod_path = mod_path
70
74
  self.rel_mod_path = rel_mod_path
71
75
  self.is_imported = is_imported
72
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
76
+ super().__init__(
77
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
78
+ )
73
79
 
74
80
 
75
81
  class Elements(AstNode):
@@ -82,10 +88,13 @@ class Elements(AstNode):
82
88
  mod_link: Optional[Module],
83
89
  kid: list[AstNode],
84
90
  line: int,
91
+ sym_tab: Optional[SymbolTable] = None,
85
92
  ) -> None:
86
93
  """Initialize elements node."""
87
94
  self.elements = elements
88
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
95
+ super().__init__(
96
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
97
+ )
89
98
 
90
99
 
91
100
  class OOPAccessNode(AstNode):
@@ -98,10 +107,13 @@ class OOPAccessNode(AstNode):
98
107
  mod_link: Optional[Module],
99
108
  kid: list[AstNode],
100
109
  line: int,
110
+ sym_tab: Optional[SymbolTable] = None,
101
111
  ) -> None:
102
112
  """Initialize OOPAccessible node."""
103
113
  self.access = access
104
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
114
+ super().__init__(
115
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
116
+ )
105
117
 
106
118
 
107
119
  class GlobalVars(OOPAccessNode):
@@ -117,36 +129,62 @@ class GlobalVars(OOPAccessNode):
117
129
  mod_link: Optional[Module],
118
130
  kid: list[AstNode],
119
131
  line: int,
132
+ sym_tab: Optional[SymbolTable] = None,
120
133
  ) -> None:
121
134
  """Initialize global var node."""
122
135
  self.doc = doc
123
136
  self.assignments = assignments
124
137
  self.is_frozen = is_frozen
125
138
  super().__init__(
126
- access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
139
+ access=access,
140
+ parent=parent,
141
+ mod_link=mod_link,
142
+ kid=kid,
143
+ line=line,
144
+ sym_tab=sym_tab,
127
145
  )
128
146
 
129
147
 
130
148
  class Test(AstNode):
131
149
  """Test node type for Jac Ast."""
132
150
 
151
+ TEST_COUNT = 0
152
+
133
153
  def __init__(
134
154
  self,
135
- name: Name,
136
- doc: Optional["Token"],
137
- description: Token,
138
- body: "CodeBlock",
155
+ name: Name | Token,
156
+ doc: Optional[Token],
157
+ body: CodeBlock,
139
158
  parent: Optional[AstNode],
140
159
  mod_link: Optional[Module],
141
160
  kid: list[AstNode],
142
161
  line: int,
162
+ sym_tab: Optional[SymbolTable] = None,
143
163
  ) -> None:
144
164
  """Initialize test node."""
145
165
  self.doc = doc
146
- self.name = name
147
- self.description = description
166
+ Test.TEST_COUNT += 1 if isinstance(name, Token) else 0
167
+ self.name: Name = ( # for auto generated test names
168
+ name
169
+ if isinstance(name, Name)
170
+ else Name(
171
+ name="NAME",
172
+ value=f"test_{Test.TEST_COUNT}",
173
+ col_start=name.col_start,
174
+ col_end=name.col_end,
175
+ line=name.line,
176
+ already_declared=False,
177
+ parent=name.parent,
178
+ mod_link=name.mod_link,
179
+ kid=name.kid,
180
+ sym_tab=name.sym_tab,
181
+ )
182
+ )
183
+ kid[0] = self.name # Index is 0 since Doc string is inserted after init
148
184
  self.body = body
149
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
185
+ super().__init__(
186
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
187
+ )
150
188
 
151
189
 
152
190
  class ModuleCode(AstNode):
@@ -154,16 +192,37 @@ class ModuleCode(AstNode):
154
192
 
155
193
  def __init__(
156
194
  self,
157
- doc: Optional["Token"],
158
- body: "CodeBlock",
195
+ doc: Optional[Token],
196
+ name: Optional[Name],
197
+ body: CodeBlock,
159
198
  parent: Optional[AstNode],
160
199
  mod_link: Optional[Module],
161
200
  kid: list[AstNode],
162
201
  line: int,
202
+ sym_tab: Optional[SymbolTable] = None,
163
203
  ) -> None:
164
204
  """Initialize test node."""
165
205
  self.doc = doc
206
+ self.name = name
166
207
  self.body = body
208
+ super().__init__(
209
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
210
+ )
211
+
212
+
213
+ class PyInlineCode(AstNode):
214
+ """Inline Python code node type for Jac Ast."""
215
+
216
+ def __init__(
217
+ self,
218
+ code: Token,
219
+ parent: Optional[AstNode],
220
+ mod_link: Optional[Module],
221
+ kid: list[AstNode],
222
+ line: int,
223
+ ) -> None:
224
+ """Initialize inline python code node."""
225
+ self.code = code
167
226
  super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
168
227
 
169
228
 
@@ -173,14 +232,15 @@ class Import(AstNode):
173
232
  def __init__(
174
233
  self,
175
234
  lang: Name,
176
- path: "ModulePath",
235
+ path: ModulePath,
177
236
  alias: Optional[Name],
178
- items: Optional["ModuleItems"],
237
+ items: Optional[ModuleItems],
179
238
  is_absorb: bool, # For includes
180
239
  parent: Optional[AstNode],
181
240
  mod_link: Optional[Module],
182
241
  kid: list[AstNode],
183
242
  line: int,
243
+ sym_tab: Optional[SymbolTable] = None,
184
244
  sub_module: Optional["Module"] = None,
185
245
  ) -> None:
186
246
  """Initialize import node."""
@@ -190,7 +250,10 @@ class Import(AstNode):
190
250
  self.items = items
191
251
  self.is_absorb = is_absorb
192
252
  self.sub_module = sub_module
193
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
253
+
254
+ super().__init__(
255
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
256
+ )
194
257
 
195
258
 
196
259
  class ModulePath(AstNode):
@@ -198,16 +261,19 @@ class ModulePath(AstNode):
198
261
 
199
262
  def __init__(
200
263
  self,
201
- path: list[Token],
264
+ path: list[Name],
202
265
  parent: Optional[AstNode],
203
266
  mod_link: Optional[Module],
204
267
  kid: list[AstNode],
205
268
  line: int,
269
+ sym_tab: Optional[SymbolTable] = None,
206
270
  ) -> None:
207
271
  """Initialize module path node."""
208
272
  self.path = path
209
273
  self.path_str = ".".join([p.value for p in path])
210
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
274
+ super().__init__(
275
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
276
+ )
211
277
 
212
278
 
213
279
  class ModuleItems(AstNode):
@@ -215,15 +281,18 @@ class ModuleItems(AstNode):
215
281
 
216
282
  def __init__(
217
283
  self,
218
- items: list["ModuleItem"],
284
+ items: list[ModuleItem],
219
285
  parent: Optional[AstNode],
220
286
  mod_link: Optional[Module],
221
- kid: list["ModuleItem"],
287
+ kid: list[ModuleItem],
222
288
  line: int,
289
+ sym_tab: Optional[SymbolTable] = None,
223
290
  ) -> None:
224
291
  """Initialize module items node."""
225
292
  self.items = items
226
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
293
+ super().__init__(
294
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
295
+ )
227
296
 
228
297
 
229
298
  class ModuleItem(AstNode):
@@ -237,13 +306,16 @@ class ModuleItem(AstNode):
237
306
  mod_link: Optional[Module],
238
307
  kid: list[AstNode],
239
308
  line: int,
309
+ sym_tab: Optional[SymbolTable] = None,
240
310
  body: Optional[AstNode] = None,
241
311
  ) -> None:
242
312
  """Initialize module item node."""
243
313
  self.name = name
244
314
  self.alias = alias
245
315
  self.body = body
246
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
316
+ super().__init__(
317
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
318
+ )
247
319
 
248
320
 
249
321
  class Architype(OOPAccessNode):
@@ -262,6 +334,7 @@ class Architype(OOPAccessNode):
262
334
  mod_link: Optional[Module],
263
335
  kid: list[AstNode],
264
336
  line: int,
337
+ sym_tab: Optional[SymbolTable] = None,
265
338
  ) -> None:
266
339
  """Initialize object arch node."""
267
340
  self.name = name
@@ -271,7 +344,12 @@ class Architype(OOPAccessNode):
271
344
  self.base_classes = base_classes
272
345
  self.body = body
273
346
  super().__init__(
274
- access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
347
+ access=access,
348
+ parent=parent,
349
+ mod_link=mod_link,
350
+ kid=kid,
351
+ line=line,
352
+ sym_tab=sym_tab,
275
353
  )
276
354
 
277
355
 
@@ -281,20 +359,21 @@ class ArchDef(AstNode):
281
359
  def __init__(
282
360
  self,
283
361
  doc: Optional[Token],
284
- mod: Optional[DottedNameList],
285
- arch: ArchRef,
362
+ target: ArchRefChain,
286
363
  body: ArchBlock,
287
364
  parent: Optional[AstNode],
288
365
  mod_link: Optional[Module],
289
366
  kid: list[AstNode],
290
367
  line: int,
368
+ sym_tab: Optional[SymbolTable] = None,
291
369
  ) -> None:
292
370
  """Initialize arch def node."""
293
371
  self.doc = doc
294
- self.mod = mod
295
- self.arch = arch
372
+ self.target = target
296
373
  self.body = body
297
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
374
+ super().__init__(
375
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
376
+ )
298
377
 
299
378
 
300
379
  class Decorators(AstNode):
@@ -307,10 +386,13 @@ class Decorators(AstNode):
307
386
  mod_link: Optional[Module],
308
387
  kid: list[AstNode],
309
388
  line: int,
389
+ sym_tab: Optional[SymbolTable] = None,
310
390
  ) -> None:
311
391
  """Initialize decorators node."""
312
392
  self.calls = calls
313
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
393
+ super().__init__(
394
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
395
+ )
314
396
 
315
397
 
316
398
  class BaseClasses(AstNode):
@@ -323,10 +405,13 @@ class BaseClasses(AstNode):
323
405
  mod_link: Optional[Module],
324
406
  kid: list[AstNode],
325
407
  line: int,
408
+ sym_tab: Optional[SymbolTable] = None,
326
409
  ) -> None:
327
410
  """Initialize base classes node."""
328
411
  self.base_classes = base_classes
329
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
412
+ super().__init__(
413
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
414
+ )
330
415
 
331
416
 
332
417
  class Ability(OOPAccessNode):
@@ -334,10 +419,11 @@ class Ability(OOPAccessNode):
334
419
 
335
420
  def __init__(
336
421
  self,
337
- name_ref: Name | SpecialVarRef | ArchRef,
422
+ name_ref: Name | SpecialVarRef,
338
423
  is_func: bool,
339
424
  is_async: bool,
340
425
  is_static: bool,
426
+ is_abstract: bool,
341
427
  doc: Optional[Token],
342
428
  decorators: Optional[Decorators],
343
429
  access: Optional[Token],
@@ -347,6 +433,7 @@ class Ability(OOPAccessNode):
347
433
  mod_link: Optional[Module],
348
434
  kid: list[AstNode],
349
435
  line: int,
436
+ sym_tab: Optional[SymbolTable] = None,
350
437
  arch_attached: Optional[ArchBlock] = None,
351
438
  ) -> None:
352
439
  """Initialize func arch node."""
@@ -354,13 +441,20 @@ class Ability(OOPAccessNode):
354
441
  self.is_func = is_func
355
442
  self.is_async = is_async
356
443
  self.is_static = is_static
444
+ self.is_abstract = is_abstract
357
445
  self.doc = doc
358
446
  self.decorators = decorators
447
+
359
448
  self.signature = signature
360
449
  self.body = body
361
450
  self.arch_attached = arch_attached
362
451
  super().__init__(
363
- access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
452
+ access=access,
453
+ parent=parent,
454
+ mod_link=mod_link,
455
+ kid=kid,
456
+ line=line,
457
+ sym_tab=sym_tab,
364
458
  )
365
459
 
366
460
  def py_resolve_name(self) -> str:
@@ -379,22 +473,23 @@ class AbilityDef(AstNode):
379
473
  def __init__(
380
474
  self,
381
475
  doc: Optional[Token],
382
- target: Optional[DottedNameList],
383
- ability: ArchRef,
476
+ target: ArchRefChain,
384
477
  signature: FuncSignature | EventSignature,
385
478
  body: CodeBlock,
386
479
  parent: Optional[AstNode],
387
480
  mod_link: Optional[Module],
388
481
  kid: list[AstNode],
389
482
  line: int,
483
+ sym_tab: Optional[SymbolTable] = None,
390
484
  ) -> None:
391
485
  """Initialize ability def node."""
392
486
  self.doc = doc
393
487
  self.target = target
394
- self.ability = ability
395
488
  self.signature = signature
396
489
  self.body = body
397
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
490
+ super().__init__(
491
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
492
+ )
398
493
 
399
494
 
400
495
  class EventSignature(AstNode):
@@ -409,12 +504,15 @@ class EventSignature(AstNode):
409
504
  mod_link: Optional[Module],
410
505
  kid: list[AstNode],
411
506
  line: int,
507
+ sym_tab: Optional[SymbolTable] = None,
412
508
  ) -> None:
413
509
  """Initialize event signature node."""
414
510
  self.event = event
415
511
  self.arch_tag_info = arch_tag_info
416
512
  self.return_type = return_type
417
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
513
+ super().__init__(
514
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
515
+ )
418
516
 
419
517
 
420
518
  class DottedNameList(AstNode):
@@ -422,15 +520,43 @@ class DottedNameList(AstNode):
422
520
 
423
521
  def __init__(
424
522
  self,
425
- names: list[Token | SpecialVarRef | ArchRef | Name],
523
+ names: list[Token | SpecialVarRef | Name],
426
524
  parent: Optional[AstNode],
427
525
  mod_link: Optional[Module],
428
526
  kid: list[AstNode],
429
527
  line: int,
528
+ sym_tab: Optional[SymbolTable] = None,
430
529
  ) -> None:
431
530
  """Initialize name list node."""
432
531
  self.names = names
433
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
532
+ super().__init__(
533
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
534
+ )
535
+
536
+
537
+ class ArchRefChain(AstNode):
538
+ """Arch ref list node type for Jac Ast."""
539
+
540
+ def __init__(
541
+ self,
542
+ archs: list[ArchRef],
543
+ parent: Optional[AstNode],
544
+ mod_link: Optional[Module],
545
+ kid: list[AstNode],
546
+ line: int,
547
+ sym_tab: Optional[SymbolTable] = None,
548
+ ) -> None:
549
+ """Initialize name list ."""
550
+ self.archs = archs
551
+ super().__init__(
552
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
553
+ )
554
+
555
+ def py_resolve_name(self) -> str:
556
+ """Resolve name."""
557
+ return ".".join(
558
+ [f"({x.arch.value[1]}){x.py_resolve_name()}" for x in self.archs]
559
+ )
434
560
 
435
561
 
436
562
  class FuncSignature(AstNode):
@@ -444,11 +570,14 @@ class FuncSignature(AstNode):
444
570
  mod_link: Optional[Module],
445
571
  kid: list[AstNode],
446
572
  line: int,
573
+ sym_tab: Optional[SymbolTable] = None,
447
574
  ) -> None:
448
575
  """Initialize method signature node."""
449
576
  self.params = params
450
577
  self.return_type = return_type
451
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
578
+ super().__init__(
579
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
580
+ )
452
581
 
453
582
 
454
583
  class FuncParams(AstNode):
@@ -461,10 +590,13 @@ class FuncParams(AstNode):
461
590
  mod_link: Optional[Module],
462
591
  kid: list[AstNode],
463
592
  line: int,
593
+ sym_tab: Optional[SymbolTable] = None,
464
594
  ) -> None:
465
595
  """Initialize method params node."""
466
596
  self.params = params
467
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
597
+ super().__init__(
598
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
599
+ )
468
600
 
469
601
 
470
602
  class ParamVar(AstNode):
@@ -480,13 +612,16 @@ class ParamVar(AstNode):
480
612
  mod_link: Optional[Module],
481
613
  kid: list[AstNode],
482
614
  line: int,
615
+ sym_tab: Optional[SymbolTable] = None,
483
616
  ) -> None:
484
617
  """Initialize param var node."""
485
618
  self.name = name
486
619
  self.unpack = unpack
487
620
  self.type_tag = type_tag
488
621
  self.value = value
489
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
622
+ super().__init__(
623
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
624
+ )
490
625
 
491
626
 
492
627
  class Enum(OOPAccessNode):
@@ -496,7 +631,7 @@ class Enum(OOPAccessNode):
496
631
  self,
497
632
  name: Name,
498
633
  doc: Optional[Token],
499
- decorators: Optional["Decorators"],
634
+ decorators: Optional[Decorators],
500
635
  access: Optional[Token],
501
636
  base_classes: "BaseClasses",
502
637
  body: Optional["EnumBlock"],
@@ -504,6 +639,7 @@ class Enum(OOPAccessNode):
504
639
  mod_link: Optional[Module],
505
640
  kid: list[AstNode],
506
641
  line: int,
642
+ sym_tab: Optional[SymbolTable] = None,
507
643
  ) -> None:
508
644
  """Initialize object arch node."""
509
645
  self.name = name
@@ -512,7 +648,12 @@ class Enum(OOPAccessNode):
512
648
  self.base_classes = base_classes
513
649
  self.body = body
514
650
  super().__init__(
515
- access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
651
+ access=access,
652
+ parent=parent,
653
+ mod_link=mod_link,
654
+ kid=kid,
655
+ line=line,
656
+ sym_tab=sym_tab,
516
657
  )
517
658
 
518
659
 
@@ -522,20 +663,21 @@ class EnumDef(AstNode):
522
663
  def __init__(
523
664
  self,
524
665
  doc: Optional[Token],
525
- enum: ArchRef,
526
- mod: Optional[DottedNameList],
666
+ target: ArchRefChain,
527
667
  body: EnumBlock,
528
668
  parent: Optional[AstNode],
529
669
  mod_link: Optional[Module],
530
670
  kid: list[AstNode],
531
671
  line: int,
672
+ sym_tab: Optional[SymbolTable] = None,
532
673
  ) -> None:
533
674
  """Initialize arch def node."""
534
- self.enum = enum
535
675
  self.doc = doc
536
- self.mod = mod
676
+ self.target = target
537
677
  self.body = body
538
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
678
+ super().__init__(
679
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
680
+ )
539
681
 
540
682
 
541
683
  class EnumBlock(AstNode):
@@ -548,10 +690,13 @@ class EnumBlock(AstNode):
548
690
  mod_link: Optional[Module],
549
691
  kid: list[AstNode],
550
692
  line: int,
693
+ sym_tab: Optional[SymbolTable] = None,
551
694
  ) -> None:
552
695
  """Initialize enum block node."""
553
696
  self.stmts = stmts
554
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
697
+ super().__init__(
698
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
699
+ )
555
700
 
556
701
 
557
702
  class ArchBlock(AstNode):
@@ -559,43 +704,48 @@ class ArchBlock(AstNode):
559
704
 
560
705
  def __init__(
561
706
  self,
562
- members: list["ArchHas | Ability"],
707
+ members: list[ArchHas | Ability],
563
708
  parent: Optional[AstNode],
564
709
  mod_link: Optional[Module],
565
710
  kid: list[AstNode],
566
711
  line: int,
712
+ sym_tab: Optional[SymbolTable] = None,
567
713
  ) -> None:
568
714
  """Initialize arch block node."""
569
715
  self.members = members
570
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
716
+ super().__init__(
717
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
718
+ )
571
719
 
572
720
 
573
721
  class ArchHas(OOPAccessNode):
574
722
  """HasStmt node type for Jac Ast."""
575
723
 
576
- counter: int = 1
577
-
578
724
  def __init__(
579
725
  self,
580
726
  doc: Optional[Token],
581
727
  is_static: bool,
582
728
  access: Optional[Token],
583
- vars: "HasVarList",
729
+ vars: HasVarList,
584
730
  is_frozen: bool,
585
731
  parent: Optional[AstNode],
586
732
  mod_link: Optional[Module],
587
733
  kid: list[AstNode],
588
734
  line: int,
735
+ sym_tab: Optional[SymbolTable] = None,
589
736
  ) -> None:
590
737
  """Initialize has statement node."""
591
738
  self.doc = doc
592
739
  self.is_static = is_static
593
740
  self.vars = vars
594
741
  self.is_frozen = is_frozen
595
- self.h_id = ArchHas.counter
596
- ArchHas.counter += 1
597
742
  super().__init__(
598
- access=access, parent=parent, mod_link=mod_link, kid=kid, line=line
743
+ access=access,
744
+ parent=parent,
745
+ mod_link=mod_link,
746
+ kid=kid,
747
+ line=line,
748
+ sym_tab=sym_tab,
599
749
  )
600
750
 
601
751
 
@@ -609,10 +759,13 @@ class HasVarList(AstNode):
609
759
  mod_link: Optional[Module],
610
760
  kid: list[AstNode],
611
761
  line: int,
762
+ sym_tab: Optional[SymbolTable] = None,
612
763
  ) -> None:
613
764
  """Initialize has var list node."""
614
765
  self.vars = vars
615
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
766
+ super().__init__(
767
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
768
+ )
616
769
 
617
770
 
618
771
  class HasVar(AstNode):
@@ -627,12 +780,15 @@ class HasVar(AstNode):
627
780
  mod_link: Optional[Module],
628
781
  kid: list[AstNode],
629
782
  line: int,
783
+ sym_tab: Optional[SymbolTable] = None,
630
784
  ) -> None:
631
785
  """Initialize has var node."""
632
786
  self.name = name
633
787
  self.type_tag = type_tag
634
788
  self.value = value
635
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
789
+ super().__init__(
790
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
791
+ )
636
792
 
637
793
 
638
794
  class TypeSpecList(AstNode):
@@ -645,10 +801,13 @@ class TypeSpecList(AstNode):
645
801
  mod_link: Optional[Module],
646
802
  kid: list[AstNode],
647
803
  line: int,
804
+ sym_tab: Optional[SymbolTable] = None,
648
805
  ) -> None:
649
806
  """Initialize type list node."""
650
807
  self.types = types
651
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
808
+ super().__init__(
809
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
810
+ )
652
811
 
653
812
 
654
813
  class TypeSpec(AstNode):
@@ -664,13 +823,16 @@ class TypeSpec(AstNode):
664
823
  mod_link: Optional[Module],
665
824
  kid: list[AstNode],
666
825
  line: int,
826
+ sym_tab: Optional[SymbolTable] = None,
667
827
  ) -> None:
668
828
  """Initialize type spec node."""
669
829
  self.spec_type = spec_type
670
830
  self.list_nest = list_nest
671
831
  self.dict_nest = dict_nest
672
832
  self.null_ok = null_ok
673
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
833
+ super().__init__(
834
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
835
+ )
674
836
 
675
837
 
676
838
  class CodeBlock(AstNode):
@@ -683,10 +845,13 @@ class CodeBlock(AstNode):
683
845
  mod_link: Optional[Module],
684
846
  kid: list[AstNode],
685
847
  line: int,
848
+ sym_tab: Optional[SymbolTable] = None,
686
849
  ) -> None:
687
850
  """Initialize code block node."""
688
851
  self.stmts = stmts
689
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
852
+ super().__init__(
853
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
854
+ )
690
855
 
691
856
 
692
857
  class TypedCtxBlock(AstNode):
@@ -700,11 +865,14 @@ class TypedCtxBlock(AstNode):
700
865
  mod_link: Optional[Module],
701
866
  kid: list[AstNode],
702
867
  line: int,
868
+ sym_tab: Optional[SymbolTable] = None,
703
869
  ) -> None:
704
870
  """Initialize typed context block node."""
705
871
  self.type_ctx = type_ctx
706
872
  self.body = body
707
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
873
+ super().__init__(
874
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
875
+ )
708
876
 
709
877
 
710
878
  class IfStmt(AstNode):
@@ -720,13 +888,16 @@ class IfStmt(AstNode):
720
888
  mod_link: Optional[Module],
721
889
  kid: list[AstNode],
722
890
  line: int,
891
+ sym_tab: Optional[SymbolTable] = None,
723
892
  ) -> None:
724
893
  """Initialize if statement node."""
725
894
  self.condition = condition
726
895
  self.body = body
727
896
  self.elseifs = elseifs
728
897
  self.else_body = else_body
729
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
898
+ super().__init__(
899
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
900
+ )
730
901
 
731
902
 
732
903
  class ElseIfs(AstNode):
@@ -739,10 +910,13 @@ class ElseIfs(AstNode):
739
910
  mod_link: Optional[Module],
740
911
  kid: list["IfStmt"],
741
912
  line: int,
913
+ sym_tab: Optional[SymbolTable] = None,
742
914
  ) -> None:
743
915
  """Initialize elseifs node."""
744
916
  self.elseifs = elseifs
745
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
917
+ super().__init__(
918
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
919
+ )
746
920
 
747
921
 
748
922
  class ElseStmt(AstNode):
@@ -755,10 +929,13 @@ class ElseStmt(AstNode):
755
929
  mod_link: Optional[Module],
756
930
  kid: list[AstNode],
757
931
  line: int,
932
+ sym_tab: Optional[SymbolTable] = None,
758
933
  ) -> None:
759
934
  """Initialize else node."""
760
935
  self.body = body
761
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
936
+ super().__init__(
937
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
938
+ )
762
939
 
763
940
 
764
941
  class TryStmt(AstNode):
@@ -773,12 +950,15 @@ class TryStmt(AstNode):
773
950
  mod_link: Optional[Module],
774
951
  kid: list[AstNode],
775
952
  line: int,
953
+ sym_tab: Optional[SymbolTable] = None,
776
954
  ) -> None:
777
955
  """Initialize try statement node."""
778
956
  self.body = body
779
957
  self.excepts = excepts
780
958
  self.finally_body = finally_body
781
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
959
+ super().__init__(
960
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
961
+ )
782
962
 
783
963
 
784
964
  class ExceptList(AstNode):
@@ -791,10 +971,13 @@ class ExceptList(AstNode):
791
971
  mod_link: Optional[Module],
792
972
  kid: list[AstNode],
793
973
  line: int,
974
+ sym_tab: Optional[SymbolTable] = None,
794
975
  ) -> None:
795
976
  """Initialize excepts node."""
796
977
  self.excepts = excepts
797
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
978
+ super().__init__(
979
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
980
+ )
798
981
 
799
982
 
800
983
  class Except(AstNode):
@@ -809,12 +992,15 @@ class Except(AstNode):
809
992
  mod_link: Optional[Module],
810
993
  kid: list[AstNode],
811
994
  line: int,
995
+ sym_tab: Optional[SymbolTable] = None,
812
996
  ) -> None:
813
997
  """Initialize except node."""
814
998
  self.ex_type = ex_type
815
999
  self.name = name
816
1000
  self.body = body
817
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1001
+ super().__init__(
1002
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1003
+ )
818
1004
 
819
1005
 
820
1006
  class FinallyStmt(AstNode):
@@ -827,10 +1013,13 @@ class FinallyStmt(AstNode):
827
1013
  mod_link: Optional[Module],
828
1014
  kid: list[AstNode],
829
1015
  line: int,
1016
+ sym_tab: Optional[SymbolTable] = None,
830
1017
  ) -> None:
831
1018
  """Initialize finally statement node."""
832
1019
  self.body = body
833
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1020
+ super().__init__(
1021
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1022
+ )
834
1023
 
835
1024
 
836
1025
  class IterForStmt(AstNode):
@@ -838,21 +1027,24 @@ class IterForStmt(AstNode):
838
1027
 
839
1028
  def __init__(
840
1029
  self,
841
- iter: "Assignment",
1030
+ iter: Assignment,
842
1031
  condition: ExprType,
843
1032
  count_by: ExprType,
844
- body: "CodeBlock",
1033
+ body: CodeBlock,
845
1034
  parent: Optional[AstNode],
846
1035
  mod_link: Optional[Module],
847
1036
  kid: list[AstNode],
848
1037
  line: int,
1038
+ sym_tab: Optional[SymbolTable] = None,
849
1039
  ) -> None:
850
1040
  """Initialize iter for node."""
851
1041
  self.iter = iter
852
1042
  self.condition = condition
853
1043
  self.count_by = count_by
854
1044
  self.body = body
855
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1045
+ super().__init__(
1046
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1047
+ )
856
1048
 
857
1049
 
858
1050
  class InForStmt(AstNode):
@@ -867,12 +1059,15 @@ class InForStmt(AstNode):
867
1059
  mod_link: Optional[Module],
868
1060
  kid: list[AstNode],
869
1061
  line: int,
1062
+ sym_tab: Optional[SymbolTable] = None,
870
1063
  ) -> None:
871
1064
  """Initialize in for node."""
872
1065
  self.name_list = name_list
873
1066
  self.collection = collection
874
1067
  self.body = body
875
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1068
+ super().__init__(
1069
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1070
+ )
876
1071
 
877
1072
 
878
1073
  class NameList(AstNode):
@@ -885,10 +1080,13 @@ class NameList(AstNode):
885
1080
  mod_link: Optional[Module],
886
1081
  kid: list[AstNode],
887
1082
  line: int,
1083
+ sym_tab: Optional[SymbolTable] = None,
888
1084
  ) -> None:
889
1085
  """Initialize name list node."""
890
1086
  self.names = names
891
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1087
+ super().__init__(
1088
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1089
+ )
892
1090
 
893
1091
 
894
1092
  class WhileStmt(AstNode):
@@ -902,11 +1100,14 @@ class WhileStmt(AstNode):
902
1100
  mod_link: Optional[Module],
903
1101
  kid: list[AstNode],
904
1102
  line: int,
1103
+ sym_tab: Optional[SymbolTable] = None,
905
1104
  ) -> None:
906
1105
  """Initialize while statement node."""
907
1106
  self.condition = condition
908
1107
  self.body = body
909
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1108
+ super().__init__(
1109
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1110
+ )
910
1111
 
911
1112
 
912
1113
  class WithStmt(AstNode):
@@ -920,11 +1121,14 @@ class WithStmt(AstNode):
920
1121
  mod_link: Optional[Module],
921
1122
  kid: list[AstNode],
922
1123
  line: int,
1124
+ sym_tab: Optional[SymbolTable] = None,
923
1125
  ) -> None:
924
1126
  """Initialize with statement node."""
925
1127
  self.exprs = exprs
926
1128
  self.body = body
927
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1129
+ super().__init__(
1130
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1131
+ )
928
1132
 
929
1133
 
930
1134
  class ExprAsItemList(AstNode):
@@ -937,10 +1141,13 @@ class ExprAsItemList(AstNode):
937
1141
  mod_link: Optional[Module],
938
1142
  kid: list["ExprAsItem"],
939
1143
  line: int,
1144
+ sym_tab: Optional[SymbolTable] = None,
940
1145
  ) -> None:
941
1146
  """Initialize module items node."""
942
1147
  self.items = items
943
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1148
+ super().__init__(
1149
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1150
+ )
944
1151
 
945
1152
 
946
1153
  class ExprAsItem(AstNode):
@@ -954,11 +1161,14 @@ class ExprAsItem(AstNode):
954
1161
  mod_link: Optional[Module],
955
1162
  kid: list[AstNode],
956
1163
  line: int,
1164
+ sym_tab: Optional[SymbolTable] = None,
957
1165
  ) -> None:
958
1166
  """Initialize module item node."""
959
1167
  self.expr = expr
960
1168
  self.alias = alias
961
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1169
+ super().__init__(
1170
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1171
+ )
962
1172
 
963
1173
 
964
1174
  class RaiseStmt(AstNode):
@@ -971,10 +1181,13 @@ class RaiseStmt(AstNode):
971
1181
  mod_link: Optional[Module],
972
1182
  kid: list[AstNode],
973
1183
  line: int,
1184
+ sym_tab: Optional[SymbolTable] = None,
974
1185
  ) -> None:
975
1186
  """Initialize raise statement node."""
976
1187
  self.cause = cause
977
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1188
+ super().__init__(
1189
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1190
+ )
978
1191
 
979
1192
 
980
1193
  class AssertStmt(AstNode):
@@ -988,11 +1201,14 @@ class AssertStmt(AstNode):
988
1201
  mod_link: Optional[Module],
989
1202
  kid: list[AstNode],
990
1203
  line: int,
1204
+ sym_tab: Optional[SymbolTable] = None,
991
1205
  ) -> None:
992
1206
  """Initialize assert statement node."""
993
1207
  self.condition = condition
994
1208
  self.error_msg = error_msg
995
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1209
+ super().__init__(
1210
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1211
+ )
996
1212
 
997
1213
 
998
1214
  class CtrlStmt(AstNode):
@@ -1005,10 +1221,13 @@ class CtrlStmt(AstNode):
1005
1221
  mod_link: Optional[Module],
1006
1222
  kid: list[AstNode],
1007
1223
  line: int,
1224
+ sym_tab: Optional[SymbolTable] = None,
1008
1225
  ) -> None:
1009
1226
  """Initialize control statement node."""
1010
1227
  self.ctrl = ctrl
1011
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1228
+ super().__init__(
1229
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1230
+ )
1012
1231
 
1013
1232
 
1014
1233
  class DeleteStmt(AstNode):
@@ -1021,10 +1240,13 @@ class DeleteStmt(AstNode):
1021
1240
  mod_link: Optional[Module],
1022
1241
  kid: list[AstNode],
1023
1242
  line: int,
1243
+ sym_tab: Optional[SymbolTable] = None,
1024
1244
  ) -> None:
1025
1245
  """Initialize delete statement node."""
1026
1246
  self.target = target
1027
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1247
+ super().__init__(
1248
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1249
+ )
1028
1250
 
1029
1251
 
1030
1252
  class ReportStmt(AstNode):
@@ -1037,10 +1259,13 @@ class ReportStmt(AstNode):
1037
1259
  mod_link: Optional[Module],
1038
1260
  kid: list[AstNode],
1039
1261
  line: int,
1262
+ sym_tab: Optional[SymbolTable] = None,
1040
1263
  ) -> None:
1041
1264
  """Initialize report statement node."""
1042
1265
  self.expr = expr
1043
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1266
+ super().__init__(
1267
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1268
+ )
1044
1269
 
1045
1270
 
1046
1271
  class ReturnStmt(AstNode):
@@ -1053,10 +1278,13 @@ class ReturnStmt(AstNode):
1053
1278
  mod_link: Optional[Module],
1054
1279
  kid: list[AstNode],
1055
1280
  line: int,
1281
+ sym_tab: Optional[SymbolTable] = None,
1056
1282
  ) -> None:
1057
1283
  """Initialize return statement node."""
1058
1284
  self.expr = expr
1059
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1285
+ super().__init__(
1286
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1287
+ )
1060
1288
 
1061
1289
 
1062
1290
  class YieldStmt(AstNode):
@@ -1069,10 +1297,13 @@ class YieldStmt(AstNode):
1069
1297
  mod_link: Optional[Module],
1070
1298
  kid: list[AstNode],
1071
1299
  line: int,
1300
+ sym_tab: Optional[SymbolTable] = None,
1072
1301
  ) -> None:
1073
1302
  """Initialize yeild statement node."""
1074
1303
  self.expr = expr
1075
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1304
+ super().__init__(
1305
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1306
+ )
1076
1307
 
1077
1308
 
1078
1309
  class IgnoreStmt(AstNode):
@@ -1085,15 +1316,35 @@ class IgnoreStmt(AstNode):
1085
1316
  mod_link: Optional[Module],
1086
1317
  kid: list[AstNode],
1087
1318
  line: int,
1088
- from_walker: bool = False,
1319
+ sym_tab: Optional[SymbolTable] = None,
1089
1320
  ) -> None:
1090
1321
  """Initialize ignore statement node."""
1091
1322
  self.target = target
1323
+ super().__init__(
1324
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1325
+ )
1326
+
1327
+
1328
+ class WalkerStmtOnlyNode(AstNode):
1329
+ """WalkerStmtOnlyNode node type for Jac Ast."""
1330
+
1331
+ def __init__(
1332
+ self,
1333
+ parent: Optional[AstNode],
1334
+ mod_link: Optional[Module],
1335
+ kid: list[AstNode],
1336
+ line: int,
1337
+ sym_tab: Optional[SymbolTable] = None,
1338
+ from_walker: bool = False,
1339
+ ) -> None:
1340
+ """Initialize walker statement only node."""
1092
1341
  self.from_walker = from_walker
1093
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1342
+ super().__init__(
1343
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1344
+ )
1094
1345
 
1095
1346
 
1096
- class VisitStmt(AstNode):
1347
+ class VisitStmt(WalkerStmtOnlyNode):
1097
1348
  """VisitStmt node type for Jac Ast."""
1098
1349
 
1099
1350
  def __init__(
@@ -1105,17 +1356,24 @@ class VisitStmt(AstNode):
1105
1356
  mod_link: Optional[Module],
1106
1357
  kid: list[AstNode],
1107
1358
  line: int,
1359
+ sym_tab: Optional[SymbolTable] = None,
1108
1360
  from_walker: bool = False,
1109
1361
  ) -> None:
1110
1362
  """Initialize visit statement node."""
1111
1363
  self.vis_type = vis_type
1112
1364
  self.target = target
1113
1365
  self.else_body = else_body
1114
- self.from_walker = from_walker
1115
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1366
+ super().__init__(
1367
+ parent=parent,
1368
+ mod_link=mod_link,
1369
+ kid=kid,
1370
+ line=line,
1371
+ sym_tab=sym_tab,
1372
+ from_walker=from_walker,
1373
+ )
1116
1374
 
1117
1375
 
1118
- class RevisitStmt(AstNode):
1376
+ class RevisitStmt(WalkerStmtOnlyNode):
1119
1377
  """ReVisitStmt node type for Jac Ast."""
1120
1378
 
1121
1379
  def __init__(
@@ -1126,14 +1384,23 @@ class RevisitStmt(AstNode):
1126
1384
  mod_link: Optional[Module],
1127
1385
  kid: list[AstNode],
1128
1386
  line: int,
1387
+ sym_tab: Optional[SymbolTable] = None,
1388
+ from_walker: bool = False,
1129
1389
  ) -> None:
1130
1390
  """Initialize revisit statement node."""
1131
1391
  self.hops = hops
1132
1392
  self.else_body = else_body
1133
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1393
+ super().__init__(
1394
+ parent=parent,
1395
+ mod_link=mod_link,
1396
+ kid=kid,
1397
+ line=line,
1398
+ sym_tab=sym_tab,
1399
+ from_walker=from_walker,
1400
+ )
1134
1401
 
1135
1402
 
1136
- class DisengageStmt(AstNode):
1403
+ class DisengageStmt(WalkerStmtOnlyNode):
1137
1404
  """DisengageStmt node type for Jac Ast."""
1138
1405
 
1139
1406
  def __init__(
@@ -1142,11 +1409,18 @@ class DisengageStmt(AstNode):
1142
1409
  mod_link: Optional[Module],
1143
1410
  kid: list[AstNode],
1144
1411
  line: int,
1412
+ sym_tab: Optional[SymbolTable] = None,
1145
1413
  from_walker: bool = False,
1146
1414
  ) -> None:
1147
1415
  """Initialize disengage statement node."""
1148
- self.from_walker = from_walker
1149
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1416
+ super().__init__(
1417
+ parent=parent,
1418
+ mod_link=mod_link,
1419
+ kid=kid,
1420
+ line=line,
1421
+ sym_tab=sym_tab,
1422
+ from_walker=from_walker,
1423
+ )
1150
1424
 
1151
1425
 
1152
1426
  class AwaitStmt(AstNode):
@@ -1159,10 +1433,13 @@ class AwaitStmt(AstNode):
1159
1433
  mod_link: Optional[Module],
1160
1434
  kid: list[AstNode],
1161
1435
  line: int,
1436
+ sym_tab: Optional[SymbolTable] = None,
1162
1437
  ) -> None:
1163
1438
  """Initialize sync statement node."""
1164
1439
  self.target = target
1165
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1440
+ super().__init__(
1441
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1442
+ )
1166
1443
 
1167
1444
 
1168
1445
  class Assignment(AstNode):
@@ -1171,20 +1448,23 @@ class Assignment(AstNode):
1171
1448
  def __init__(
1172
1449
  self,
1173
1450
  is_static: bool,
1174
- target: "AtomType",
1451
+ target: AtomType,
1175
1452
  value: ExprType,
1176
1453
  mutable: bool,
1177
1454
  parent: Optional[AstNode],
1178
1455
  mod_link: Optional[Module],
1179
1456
  kid: list[AstNode],
1180
1457
  line: int,
1458
+ sym_tab: Optional[SymbolTable] = None,
1181
1459
  ) -> None:
1182
1460
  """Initialize assignment node."""
1183
1461
  self.is_static = is_static
1184
1462
  self.target = target
1185
1463
  self.value = value
1186
1464
  self.mutable = mutable
1187
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1465
+ super().__init__(
1466
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1467
+ )
1188
1468
 
1189
1469
 
1190
1470
  class BinaryExpr(AstNode):
@@ -1199,12 +1479,15 @@ class BinaryExpr(AstNode):
1199
1479
  mod_link: Optional[Module],
1200
1480
  kid: list[AstNode],
1201
1481
  line: int,
1482
+ sym_tab: Optional[SymbolTable] = None,
1202
1483
  ) -> None:
1203
1484
  """Initialize binary expression node."""
1204
1485
  self.left = left
1205
1486
  self.right = right
1206
1487
  self.op = op
1207
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1488
+ super().__init__(
1489
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1490
+ )
1208
1491
 
1209
1492
 
1210
1493
  class IfElseExpr(AstNode):
@@ -1219,12 +1502,15 @@ class IfElseExpr(AstNode):
1219
1502
  mod_link: Optional[Module],
1220
1503
  kid: list[AstNode],
1221
1504
  line: int,
1505
+ sym_tab: Optional[SymbolTable] = None,
1222
1506
  ) -> None:
1223
1507
  """Initialize if else expression node."""
1224
1508
  self.condition = condition
1225
1509
  self.value = value
1226
1510
  self.else_value = else_value
1227
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1511
+ super().__init__(
1512
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1513
+ )
1228
1514
 
1229
1515
 
1230
1516
  class UnaryExpr(AstNode):
@@ -1238,11 +1524,14 @@ class UnaryExpr(AstNode):
1238
1524
  mod_link: Optional[Module],
1239
1525
  kid: list[AstNode],
1240
1526
  line: int,
1527
+ sym_tab: Optional[SymbolTable] = None,
1241
1528
  ) -> None:
1242
1529
  """Initialize unary expression node."""
1243
1530
  self.operand = operand
1244
1531
  self.op = op
1245
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1532
+ super().__init__(
1533
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1534
+ )
1246
1535
 
1247
1536
 
1248
1537
  class UnpackExpr(AstNode):
@@ -1256,11 +1545,14 @@ class UnpackExpr(AstNode):
1256
1545
  mod_link: Optional[Module],
1257
1546
  kid: list[AstNode],
1258
1547
  line: int,
1548
+ sym_tab: Optional[SymbolTable] = None,
1259
1549
  ) -> None:
1260
1550
  """Initialize unpack expression node."""
1261
1551
  self.target = target
1262
1552
  self.is_dict = is_dict
1263
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1553
+ super().__init__(
1554
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1555
+ )
1264
1556
 
1265
1557
 
1266
1558
  class MultiString(AstNode):
@@ -1273,10 +1565,13 @@ class MultiString(AstNode):
1273
1565
  mod_link: Optional[Module],
1274
1566
  kid: list[AstNode],
1275
1567
  line: int,
1568
+ sym_tab: Optional[SymbolTable] = None,
1276
1569
  ) -> None:
1277
1570
  """Initialize multi string expression node."""
1278
1571
  self.strings = strings
1279
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1572
+ super().__init__(
1573
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1574
+ )
1280
1575
 
1281
1576
 
1282
1577
  class ExprList(AstNode):
@@ -1289,10 +1584,13 @@ class ExprList(AstNode):
1289
1584
  mod_link: Optional[Module],
1290
1585
  kid: list[AstNode],
1291
1586
  line: int,
1587
+ sym_tab: Optional[SymbolTable] = None,
1292
1588
  ) -> None:
1293
1589
  """Initialize expr value node."""
1294
1590
  self.values = values
1295
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1591
+ super().__init__(
1592
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1593
+ )
1296
1594
 
1297
1595
 
1298
1596
  class ListVal(ExprList):
@@ -1315,12 +1613,15 @@ class TupleVal(AstNode):
1315
1613
  mod_link: Optional[Module],
1316
1614
  kid: list[AstNode],
1317
1615
  line: int,
1616
+ sym_tab: Optional[SymbolTable] = None,
1318
1617
  ) -> None:
1319
1618
  """Initialize tuple value node."""
1320
1619
  self.first_expr = first_expr
1321
1620
  self.exprs = exprs
1322
1621
  self.assigns = assigns
1323
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1622
+ super().__init__(
1623
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1624
+ )
1324
1625
 
1325
1626
 
1326
1627
  class DictVal(AstNode):
@@ -1333,10 +1634,13 @@ class DictVal(AstNode):
1333
1634
  mod_link: Optional[Module],
1334
1635
  kid: list[AstNode],
1335
1636
  line: int,
1637
+ sym_tab: Optional[SymbolTable] = None,
1336
1638
  ) -> None:
1337
1639
  """Initialize dict expression node."""
1338
1640
  self.kv_pairs = kv_pairs
1339
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1641
+ super().__init__(
1642
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1643
+ )
1340
1644
 
1341
1645
 
1342
1646
  class InnerCompr(AstNode):
@@ -1355,6 +1659,7 @@ class InnerCompr(AstNode):
1355
1659
  mod_link: Optional[Module],
1356
1660
  kid: list[AstNode],
1357
1661
  line: int,
1662
+ sym_tab: Optional[SymbolTable] = None,
1358
1663
  ) -> None:
1359
1664
  """Initialize comprehension expression node."""
1360
1665
  self.out_expr = out_expr
@@ -1364,7 +1669,10 @@ class InnerCompr(AstNode):
1364
1669
  self.is_list = is_list
1365
1670
  self.is_gen = is_gen
1366
1671
  self.is_set = is_set
1367
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1672
+
1673
+ super().__init__(
1674
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1675
+ )
1368
1676
 
1369
1677
 
1370
1678
  class DictCompr(AstNode):
@@ -1381,6 +1689,7 @@ class DictCompr(AstNode):
1381
1689
  mod_link: Optional[Module],
1382
1690
  kid: list[AstNode],
1383
1691
  line: int,
1692
+ sym_tab: Optional[SymbolTable] = None,
1384
1693
  ) -> None:
1385
1694
  """Initialize comprehension expression node."""
1386
1695
  self.outk_expr = outk_expr
@@ -1388,7 +1697,9 @@ class DictCompr(AstNode):
1388
1697
  self.name_list = name_list
1389
1698
  self.collection = collection
1390
1699
  self.conditional = conditional
1391
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1700
+ super().__init__(
1701
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1702
+ )
1392
1703
 
1393
1704
 
1394
1705
  class KVPair(AstNode):
@@ -1402,11 +1713,14 @@ class KVPair(AstNode):
1402
1713
  mod_link: Optional[Module],
1403
1714
  kid: list[AstNode],
1404
1715
  line: int,
1716
+ sym_tab: Optional[SymbolTable] = None,
1405
1717
  ) -> None:
1406
1718
  """Initialize key value pair expression node."""
1407
1719
  self.key = key
1408
1720
  self.value = value
1409
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1721
+ super().__init__(
1722
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1723
+ )
1410
1724
 
1411
1725
 
1412
1726
  class AtomTrailer(AstNode):
@@ -1414,19 +1728,22 @@ class AtomTrailer(AstNode):
1414
1728
 
1415
1729
  def __init__(
1416
1730
  self,
1417
- target: "AtomType",
1418
- right: "IndexSlice | ArchRef | Token",
1731
+ target: AtomType,
1732
+ right: IndexSlice | ArchRef | Token,
1419
1733
  null_ok: bool,
1420
1734
  parent: Optional[AstNode],
1421
1735
  mod_link: Optional[Module],
1422
1736
  kid: list[AstNode],
1423
1737
  line: int,
1738
+ sym_tab: Optional[SymbolTable] = None,
1424
1739
  ) -> None:
1425
1740
  """Initialize atom trailer expression node."""
1426
1741
  self.target = target
1427
1742
  self.right = right
1428
1743
  self.null_ok = null_ok
1429
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1744
+ super().__init__(
1745
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1746
+ )
1430
1747
 
1431
1748
 
1432
1749
  class FuncCall(AstNode):
@@ -1440,11 +1757,14 @@ class FuncCall(AstNode):
1440
1757
  mod_link: Optional[Module],
1441
1758
  kid: list[AstNode],
1442
1759
  line: int,
1760
+ sym_tab: Optional[SymbolTable] = None,
1443
1761
  ) -> None:
1444
1762
  """Initialize function call expression node."""
1445
1763
  self.target = target
1446
1764
  self.params = params
1447
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1765
+ super().__init__(
1766
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1767
+ )
1448
1768
 
1449
1769
 
1450
1770
  class ParamList(AstNode):
@@ -1458,11 +1778,14 @@ class ParamList(AstNode):
1458
1778
  mod_link: Optional[Module],
1459
1779
  kid: list[AstNode],
1460
1780
  line: int,
1781
+ sym_tab: Optional[SymbolTable] = None,
1461
1782
  ) -> None:
1462
1783
  """Initialize parameter list expression node."""
1463
1784
  self.p_args = p_args
1464
1785
  self.p_kwargs = p_kwargs
1465
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1786
+ super().__init__(
1787
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1788
+ )
1466
1789
 
1467
1790
 
1468
1791
  class AssignmentList(AstNode):
@@ -1475,10 +1798,13 @@ class AssignmentList(AstNode):
1475
1798
  mod_link: Optional[Module],
1476
1799
  kid: list[AstNode],
1477
1800
  line: int,
1801
+ sym_tab: Optional[SymbolTable] = None,
1478
1802
  ) -> None:
1479
1803
  """Initialize expr value node."""
1480
1804
  self.values = values
1481
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1805
+ super().__init__(
1806
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1807
+ )
1482
1808
 
1483
1809
 
1484
1810
  class IndexSlice(AstNode):
@@ -1493,12 +1819,15 @@ class IndexSlice(AstNode):
1493
1819
  mod_link: Optional[Module],
1494
1820
  kid: list[AstNode],
1495
1821
  line: int,
1822
+ sym_tab: Optional[SymbolTable] = None,
1496
1823
  ) -> None:
1497
1824
  """Initialize index slice expression node."""
1498
1825
  self.start = start
1499
1826
  self.stop = stop
1500
1827
  self.is_range = is_range
1501
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1828
+ super().__init__(
1829
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1830
+ )
1502
1831
 
1503
1832
 
1504
1833
  class ArchRef(AstNode):
@@ -1512,11 +1841,14 @@ class ArchRef(AstNode):
1512
1841
  mod_link: Optional[Module],
1513
1842
  kid: list[AstNode],
1514
1843
  line: int,
1844
+ sym_tab: Optional[SymbolTable] = None,
1515
1845
  ) -> None:
1516
1846
  """Initialize global reference expression node."""
1517
1847
  self.name_ref = name_ref
1518
1848
  self.arch = arch
1519
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1849
+ super().__init__(
1850
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1851
+ )
1520
1852
 
1521
1853
  def py_resolve_name(self) -> str:
1522
1854
  """Resolve name."""
@@ -1538,10 +1870,13 @@ class SpecialVarRef(AstNode):
1538
1870
  mod_link: Optional[Module],
1539
1871
  kid: list[AstNode],
1540
1872
  line: int,
1873
+ sym_tab: Optional[SymbolTable] = None,
1541
1874
  ) -> None:
1542
1875
  """Initialize special var reference expression node."""
1543
1876
  self.var = var
1544
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1877
+ super().__init__(
1878
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1879
+ )
1545
1880
 
1546
1881
  def py_resolve_name(self) -> str:
1547
1882
  """Resolve name."""
@@ -1559,7 +1894,7 @@ class SpecialVarRef(AstNode):
1559
1894
  raise NotImplementedError("ICE: Special var reference not implemented")
1560
1895
 
1561
1896
 
1562
- class EdgeOpRef(AstNode):
1897
+ class EdgeOpRef(WalkerStmtOnlyNode):
1563
1898
  """EdgeOpRef node type for Jac Ast."""
1564
1899
 
1565
1900
  def __init__(
@@ -1571,14 +1906,21 @@ class EdgeOpRef(AstNode):
1571
1906
  mod_link: Optional[Module],
1572
1907
  kid: list[AstNode],
1573
1908
  line: int,
1909
+ sym_tab: Optional[SymbolTable] = None,
1574
1910
  from_walker: bool = False,
1575
1911
  ) -> None:
1576
1912
  """Initialize edge op reference expression node."""
1577
1913
  self.filter_type = filter_type
1578
1914
  self.filter_cond = filter_cond
1579
1915
  self.edge_dir = edge_dir
1580
- self.from_walker = from_walker
1581
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1916
+ super().__init__(
1917
+ parent=parent,
1918
+ mod_link=mod_link,
1919
+ kid=kid,
1920
+ line=line,
1921
+ sym_tab=sym_tab,
1922
+ from_walker=from_walker,
1923
+ )
1582
1924
 
1583
1925
 
1584
1926
  class DisconnectOp(EdgeOpRef):
@@ -1597,12 +1939,15 @@ class ConnectOp(AstNode):
1597
1939
  mod_link: Optional[Module],
1598
1940
  kid: list[AstNode],
1599
1941
  line: int,
1942
+ sym_tab: Optional[SymbolTable] = None,
1600
1943
  ) -> None:
1601
1944
  """Initialize connect op reference expression node."""
1602
1945
  self.conn_type = conn_type
1603
1946
  self.conn_assign = conn_assign
1604
1947
  self.edge_dir = edge_dir
1605
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1948
+ super().__init__(
1949
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1950
+ )
1606
1951
 
1607
1952
 
1608
1953
  class FilterCompr(AstNode):
@@ -1615,10 +1960,13 @@ class FilterCompr(AstNode):
1615
1960
  mod_link: Optional[Module],
1616
1961
  kid: list[AstNode],
1617
1962
  line: int,
1963
+ sym_tab: Optional[SymbolTable] = None,
1618
1964
  ) -> None:
1619
1965
  """Initialize filter_cond context expression node."""
1620
1966
  self.compares = compares
1621
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1967
+ super().__init__(
1968
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1969
+ )
1622
1970
 
1623
1971
 
1624
1972
  class FString(AstNode):
@@ -1631,64 +1979,19 @@ class FString(AstNode):
1631
1979
  mod_link: Optional[Module],
1632
1980
  kid: list[AstNode],
1633
1981
  line: int,
1982
+ sym_tab: Optional[SymbolTable] = None,
1634
1983
  ) -> None:
1635
1984
  """Initialize fstring expression node."""
1636
1985
  self.parts = parts
1637
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
1638
-
1639
-
1640
- AtomType = Union[
1641
- MultiString,
1642
- ListVal,
1643
- TupleVal,
1644
- SetVal,
1645
- DictVal,
1646
- InnerCompr,
1647
- DictCompr,
1648
- AtomTrailer,
1649
- EdgeOpRef,
1650
- FilterCompr,
1651
- ]
1652
-
1653
- ExprType = Union[
1654
- UnaryExpr,
1655
- BinaryExpr,
1656
- IfElseExpr,
1657
- UnpackExpr,
1658
- AtomType,
1659
- ]
1986
+ super().__init__(
1987
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
1988
+ )
1660
1989
 
1661
1990
 
1662
- StmtType = Union[
1663
- Import,
1664
- Architype,
1665
- Ability,
1666
- Assignment,
1667
- ExprType,
1668
- IfStmt,
1669
- TryStmt,
1670
- IterForStmt,
1671
- InForStmt,
1672
- WhileStmt,
1673
- WithStmt,
1674
- RaiseStmt,
1675
- AssertStmt,
1676
- CtrlStmt,
1677
- DeleteStmt,
1678
- ReportStmt,
1679
- ReturnStmt,
1680
- YieldStmt,
1681
- AwaitStmt,
1682
- DisengageStmt,
1683
- RevisitStmt,
1684
- VisitStmt,
1685
- IgnoreStmt,
1686
- ]
1687
-
1688
1991
  # AST Parse-Tree Node Types
1689
- # --------------------------
1690
1992
 
1691
1993
 
1994
+ # --------------------------
1692
1995
  class Parse(AstNode):
1693
1996
  """Parse node type for Jac Ast."""
1694
1997
 
@@ -1699,10 +2002,17 @@ class Parse(AstNode):
1699
2002
  mod_link: Optional[Module],
1700
2003
  kid: list[AstNode],
1701
2004
  line: int,
2005
+ sym_tab: Optional[SymbolTable] = None,
1702
2006
  ) -> None:
1703
2007
  """Initialize parse."""
1704
2008
  self.name = name
1705
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
2009
+ super().__init__(
2010
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
2011
+ )
2012
+
2013
+ def __repr__(self) -> str:
2014
+ """Return string representation of parse node."""
2015
+ return super().__repr__() + f" ({self.name})" + " line: " + str(self.line)
1706
2016
 
1707
2017
 
1708
2018
  class Token(AstNode):
@@ -1718,13 +2028,16 @@ class Token(AstNode):
1718
2028
  mod_link: Optional[Module],
1719
2029
  kid: list[AstNode],
1720
2030
  line: int,
2031
+ sym_tab: Optional[SymbolTable] = None,
1721
2032
  ) -> None:
1722
2033
  """Initialize token."""
1723
2034
  self.name = name
1724
2035
  self.value = value
1725
2036
  self.col_start = col_start
1726
2037
  self.col_end = col_end
1727
- super().__init__(parent=parent, mod_link=mod_link, kid=kid, line=line)
2038
+ super().__init__(
2039
+ parent=parent, mod_link=mod_link, kid=kid, line=line, sym_tab=sym_tab
2040
+ )
1728
2041
 
1729
2042
 
1730
2043
  class Name(Token):
@@ -1741,6 +2054,7 @@ class Name(Token):
1741
2054
  mod_link: Optional[Module],
1742
2055
  kid: list[AstNode],
1743
2056
  line: int,
2057
+ sym_tab: Optional[SymbolTable] = None,
1744
2058
  ) -> None:
1745
2059
  """Initialize name."""
1746
2060
  self.already_declared = already_declared
@@ -1753,6 +2067,7 @@ class Name(Token):
1753
2067
  mod_link=mod_link,
1754
2068
  kid=kid,
1755
2069
  line=line,
2070
+ sym_tab=sym_tab,
1756
2071
  )
1757
2072
 
1758
2073
 
@@ -1770,6 +2085,7 @@ class Constant(Token):
1770
2085
  mod_link: Optional[Module],
1771
2086
  kid: list[AstNode],
1772
2087
  line: int,
2088
+ sym_tab: Optional[SymbolTable] = None,
1773
2089
  ) -> None:
1774
2090
  """Initialize constant."""
1775
2091
  super().__init__(
@@ -1781,10 +2097,64 @@ class Constant(Token):
1781
2097
  mod_link=mod_link,
1782
2098
  kid=kid,
1783
2099
  line=line,
2100
+ sym_tab=sym_tab,
1784
2101
  )
1785
2102
  self._typ = typ
1786
2103
 
1787
2104
 
2105
+ # Aggregate Types
2106
+ # ----------------
2107
+
2108
+
2109
+ AtomType = Union[
2110
+ MultiString,
2111
+ ListVal,
2112
+ TupleVal,
2113
+ SetVal,
2114
+ DictVal,
2115
+ InnerCompr,
2116
+ DictCompr,
2117
+ AtomTrailer,
2118
+ EdgeOpRef,
2119
+ FilterCompr,
2120
+ ]
2121
+
2122
+ ExprType = Union[
2123
+ UnaryExpr,
2124
+ BinaryExpr,
2125
+ IfElseExpr,
2126
+ UnpackExpr,
2127
+ AtomType,
2128
+ ]
2129
+
2130
+
2131
+ StmtType = Union[
2132
+ Import,
2133
+ Architype,
2134
+ Ability,
2135
+ Assignment,
2136
+ ExprType,
2137
+ IfStmt,
2138
+ TryStmt,
2139
+ IterForStmt,
2140
+ InForStmt,
2141
+ WhileStmt,
2142
+ WithStmt,
2143
+ RaiseStmt,
2144
+ AssertStmt,
2145
+ CtrlStmt,
2146
+ DeleteStmt,
2147
+ ReportStmt,
2148
+ ReturnStmt,
2149
+ YieldStmt,
2150
+ AwaitStmt,
2151
+ DisengageStmt,
2152
+ RevisitStmt,
2153
+ VisitStmt,
2154
+ IgnoreStmt,
2155
+ ]
2156
+
2157
+
1788
2158
  # Utiliiy functions
1789
2159
  # -----------------
1790
2160
 
@@ -1801,9 +2171,14 @@ def replace_node(node: AstNode, new_node: Optional[AstNode]) -> AstNode | None:
1801
2171
  return new_node
1802
2172
 
1803
2173
 
1804
- def append_node(node: AstNode, new_node: Optional[AstNode]) -> AstNode | None:
2174
+ def append_node(
2175
+ node: AstNode, new_node: Optional[AstNode], front: bool = False
2176
+ ) -> AstNode | None:
1805
2177
  """Replace node with new_node."""
1806
- node.kid.append(new_node)
2178
+ if front:
2179
+ node.kid.insert(0, new_node)
2180
+ else:
2181
+ node.kid.append(new_node)
1807
2182
  if new_node:
1808
2183
  new_node.parent = node
1809
2184
  return new_node