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
@@ -1,728 +0,0 @@
1
- """Type Analyze Pass."""
2
- from types import ModuleType
3
- from typing import Any
4
-
5
- import jaclang.jac.absyntree as ast
6
- from jaclang.jac.passes import Pass
7
- from jaclang.jac.sym_table import SymbolTable, TypedSymbol
8
-
9
-
10
- class TypeAnalyzePass(Pass, SymbolTable):
11
- """Type inference and checking pass."""
12
-
13
- def before_pass(self) -> None:
14
- """Initialize pass."""
15
- self.sym_tab = SymbolTable(scope_name="global")
16
-
17
- def exit_parse(self, node: ast.Parse) -> None:
18
- """Sub objects.
19
-
20
- name: str,
21
- """
22
-
23
- def exit_token(self, node: ast.Token) -> None:
24
- """Sub objects.
25
-
26
- name: str,
27
- value: str,
28
- col_start: int,
29
- col_end: int,
30
- """
31
-
32
- def exit_name(self, node: ast.Name) -> None:
33
- """Sub objects.
34
-
35
- name: str,
36
- value: str,
37
- col_start: int,
38
- col_end: int,
39
- already_declared: bool,
40
- """
41
-
42
- def exit_constant(self, node: ast.Constant) -> None:
43
- """Sub objects.
44
-
45
- name: str,
46
- value: str,
47
- col_start: int,
48
- col_end: int,
49
- typ: type,
50
- """
51
-
52
- def exit_module(self, node: ast.Module) -> None:
53
- """Sub objects.
54
-
55
- name: str,
56
- doc: Token,
57
- body: Elements,
58
- mod_path: str,
59
- """
60
-
61
- def exit_elements(self, node: ast.Elements) -> None:
62
- """Sub objects.
63
-
64
- elements: list['GlobalVars | Test | ModuleCode | Import | Architype | Ability | AbilitySpec'],
65
- """
66
-
67
- def exit_global_vars(self, node: ast.GlobalVars) -> None:
68
- """Sub objects.
69
-
70
- doc: Optional[DocString],
71
- access: Optional[Token],
72
- assignments: AssignmentList,
73
- """
74
- if node.access:
75
- for i in self.get_all_sub_nodes(node, typ=ast.Assignment):
76
- if isinstance(i.target, ast.Name) and not self.sym_tab.update(
77
- TypedSymbol(
78
- name=i.target.value,
79
- access=node.access.value,
80
- node=i,
81
- typ=i._typ,
82
- )
83
- ):
84
- self.ice(
85
- f"ICE: Variable {i.target.value} not seen as declared in pass {self.__class__.__name__}"
86
- )
87
-
88
- def exit_test(self, node: ast.Test) -> None:
89
- """Sub objects.
90
-
91
- name: Name,
92
- doc: Optional[DocString],
93
- description: Token,
94
- body: CodeBlock,
95
- """
96
-
97
- def exit_module_code(self, node: ast.ModuleCode) -> None:
98
- """Sub objects.
99
-
100
- doc: Optional[DocString],
101
- body: CodeBlock,
102
- """
103
-
104
- def exit_import(self, node: ast.Import) -> None:
105
- """Sub objects.
106
-
107
- lang: Name,
108
- path: ModulePath,
109
- alias: Optional[Name],
110
- items: Optional[ModuleItems],
111
- is_absorb: bool,
112
- self.sub_module = None
113
- """
114
- if node.lang.value == "jac" and not node.sub_module:
115
- self.ice(f"Jac module not loaded by pass {self.__class__.__name__}")
116
- if node.items:
117
- for i in node.items.items:
118
- if i.alias:
119
- self.sym_tab.set(
120
- TypedSymbol(
121
- name=i.alias.value,
122
- typ=Any, # TODO: Backpatch analysis for module itmes
123
- node=node,
124
- ),
125
- fresh_only=True,
126
- )
127
- else:
128
- self.sym_tab.set(
129
- TypedSymbol(
130
- name=i.name.value,
131
- typ=Any, # TODO: Backpatch analysis for module itmes
132
- node=node,
133
- ),
134
- fresh_only=True,
135
- )
136
- else:
137
- self.sym_tab.set(
138
- TypedSymbol(
139
- name=node.path.path[-1].value,
140
- typ=ModuleType,
141
- node=node,
142
- ),
143
- fresh_only=True,
144
- )
145
-
146
- def exit_module_path(self, node: ast.ModulePath) -> None:
147
- """Sub objects.
148
-
149
- path: list[Token],
150
- """
151
-
152
- def exit_module_item(self, node: ast.ModuleItem) -> None:
153
- """Sub objects.
154
-
155
- name: Name,
156
- alias: Optional[Token],
157
- self.body: Optional[AstNode] = None
158
- """
159
-
160
- def exit_module_items(self, node: ast.ModuleItems) -> None:
161
- """Sub objects.
162
-
163
- items: list['ModuleItem'],
164
- """
165
-
166
- def exit_architype(self, node: ast.Architype) -> None:
167
- """Sub objects.
168
-
169
- name: Name,
170
- arch_type: Token,
171
- doc: Optional[DocString],
172
- decorators: Optional[Decorators],
173
- access: Optional[Token],
174
- base_classes: BaseClasses,
175
- body: Optional[ArchBlock],
176
- """
177
- node._typ = type
178
- exists = self.sym_tab.lookup(name=node.name.value, deep=False)
179
- # TODO: if exists and type(exists.def_node) == ast.ArchDef and not node.body: # This should be own pass
180
- # node.body = exists.def_node.body
181
- if exists and not self.assert_type_match(sym=exists, node=node):
182
- return
183
- self.sym_tab.set(
184
- TypedSymbol(
185
- name=node.name.value,
186
- typ=type,
187
- node=node,
188
- access=node.access.value if node.access else None,
189
- ),
190
- )
191
-
192
- def exit_arch_def(self, node: ast.ArchDef) -> None:
193
- """Sub objects.
194
-
195
- doc: Optional[DocString],
196
- mod: Optional[DottedNameList],
197
- arch: ObjectRef | NodeRef | EdgeRef | WalkerRef,
198
- body: ArchBlock,
199
- """
200
-
201
- def exit_decorators(self, node: ast.Decorators) -> None:
202
- """Sub objects.
203
-
204
- calls: list['ExprType'],
205
- """
206
-
207
- def exit_base_classes(self, node: ast.BaseClasses) -> None:
208
- """Sub objects.
209
-
210
- base_classes: list['DottedNameList'],
211
- """
212
-
213
- def exit_ability(self, node: ast.Ability) -> None:
214
- """Sub objects.
215
-
216
- name: Name,
217
- is_func: bool,
218
- doc: Optional[DocString],
219
- decorators: Optional[Decorators],
220
- access: Optional[Token],
221
- signature: FuncSignature | TypeSpec | EventSignature,
222
- body: CodeBlock,
223
- """
224
-
225
- def exit_ability_def(self, node: ast.AbilityDef) -> None:
226
- """Sub objects.
227
-
228
- doc: Optional[DocString],
229
- mod: Optional[DottedNameList],
230
- ability: AbilityRef,
231
- body: CodeBlock,
232
- """
233
-
234
- def exit_arch_block(self, node: ast.ArchBlock) -> None:
235
- """Sub objects.
236
-
237
- members: list['ArchHas | Ability'],
238
- """
239
-
240
- def exit_arch_has(self, node: ast.ArchHas) -> None:
241
- """Sub objects.
242
-
243
- doc: Optional[DocString],
244
- access: Optional[Token],
245
- vars: HasVarList,
246
- """
247
-
248
- def exit_has_var(self, node: ast.HasVar) -> None:
249
- """Sub objects.
250
-
251
- name: Name,
252
- type_tag: TypeSpec,
253
- value: Optional[ExprType],
254
- """
255
-
256
- def exit_has_var_list(self, node: ast.HasVarList) -> None:
257
- """Sub objects.
258
-
259
- vars: list['HasVar'],
260
- """
261
-
262
- def exit_type_spec_list(self, node: ast.TypeSpecList) -> None:
263
- """Sub objects.
264
-
265
- types: list[TypeSpec],
266
- """
267
-
268
- def exit_type_spec(self, node: ast.TypeSpec) -> None:
269
- """Sub objects.
270
-
271
- typ: Token | DottedNameList,
272
- list_nest: TypeSpec,
273
- dict_nest: TypeSpec,
274
- """
275
-
276
- def exit_event_signature(self, node: ast.EventSignature) -> None:
277
- """Sub objects.
278
-
279
- event: Token,
280
- arch_tag_info: Optional[DottedNameList | Token],
281
- """
282
-
283
- def exit_dotted_name_list(self, node: ast.DottedNameList) -> None:
284
- """Sub objects.
285
-
286
- names: list[Token],
287
- dotted: bool,
288
- """
289
-
290
- def exit_func_signature(self, node: ast.FuncSignature) -> None:
291
- """Sub objects.
292
-
293
- params: Optional[FuncParams],
294
- return_type: Optional[TypeSpec],
295
- """
296
-
297
- def exit_func_params(self, node: ast.FuncParams) -> None:
298
- """Sub objects.
299
-
300
- params: list['ParamVar'],
301
- """
302
-
303
- def exit_param_var(self, node: ast.ParamVar) -> None:
304
- """Sub objects.
305
-
306
- name: Name,
307
- unpack: Optional[Token],
308
- type_tag: TypeSpec,
309
- value: Optional[ExprType],
310
- """
311
-
312
- def exit_enum(self, node: ast.Enum) -> None:
313
- """Sub objects.
314
-
315
- name: Name,
316
- doc: Optional[DocString],
317
- decorators: Optional[Decorators],
318
- access: Optional[Token],
319
- base_classes: BaseClasses,
320
- body: Optional[EnumBlock],
321
- """
322
-
323
- def exit_enum_def(self, node: ast.EnumDef) -> None:
324
- """Sub objects.
325
-
326
- doc: Optional[DocString],
327
- mod: Optional[DottedNameList],
328
- body: EnumBlock,
329
- """
330
-
331
- def exit_enum_block(self, node: ast.EnumBlock) -> None:
332
- """Sub objects.
333
-
334
- stmts: list['Name|Assignment'],
335
- """
336
-
337
- def exit_code_block(self, node: ast.CodeBlock) -> None:
338
- """Sub objects.
339
-
340
- stmts: list['StmtType'],
341
- """
342
-
343
- def exit_typed_ctx_block(self, node: ast.TypedCtxBlock) -> None:
344
- """Sub objects.
345
-
346
- type_ctx: TypeList,
347
- body: CodeBlock,
348
- """
349
-
350
- def exit_if_stmt(self, node: ast.IfStmt) -> None:
351
- """Sub objects.
352
-
353
- condition: ExprType,
354
- body: CodeBlock,
355
- elseifs: Optional[ElseIfs],
356
- else_body: Optional[ElseStmt],
357
- """
358
-
359
- def exit_else_ifs(self, node: ast.ElseIfs) -> None:
360
- """Sub objects.
361
-
362
- elseifs: list['IfStmt'],
363
- """
364
-
365
- def exit_else_stmt(self, node: ast.ElseStmt) -> None:
366
- """Sub objects.
367
-
368
- body: CodeBlock,
369
- """
370
-
371
- def exit_try_stmt(self, node: ast.TryStmt) -> None:
372
- """Sub objects.
373
-
374
- body: CodeBlock,
375
- excepts: Optional[ExceptList],
376
- finally_body: Optional[FinallyStmt],
377
- """
378
-
379
- def exit_except(self, node: ast.Except) -> None:
380
- """Sub objects.
381
-
382
- typ: ExprType,
383
- name: Optional[Token],
384
- body: CodeBlock,
385
- """
386
-
387
- def exit_except_list(self, node: ast.ExceptList) -> None:
388
- """Sub objects.
389
-
390
- excepts: list['Except'],
391
- """
392
-
393
- def exit_finally_stmt(self, node: ast.FinallyStmt) -> None:
394
- """Sub objects.
395
-
396
- body: CodeBlock,
397
- """
398
-
399
- def exit_iter_for_stmt(self, node: ast.IterForStmt) -> None:
400
- """Sub objects.
401
-
402
- iter: Assignment,
403
- condition: ExprType,
404
- count_by: ExprType,
405
- body: CodeBlock,
406
- """
407
-
408
- def exit_in_for_stmt(self, node: ast.InForStmt) -> None:
409
- """Sub objects.
410
-
411
- name: Name,
412
- collection: ExprType,
413
- body: CodeBlock,
414
- """
415
-
416
- def exit_name_list(self, node: ast.NameList) -> None:
417
- """Sub objects.
418
-
419
- names: list[Name],
420
- """
421
-
422
- def exit_while_stmt(self, node: ast.WhileStmt) -> None:
423
- """Sub objects.
424
-
425
- condition: ExprType,
426
- body: CodeBlock,
427
- """
428
-
429
- def exit_with_stmt(self, node: ast.WithStmt) -> None:
430
- """Sub objects.
431
-
432
- exprs: "ExprAsItemList",
433
- body: "CodeBlock",
434
- """
435
-
436
- def exit_expr_as_item_list(self, node: ast.ExprAsItemList) -> None:
437
- """Sub objects.
438
-
439
- items: list["ExprAsItem"],
440
- """
441
-
442
- def exit_expr_as_item(self, node: ast.ExprAsItem) -> None:
443
- """Sub objects.
444
-
445
- expr: "ExprType",
446
- alias: Optional[Token],
447
- """
448
-
449
- def exit_raise_stmt(self, node: ast.RaiseStmt) -> None:
450
- """Sub objects.
451
-
452
- cause: Optional[ExprType],
453
- """
454
-
455
- def exit_assert_stmt(self, node: ast.AssertStmt) -> None:
456
- """Sub objects.
457
-
458
- condition: ExprType,
459
- error_msg: Optional[ExprType],
460
- """
461
-
462
- def exit_ctrl_stmt(self, node: ast.CtrlStmt) -> None:
463
- """Sub objects.
464
-
465
- ctrl: Token,
466
- """
467
-
468
- def exit_delete_stmt(self, node: ast.DeleteStmt) -> None:
469
- """Sub objects.
470
-
471
- target: ExprType,
472
- """
473
-
474
- def exit_report_stmt(self, node: ast.ReportStmt) -> None:
475
- """Sub objects.
476
-
477
- expr: ExprType,
478
- """
479
-
480
- def exit_return_stmt(self, node: ast.ReturnStmt) -> None:
481
- """Sub objects.
482
-
483
- expr: Optional[ExprType],
484
- """
485
-
486
- def exit_yield_stmt(self, node: ast.YieldStmt) -> None:
487
- """Sub objects.
488
-
489
- expr: Optional[ExprType],
490
- """
491
-
492
- def exit_ignore_stmt(self, node: ast.IgnoreStmt) -> None:
493
- """Sub objects.
494
-
495
- target: ExprType,
496
- """
497
-
498
- def exit_visit_stmt(self, node: ast.VisitStmt) -> None:
499
- """Sub objects.
500
-
501
- typ: Optional[Token],
502
- target: Optional[ExprType],
503
- else_body: Optional[ElseStmt],
504
- """
505
-
506
- def exit_revisit_stmt(self, node: ast.RevisitStmt) -> None:
507
- """Sub objects.
508
-
509
- hops: Optional[ExprType],
510
- else_body: Optional[ElseStmt],
511
- """
512
-
513
- def exit_disengage_stmt(self, node: ast.DisengageStmt) -> None:
514
- """Sub objects."""
515
-
516
- def exit_await_stmt(self, node: ast.AwaitStmt) -> None:
517
- """Sub objects.
518
-
519
- target: ExprType,
520
- """
521
-
522
- def exit_assignment(self, node: ast.Assignment) -> None:
523
- """Sub objects.
524
-
525
- is_static: bool,
526
- target: AtomType,
527
- value: ExprType,
528
- """
529
-
530
- def exit_binary_expr(self, node: ast.BinaryExpr) -> None:
531
- """Sub objects.
532
-
533
- left: ExprType,
534
- right: ExprType,
535
- op: Token,
536
- """
537
-
538
- def exit_if_else_expr(self, node: ast.IfElseExpr) -> None:
539
- """Sub objects.
540
-
541
- condition: BinaryExpr | IfElseExpr,
542
- value: ExprType,
543
- else_value: ExprType,
544
- """
545
-
546
- def exit_unary_expr(self, node: ast.UnaryExpr) -> None:
547
- """Sub objects.
548
-
549
- operand: ExprType,
550
- op: Token,
551
- """
552
-
553
- def exit_unpack_expr(self, node: ast.UnpackExpr) -> None:
554
- """Sub objects.
555
-
556
- target: ExprType,
557
- is_dict: bool,
558
- """
559
-
560
- def exit_multi_string(self, node: ast.MultiString) -> None:
561
- """Sub objects.
562
-
563
- strings: list['Token | FString'],
564
- """
565
-
566
- def exit_list_val(self, node: ast.ListVal) -> None:
567
- """Sub objects.
568
-
569
- values: list['ExprType'],
570
- """
571
-
572
- def exit_set_val(self, node: ast.ListVal) -> None:
573
- """Sub objects.
574
-
575
- values: list[ExprType],
576
- """
577
-
578
- def exit_tuple_val(self, node: ast.TupleVal) -> None:
579
- """Sub objects.
580
-
581
- first_expr: Optional["ExprType"],
582
- exprs: Optional[ExprList],
583
- assigns: Optional[AssignmentList],
584
- """
585
-
586
- def exit_expr_list(self, node: ast.ExprList) -> None:
587
- """Sub objects.
588
-
589
- values: list['ExprType'],
590
- """
591
-
592
- def exit_dict_val(self, node: ast.DictVal) -> None:
593
- """Sub objects.
594
-
595
- kv_pairs: list['KVPair'],
596
- """
597
-
598
- def exit_inner_compr(self, node: ast.InnerCompr) -> None:
599
- """Sub objects.
600
-
601
- out_expr: "ExprType",
602
- name: Name,
603
- collection: "ExprType",
604
- conditional: Optional["ExprType"],
605
- is_list: bool,
606
- is_gen: bool,
607
- is_set: bool,
608
- """
609
-
610
- def exit_dict_compr(self, node: ast.DictCompr) -> None:
611
- """Sub objects.
612
-
613
- outk_expr: ExprType,
614
- outv_expr: ExprType,
615
- k_name: Name,
616
- v_name: Optional[Token],
617
- collection: ExprType,
618
- conditional: Optional[ExprType],
619
- """
620
-
621
- def exit_k_v_pair(self, node: ast.KVPair) -> None:
622
- """Sub objects.
623
-
624
- key: ExprType,
625
- value: ExprType,
626
- """
627
-
628
- def exit_atom_trailer(self, node: ast.AtomTrailer) -> None:
629
- """Sub objects.
630
-
631
- target: AtomType,
632
- right: IndexSlice | ArchRefType | Token,
633
- null_ok: bool,
634
- """
635
-
636
- def exit_func_call(self, node: ast.FuncCall) -> None:
637
- """Sub objects.
638
-
639
- target: AtomType,
640
- params: Optional[ParamList],
641
- """
642
-
643
- def exit_param_list(self, node: ast.ParamList) -> None:
644
- """Sub objects.
645
-
646
- p_args: Optional[ExprList],
647
- p_kwargs: Optional[AssignmentList],
648
- """
649
-
650
- def exit_assignment_list(self, node: ast.AssignmentList) -> None:
651
- """Sub objects.
652
-
653
- values: list['ExprType'],
654
- """
655
-
656
- def exit_index_slice(self, node: ast.IndexSlice) -> None:
657
- """Sub objects.
658
-
659
- start: ExprType,
660
- stop: Optional[ExprType],
661
- """
662
-
663
- def exit_arch_ref(self, node: ast.ArchRef) -> None:
664
- """Sub objects.
665
-
666
- name: Name,
667
- """
668
-
669
- def exit_special_var_ref(self, node: ast.SpecialVarRef) -> None:
670
- """Sub objects.
671
-
672
- name: Optional[Token],
673
- """
674
-
675
- def exit_edge_op_ref(self, node: ast.EdgeOpRef) -> None:
676
- """Sub objects.
677
-
678
- filter_cond: Optional[ExprType],
679
- edge_dir: EdgeDir,
680
- """
681
-
682
- def exit_disconnect_op(self, node: ast.DisconnectOp) -> None:
683
- """Sub objects.
684
-
685
- filter_cond: Optional[ExprType],
686
- edge_dir: EdgeDir,
687
- """
688
-
689
- def exit_connect_op(self, node: ast.ConnectOp) -> None:
690
- """Sub objects.
691
-
692
- spawn: Optional[ExprType],
693
- edge_dir: EdgeDir,
694
- """
695
-
696
- def exit_filter_compr(self, node: ast.FilterCompr) -> None:
697
- """Sub objects.
698
-
699
- compares: list[BinaryExpr],
700
- """
701
-
702
- def exit_f_string(self, node: ast.FString) -> None:
703
- """Sub objects.
704
-
705
- parts: list['Token | ExprType'],
706
- """
707
-
708
- # Checks and validations
709
- # ----------------------
710
-
711
- def assert_type_match(self, sym: TypedSymbol, node: ast.AstNode) -> bool:
712
- """Check if two types match."""
713
- if isinstance(sym.typ, node._typ):
714
- return True
715
- self.error(
716
- f"Type mismatch, {sym.name} already defined on line "
717
- f"{sym.node.line if sym.node else 'unknown'} as {sym.typ} not compatible with"
718
- f"{node._typ} on line {node.line}!"
719
- )
720
- return False
721
-
722
- def not_defined_err(self, name: str) -> None:
723
- """Check if a symbol is defined."""
724
- self.error(f"Symbol {name} not defined!")
725
-
726
- def already_defined_err(self, name: str) -> None:
727
- """Check if a symbol is defined."""
728
- self.error(f"Symbol {name} already in use in this scope!")