jaclang 0.5.11__py3-none-any.whl → 0.5.16__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 (41) hide show
  1. jaclang/cli/cli.py +20 -0
  2. jaclang/compiler/__init__.py +35 -19
  3. jaclang/compiler/absyntree.py +106 -97
  4. jaclang/compiler/generated/jac_parser.py +4069 -0
  5. jaclang/compiler/jac.lark +655 -0
  6. jaclang/compiler/parser.py +44 -31
  7. jaclang/compiler/passes/main/fuse_typeinfo_pass.py +92 -37
  8. jaclang/compiler/passes/main/import_pass.py +8 -5
  9. jaclang/compiler/passes/main/pyast_gen_pass.py +512 -352
  10. jaclang/compiler/passes/main/pyast_load_pass.py +271 -64
  11. jaclang/compiler/passes/main/registry_pass.py +3 -7
  12. jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py +2 -0
  13. jaclang/compiler/passes/main/type_check_pass.py +4 -1
  14. jaclang/compiler/passes/tool/jac_formatter_pass.py +7 -0
  15. jaclang/compiler/passes/tool/tests/test_unparse_validate.py +16 -0
  16. jaclang/compiler/passes/utils/mypy_ast_build.py +93 -0
  17. jaclang/compiler/tests/test_importer.py +15 -0
  18. jaclang/core/aott.py +4 -3
  19. jaclang/core/construct.py +1 -1
  20. jaclang/core/importer.py +109 -51
  21. jaclang/core/llms.py +29 -0
  22. jaclang/core/registry.py +22 -0
  23. jaclang/core/utils.py +72 -0
  24. jaclang/plugin/default.py +127 -8
  25. jaclang/plugin/feature.py +29 -2
  26. jaclang/plugin/spec.py +25 -2
  27. jaclang/utils/helpers.py +7 -9
  28. jaclang/utils/lang_tools.py +37 -13
  29. jaclang/utils/test.py +1 -3
  30. jaclang/utils/tests/test_lang_tools.py +6 -0
  31. jaclang/vendor/lark/grammars/common.lark +59 -0
  32. jaclang/vendor/lark/grammars/lark.lark +62 -0
  33. jaclang/vendor/lark/grammars/python.lark +302 -0
  34. jaclang/vendor/lark/grammars/unicode.lark +7 -0
  35. {jaclang-0.5.11.dist-info → jaclang-0.5.16.dist-info}/METADATA +1 -1
  36. {jaclang-0.5.11.dist-info → jaclang-0.5.16.dist-info}/RECORD +40 -34
  37. jaclang/compiler/__jac_gen__/jac_parser.py +0 -4069
  38. /jaclang/compiler/{__jac_gen__ → generated}/__init__.py +0 -0
  39. {jaclang-0.5.11.dist-info → jaclang-0.5.16.dist-info}/WHEEL +0 -0
  40. {jaclang-0.5.11.dist-info → jaclang-0.5.16.dist-info}/entry_points.txt +0 -0
  41. {jaclang-0.5.11.dist-info → jaclang-0.5.16.dist-info}/top_level.txt +0 -0
@@ -327,7 +327,7 @@ class SubTag(AstNode, Generic[T]):
327
327
  def normalize(self, deep: bool = False) -> bool:
328
328
  """Normalize sub tag node."""
329
329
  res = self.tag.normalize() if deep else True
330
- AstNode.set_kids(self, nodes=[self.gen_token(Tok.COLON), self.tag])
330
+ self.set_kids(nodes=[self.gen_token(Tok.COLON), self.tag])
331
331
  return res
332
332
 
333
333
 
@@ -370,7 +370,7 @@ class SubNodeList(AstNode, Generic[T]):
370
370
  new_kid.pop()
371
371
  if self.right_enc:
372
372
  new_kid.append(self.right_enc)
373
- AstNode.set_kids(self, nodes=new_kid if len(new_kid) else [EmptyToken()])
373
+ self.set_kids(nodes=new_kid if len(new_kid) else [EmptyToken()])
374
374
  return res
375
375
 
376
376
 
@@ -414,7 +414,7 @@ class Module(AstDocNode):
414
414
  if self.doc:
415
415
  new_kid.append(self.doc)
416
416
  new_kid.extend(self.body)
417
- AstNode.set_kids(self, nodes=new_kid)
417
+ self.set_kids(nodes=new_kid)
418
418
  return res
419
419
 
420
420
  def unparse(self) -> str:
@@ -458,7 +458,7 @@ class GlobalVars(ElementStmt, AstAccessNode):
458
458
  if self.access:
459
459
  new_kid.append(self.access)
460
460
  new_kid.append(self.assignments)
461
- AstNode.set_kids(self, nodes=new_kid)
461
+ self.set_kids(nodes=new_kid)
462
462
  return res
463
463
 
464
464
 
@@ -517,7 +517,7 @@ class Test(AstSymbolNode, ElementStmt):
517
517
  new_kid.append(self.gen_token(Tok.KW_TEST))
518
518
  new_kid.append(self.name)
519
519
  new_kid.append(self.body)
520
- AstNode.set_kids(self, nodes=new_kid)
520
+ self.set_kids(nodes=new_kid)
521
521
  return res
522
522
 
523
523
 
@@ -552,7 +552,7 @@ class ModuleCode(ElementStmt, ArchBlockStmt, EnumBlockStmt):
552
552
  if self.name:
553
553
  new_kid.append(self.name)
554
554
  new_kid.append(self.body)
555
- AstNode.set_kids(self, nodes=new_kid)
555
+ self.set_kids(nodes=new_kid)
556
556
  return res
557
557
 
558
558
 
@@ -582,7 +582,7 @@ class PyInlineCode(ElementStmt, ArchBlockStmt, EnumBlockStmt, CodeBlockStmt):
582
582
  new_kid.append(self.gen_token(Tok.PYNLINE))
583
583
  new_kid.append(self.code)
584
584
  new_kid.append(self.gen_token(Tok.PYNLINE))
585
- AstNode.set_kids(self, nodes=new_kid)
585
+ self.set_kids(nodes=new_kid)
586
586
  return res
587
587
 
588
588
 
@@ -633,7 +633,7 @@ class Import(ElementStmt, CodeBlockStmt):
633
633
  new_kid.append(self.gen_token(Tok.COMMA))
634
634
  new_kid.append(self.items)
635
635
  new_kid.append(self.gen_token(Tok.SEMI))
636
- AstNode.set_kids(self, nodes=new_kid)
636
+ self.set_kids(nodes=new_kid)
637
637
  return res
638
638
 
639
639
 
@@ -671,8 +671,8 @@ class ModulePath(AstSymbolNode):
671
671
  res = res and p.normalize(deep)
672
672
  res = res and self.alias.normalize(deep) if self.alias else res
673
673
  new_kid: list[AstNode] = []
674
- # for _ in range(self.level):
675
- # new_kid.append(self.gen_token(Tok.DOT))
674
+ for _ in range(self.level):
675
+ new_kid.append(self.gen_token(Tok.DOT))
676
676
  if self.path:
677
677
  for p in self.path:
678
678
  res = res and p.normalize(deep)
@@ -681,8 +681,9 @@ class ModulePath(AstSymbolNode):
681
681
  new_kid.pop()
682
682
  if self.alias:
683
683
  res = res and self.alias.normalize(deep)
684
+ new_kid.append(self.gen_token(Tok.KW_AS))
684
685
  new_kid.append(self.alias)
685
- AstNode.set_kids(self, nodes=new_kid)
686
+ self.set_kids(nodes=new_kid)
686
687
  return res
687
688
 
688
689
  @property
@@ -723,7 +724,7 @@ class ModuleItem(AstSymbolNode):
723
724
  if self.alias:
724
725
  new_kid.append(self.gen_token(Tok.KW_AS))
725
726
  new_kid.append(self.alias)
726
- AstNode.set_kids(self, nodes=new_kid)
727
+ self.set_kids(nodes=new_kid)
727
728
  return res
728
729
 
729
730
 
@@ -822,7 +823,7 @@ class Architype(ArchSpec, AstAccessNode, ArchBlockStmt, AstImplNeedingNode):
822
823
  new_kid.append(self.body)
823
824
  else:
824
825
  new_kid.append(self.gen_token(Tok.SEMI))
825
- AstNode.set_kids(self, nodes=new_kid)
826
+ self.set_kids(nodes=new_kid)
826
827
  return res
827
828
 
828
829
 
@@ -864,7 +865,7 @@ class ArchDef(ArchSpec, AstImplOnlyNode):
864
865
  new_kid.append(self.doc)
865
866
  new_kid.append(self.target)
866
867
  new_kid.append(self.body)
867
- AstNode.set_kids(self, nodes=new_kid)
868
+ self.set_kids(nodes=new_kid)
868
869
  return res
869
870
 
870
871
 
@@ -933,7 +934,7 @@ class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt):
933
934
  new_kid.append(self.gen_token(Tok.RBRACE))
934
935
  else:
935
936
  new_kid.append(self.gen_token(Tok.SEMI))
936
- AstNode.set_kids(self, nodes=new_kid)
937
+ self.set_kids(nodes=new_kid)
937
938
  return res
938
939
 
939
940
 
@@ -977,7 +978,7 @@ class EnumDef(ArchSpec, AstImplOnlyNode):
977
978
  new_kid.append(self.gen_token(Tok.LBRACE))
978
979
  new_kid.append(self.body)
979
980
  new_kid.append(self.gen_token(Tok.RBRACE))
980
- AstNode.set_kids(self, nodes=new_kid)
981
+ self.set_kids(nodes=new_kid)
981
982
  return res
982
983
 
983
984
 
@@ -1101,7 +1102,7 @@ class Ability(
1101
1102
  new_kid.append(self.gen_token(Tok.SEMI))
1102
1103
  else:
1103
1104
  new_kid.append(self.gen_token(Tok.SEMI))
1104
- AstNode.set_kids(self, nodes=new_kid)
1105
+ self.set_kids(nodes=new_kid)
1105
1106
  return res
1106
1107
 
1107
1108
 
@@ -1149,7 +1150,7 @@ class AbilityDef(AstSymbolNode, ElementStmt, AstImplOnlyNode, CodeBlockStmt):
1149
1150
 
1150
1151
  new_kid.append(self.body)
1151
1152
 
1152
- AstNode.set_kids(self, nodes=new_kid)
1153
+ self.set_kids(nodes=new_kid)
1153
1154
  return res
1154
1155
 
1155
1156
  @property
@@ -1194,7 +1195,7 @@ class FuncSignature(AstSemStrNode):
1194
1195
  new_kid.append(self.semstr)
1195
1196
  new_kid.append(self.gen_token(Tok.COLON))
1196
1197
  new_kid.append(self.return_type)
1197
- AstNode.set_kids(self, nodes=new_kid)
1198
+ self.set_kids(nodes=new_kid)
1198
1199
  return res
1199
1200
 
1200
1201
  @property
@@ -1253,7 +1254,7 @@ class EventSignature(AstSemStrNode):
1253
1254
  new_kid.append(self.semstr)
1254
1255
  new_kid.append(self.gen_token(Tok.RETURN_HINT))
1255
1256
  new_kid.append(self.return_type)
1256
- AstNode.set_kids(self, nodes=new_kid)
1257
+ self.set_kids(nodes=new_kid)
1257
1258
  return res
1258
1259
 
1259
1260
  @property
@@ -1289,7 +1290,7 @@ class ArchRefChain(AstNode):
1289
1290
  new_kid: list[AstNode] = []
1290
1291
  for a in self.archs:
1291
1292
  new_kid.append(a)
1292
- AstNode.set_kids(self, nodes=new_kid)
1293
+ self.set_kids(nodes=new_kid)
1293
1294
  return res
1294
1295
 
1295
1296
  def py_resolve_name(self) -> str:
@@ -1358,7 +1359,7 @@ class ParamVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1358
1359
  if self.value:
1359
1360
  new_kid.append(self.gen_token(Tok.EQ))
1360
1361
  new_kid.append(self.value)
1361
- AstNode.set_kids(self, nodes=new_kid)
1362
+ self.set_kids(nodes=new_kid)
1362
1363
  return res
1363
1364
 
1364
1365
 
@@ -1403,7 +1404,7 @@ class ArchHas(AstAccessNode, AstDocNode, ArchBlockStmt):
1403
1404
  new_kid.append(self.access)
1404
1405
  new_kid.append(self.vars)
1405
1406
  new_kid.append(self.gen_token(Tok.SEMI))
1406
- AstNode.set_kids(self, nodes=new_kid)
1407
+ self.set_kids(nodes=new_kid)
1407
1408
  return res
1408
1409
 
1409
1410
 
@@ -1453,7 +1454,7 @@ class HasVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1453
1454
  if self.defer:
1454
1455
  new_kid.append(self.gen_token(Tok.KW_BY))
1455
1456
  new_kid.append(self.gen_token(Tok.KW_POST_INIT))
1456
- AstNode.set_kids(self, nodes=new_kid)
1457
+ self.set_kids(nodes=new_kid)
1457
1458
  return res
1458
1459
 
1459
1460
 
@@ -1482,7 +1483,7 @@ class TypedCtxBlock(CodeBlockStmt):
1482
1483
  self.type_ctx,
1483
1484
  self.body,
1484
1485
  ]
1485
- AstNode.set_kids(self, nodes=new_kid)
1486
+ self.set_kids(nodes=new_kid)
1486
1487
  return res
1487
1488
 
1488
1489
 
@@ -1516,7 +1517,7 @@ class IfStmt(CodeBlockStmt, AstElseBodyNode):
1516
1517
  ]
1517
1518
  if self.else_body:
1518
1519
  new_kid.append(self.else_body)
1519
- AstNode.set_kids(self, nodes=new_kid)
1520
+ self.set_kids(nodes=new_kid)
1520
1521
  return res
1521
1522
 
1522
1523
 
@@ -1537,7 +1538,7 @@ class ElseIf(IfStmt):
1537
1538
  ]
1538
1539
  if self.else_body:
1539
1540
  new_kid.append(self.else_body)
1540
- AstNode.set_kids(self, nodes=new_kid)
1541
+ self.set_kids(nodes=new_kid)
1541
1542
  return res
1542
1543
 
1543
1544
 
@@ -1562,7 +1563,7 @@ class ElseStmt(AstNode):
1562
1563
  self.gen_token(Tok.KW_ELSE),
1563
1564
  self.body,
1564
1565
  ]
1565
- AstNode.set_kids(self, nodes=new_kid)
1566
+ self.set_kids(nodes=new_kid)
1566
1567
  return res
1567
1568
 
1568
1569
 
@@ -1590,7 +1591,7 @@ class ExprStmt(CodeBlockStmt):
1590
1591
  else:
1591
1592
  new_kid.append(self.expr)
1592
1593
  new_kid.append(self.gen_token(Tok.SEMI))
1593
- AstNode.set_kids(self, nodes=new_kid)
1594
+ self.set_kids(nodes=new_kid)
1594
1595
  return res and self.expr is not None
1595
1596
 
1596
1597
 
@@ -1632,7 +1633,7 @@ class TryStmt(AstElseBodyNode, CodeBlockStmt):
1632
1633
  new_kid.append(self.else_body)
1633
1634
  if self.finally_body:
1634
1635
  new_kid.append(self.finally_body)
1635
- AstNode.set_kids(self, nodes=new_kid)
1636
+ self.set_kids(nodes=new_kid)
1636
1637
  return res
1637
1638
 
1638
1639
 
@@ -1667,7 +1668,7 @@ class Except(CodeBlockStmt):
1667
1668
  new_kid.append(self.gen_token(Tok.KW_AS))
1668
1669
  new_kid.append(self.name)
1669
1670
  new_kid.append(self.body)
1670
- AstNode.set_kids(self, nodes=new_kid)
1671
+ self.set_kids(nodes=new_kid)
1671
1672
  return res
1672
1673
 
1673
1674
 
@@ -1692,7 +1693,7 @@ class FinallyStmt(CodeBlockStmt):
1692
1693
  self.gen_token(Tok.KW_FINALLY),
1693
1694
  ]
1694
1695
  new_kid.append(self.body)
1695
- AstNode.set_kids(self, nodes=new_kid)
1696
+ self.set_kids(nodes=new_kid)
1696
1697
  return res
1697
1698
 
1698
1699
 
@@ -1739,7 +1740,7 @@ class IterForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
1739
1740
  new_kid.append(self.body)
1740
1741
  if self.else_body:
1741
1742
  new_kid.append(self.else_body)
1742
- AstNode.set_kids(self, nodes=new_kid)
1743
+ self.set_kids(nodes=new_kid)
1743
1744
  return res
1744
1745
 
1745
1746
 
@@ -1783,7 +1784,7 @@ class InForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
1783
1784
  new_kid.append(self.body)
1784
1785
  if self.else_body:
1785
1786
  new_kid.append(self.else_body)
1786
- AstNode.set_kids(self, nodes=new_kid)
1787
+ self.set_kids(nodes=new_kid)
1787
1788
  return res
1788
1789
 
1789
1790
 
@@ -1813,7 +1814,7 @@ class WhileStmt(CodeBlockStmt):
1813
1814
  ]
1814
1815
  if self.body:
1815
1816
  new_kid.append(self.body)
1816
- AstNode.set_kids(self, nodes=new_kid)
1817
+ self.set_kids(nodes=new_kid)
1817
1818
  return res
1818
1819
 
1819
1820
 
@@ -1848,7 +1849,7 @@ class WithStmt(AstAsyncNode, CodeBlockStmt):
1848
1849
  new_kid.append(self.body)
1849
1850
  new_kid.append(self.gen_token(Tok.RBRACE))
1850
1851
 
1851
- AstNode.set_kids(self, nodes=new_kid)
1852
+ self.set_kids(nodes=new_kid)
1852
1853
  return res
1853
1854
 
1854
1855
 
@@ -1876,7 +1877,7 @@ class ExprAsItem(AstNode):
1876
1877
  if self.alias:
1877
1878
  new_kid.append(self.gen_token(Tok.KW_AS))
1878
1879
  new_kid.append(self.alias)
1879
- AstNode.set_kids(self, nodes=new_kid)
1880
+ self.set_kids(nodes=new_kid)
1880
1881
  return res
1881
1882
 
1882
1883
 
@@ -1907,7 +1908,7 @@ class RaiseStmt(CodeBlockStmt):
1907
1908
  new_kid.append(self.gen_token(Tok.KW_FROM))
1908
1909
  new_kid.append(self.from_target)
1909
1910
  new_kid.append(self.gen_token(Tok.SEMI))
1910
- AstNode.set_kids(self, nodes=new_kid)
1911
+ self.set_kids(nodes=new_kid)
1911
1912
  return res
1912
1913
 
1913
1914
 
@@ -1939,7 +1940,7 @@ class AssertStmt(CodeBlockStmt):
1939
1940
  new_kid.append(self.gen_token(Tok.COMMA))
1940
1941
  new_kid.append(self.error_msg)
1941
1942
  new_kid.append(self.gen_token(Tok.SEMI))
1942
- AstNode.set_kids(self, nodes=new_kid)
1943
+ self.set_kids(nodes=new_kid)
1943
1944
  return res
1944
1945
 
1945
1946
 
@@ -1961,7 +1962,7 @@ class CtrlStmt(CodeBlockStmt):
1961
1962
  if deep:
1962
1963
  res = self.ctrl.normalize(deep)
1963
1964
  new_kid: list[AstNode] = [self.ctrl, self.gen_token(Tok.SEMI)]
1964
- AstNode.set_kids(self, nodes=new_kid)
1965
+ self.set_kids(nodes=new_kid)
1965
1966
  return res
1966
1967
 
1967
1968
 
@@ -1987,7 +1988,7 @@ class DeleteStmt(CodeBlockStmt):
1987
1988
  self.target,
1988
1989
  self.gen_token(Tok.SEMI),
1989
1990
  ]
1990
- AstNode.set_kids(self, nodes=new_kid)
1991
+ self.set_kids(nodes=new_kid)
1991
1992
  return res
1992
1993
 
1993
1994
 
@@ -2013,7 +2014,7 @@ class ReportStmt(CodeBlockStmt):
2013
2014
  self.expr,
2014
2015
  self.gen_token(Tok.SEMI),
2015
2016
  ]
2016
- AstNode.set_kids(self, nodes=new_kid)
2017
+ self.set_kids(nodes=new_kid)
2017
2018
  return res
2018
2019
 
2019
2020
 
@@ -2040,7 +2041,7 @@ class ReturnStmt(CodeBlockStmt):
2040
2041
  if self.expr:
2041
2042
  new_kid.append(self.expr)
2042
2043
  new_kid.append(self.gen_token(Tok.SEMI))
2043
- AstNode.set_kids(self, nodes=new_kid)
2044
+ self.set_kids(nodes=new_kid)
2044
2045
  return res
2045
2046
 
2046
2047
 
@@ -2067,7 +2068,7 @@ class IgnoreStmt(WalkerStmtOnlyNode, CodeBlockStmt):
2067
2068
  self.target,
2068
2069
  self.gen_token(Tok.SEMI),
2069
2070
  ]
2070
- AstNode.set_kids(self, nodes=new_kid)
2071
+ self.set_kids(nodes=new_kid)
2071
2072
  return res
2072
2073
 
2073
2074
 
@@ -2106,7 +2107,7 @@ class VisitStmt(WalkerStmtOnlyNode, AstElseBodyNode, CodeBlockStmt):
2106
2107
  new_kid.append(self.else_body)
2107
2108
  else:
2108
2109
  new_kid.append(self.gen_token(Tok.SEMI))
2109
- AstNode.set_kids(self, nodes=new_kid)
2110
+ self.set_kids(nodes=new_kid)
2110
2111
  return res
2111
2112
 
2112
2113
 
@@ -2137,7 +2138,7 @@ class RevisitStmt(WalkerStmtOnlyNode, AstElseBodyNode, CodeBlockStmt):
2137
2138
  if self.else_body:
2138
2139
  new_kid.append(self.else_body)
2139
2140
  new_kid.append(self.gen_token(Tok.SEMI))
2140
- AstNode.set_kids(self, nodes=new_kid)
2141
+ self.set_kids(nodes=new_kid)
2141
2142
  return res
2142
2143
 
2143
2144
 
@@ -2158,7 +2159,7 @@ class DisengageStmt(WalkerStmtOnlyNode, CodeBlockStmt):
2158
2159
  self.gen_token(Tok.KW_DISENGAGE),
2159
2160
  self.gen_token(Tok.SEMI),
2160
2161
  ]
2161
- AstNode.set_kids(self, nodes=new_kid)
2162
+ self.set_kids(nodes=new_kid)
2162
2163
  return True
2163
2164
 
2164
2165
 
@@ -2183,7 +2184,7 @@ class AwaitExpr(Expr):
2183
2184
  self.gen_token(Tok.KW_AWAIT),
2184
2185
  self.target,
2185
2186
  ]
2186
- AstNode.set_kids(self, nodes=new_kid)
2187
+ self.set_kids(nodes=new_kid)
2187
2188
  return res
2188
2189
 
2189
2190
 
@@ -2209,7 +2210,7 @@ class GlobalStmt(CodeBlockStmt):
2209
2210
  self.target,
2210
2211
  self.gen_token(Tok.SEMI),
2211
2212
  ]
2212
- AstNode.set_kids(self, nodes=new_kid)
2213
+ self.set_kids(nodes=new_kid)
2213
2214
  return res
2214
2215
 
2215
2216
 
@@ -2226,7 +2227,7 @@ class NonLocalStmt(GlobalStmt):
2226
2227
  self.target,
2227
2228
  self.gen_token(Tok.SEMI),
2228
2229
  ]
2229
- AstNode.set_kids(self, nodes=new_kid)
2230
+ self.set_kids(nodes=new_kid)
2230
2231
  return res
2231
2232
 
2232
2233
 
@@ -2282,7 +2283,7 @@ class Assignment(AstSemStrNode, AstTypedVarNode, EnumBlockStmt, CodeBlockStmt):
2282
2283
  new_kid.append(self.gen_token(Tok.SEMI))
2283
2284
  elif (not self.is_enum_stmt) and not isinstance(self.parent, IterForStmt):
2284
2285
  new_kid.append(self.gen_token(Tok.SEMI))
2285
- AstNode.set_kids(self, nodes=new_kid)
2286
+ self.set_kids(nodes=new_kid)
2286
2287
  return res
2287
2288
 
2288
2289
 
@@ -2316,7 +2317,7 @@ class BinaryExpr(Expr):
2316
2317
  self.right,
2317
2318
  self.gen_token(Tok.RPAREN),
2318
2319
  ]
2319
- AstNode.set_kids(self, nodes=new_kid)
2320
+ self.set_kids(nodes=new_kid)
2320
2321
  return res
2321
2322
 
2322
2323
 
@@ -2349,7 +2350,7 @@ class CompareExpr(Expr):
2349
2350
  for i, right in enumerate(self.rights):
2350
2351
  new_kid.append(self.ops[i])
2351
2352
  new_kid.append(right)
2352
- AstNode.set_kids(self, nodes=new_kid)
2353
+ self.set_kids(nodes=new_kid)
2353
2354
  return res
2354
2355
 
2355
2356
 
@@ -2379,7 +2380,7 @@ class BoolExpr(Expr):
2379
2380
  if i > 0:
2380
2381
  new_kid.append(self.op)
2381
2382
  new_kid.append(value)
2382
- AstNode.set_kids(self, nodes=new_kid)
2383
+ self.set_kids(nodes=new_kid)
2383
2384
  return res
2384
2385
 
2385
2386
 
@@ -2410,7 +2411,7 @@ class LambdaExpr(Expr):
2410
2411
  self.body,
2411
2412
  self.gen_token(Tok.SEMI),
2412
2413
  ]
2413
- AstNode.set_kids(self, nodes=new_kid)
2414
+ self.set_kids(nodes=new_kid)
2414
2415
  return res
2415
2416
 
2416
2417
 
@@ -2435,7 +2436,7 @@ class UnaryExpr(Expr):
2435
2436
  res = self.operand.normalize(deep)
2436
2437
  res = res and self.op.normalize(deep) if self.op else res
2437
2438
  new_kid: list[AstNode] = [self.op, self.operand]
2438
- AstNode.set_kids(self, nodes=new_kid)
2439
+ self.set_kids(nodes=new_kid)
2439
2440
  return res
2440
2441
 
2441
2442
 
@@ -2469,7 +2470,7 @@ class IfElseExpr(Expr):
2469
2470
  self.gen_token(Tok.KW_ELSE),
2470
2471
  self.else_value,
2471
2472
  ]
2472
- AstNode.set_kids(self, nodes=new_kid)
2473
+ self.set_kids(nodes=new_kid)
2473
2474
  return res
2474
2475
 
2475
2476
 
@@ -2500,7 +2501,7 @@ class MultiString(AtomExpr):
2500
2501
  new_kid: list[AstNode] = []
2501
2502
  for string in self.strings:
2502
2503
  new_kid.append(string)
2503
- AstNode.set_kids(self, nodes=new_kid)
2504
+ self.set_kids(nodes=new_kid)
2504
2505
  return res
2505
2506
 
2506
2507
 
@@ -2535,7 +2536,7 @@ class FString(AtomExpr):
2535
2536
  "{{" if i.value == "{" else "}}" if i.value == "}" else i.value
2536
2537
  )
2537
2538
  new_kid.append(self.parts)
2538
- AstNode.set_kids(self, nodes=new_kid)
2539
+ self.set_kids(nodes=new_kid)
2539
2540
  return res
2540
2541
 
2541
2542
 
@@ -2568,7 +2569,7 @@ class ListVal(AtomExpr):
2568
2569
  if self.values:
2569
2570
  new_kid.append(self.values)
2570
2571
  new_kid.append(self.gen_token(Tok.RSQUARE))
2571
- AstNode.set_kids(self, nodes=new_kid)
2572
+ self.set_kids(nodes=new_kid)
2572
2573
  return res
2573
2574
 
2574
2575
 
@@ -2601,7 +2602,7 @@ class SetVal(AtomExpr):
2601
2602
  if self.values:
2602
2603
  new_kid.append(self.values)
2603
2604
  new_kid.append(self.gen_token(Tok.RBRACE))
2604
- AstNode.set_kids(self, nodes=new_kid)
2605
+ self.set_kids(nodes=new_kid)
2605
2606
  return res
2606
2607
 
2607
2608
 
@@ -2649,7 +2650,7 @@ class TupleVal(AtomExpr):
2649
2650
  new_kid.append(self.gen_token(Tok.COMMA))
2650
2651
  if not in_ret_type:
2651
2652
  new_kid.append(self.gen_token(Tok.RPAREN))
2652
- AstNode.set_kids(self, nodes=new_kid)
2653
+ self.set_kids(nodes=new_kid)
2653
2654
  return res
2654
2655
 
2655
2656
 
@@ -2685,7 +2686,7 @@ class DictVal(AtomExpr):
2685
2686
  if i < len(self.kv_pairs) - 1:
2686
2687
  new_kid.append(self.gen_token(Tok.COMMA))
2687
2688
  new_kid.append(self.gen_token(Tok.RBRACE))
2688
- AstNode.set_kids(self, nodes=new_kid)
2689
+ self.set_kids(nodes=new_kid)
2689
2690
  return res
2690
2691
 
2691
2692
 
@@ -2716,7 +2717,7 @@ class KVPair(AstNode):
2716
2717
  else:
2717
2718
  new_kid.append(self.gen_token(Tok.STAR_POW))
2718
2719
  new_kid.append(self.value)
2719
- AstNode.set_kids(self, nodes=new_kid)
2720
+ self.set_kids(nodes=new_kid)
2720
2721
  return res
2721
2722
 
2722
2723
 
@@ -2745,7 +2746,7 @@ class KWPair(AstNode):
2745
2746
  new_kid.append(self.key)
2746
2747
  new_kid.append(self.gen_token(Tok.EQ))
2747
2748
  new_kid.append(self.value)
2748
- AstNode.set_kids(self, nodes=new_kid)
2749
+ self.set_kids(nodes=new_kid)
2749
2750
  return res
2750
2751
 
2751
2752
 
@@ -2785,7 +2786,7 @@ class InnerCompr(AstAsyncNode):
2785
2786
  for cond in self.conditional if self.conditional else []:
2786
2787
  new_kid.append(self.gen_token(Tok.KW_IF))
2787
2788
  new_kid.append(cond)
2788
- AstNode.set_kids(self, nodes=new_kid)
2789
+ self.set_kids(nodes=new_kid)
2789
2790
  return res
2790
2791
 
2791
2792
 
@@ -2823,7 +2824,7 @@ class ListCompr(AtomExpr):
2823
2824
  for comp in self.compr:
2824
2825
  new_kid.append(comp)
2825
2826
  new_kid.append(self.gen_token(Tok.RSQUARE))
2826
- AstNode.set_kids(self, nodes=new_kid)
2827
+ self.set_kids(nodes=new_kid)
2827
2828
  return res
2828
2829
 
2829
2830
 
@@ -2844,7 +2845,7 @@ class GenCompr(ListCompr):
2844
2845
  for comp in self.compr:
2845
2846
  new_kid.append(comp)
2846
2847
  new_kid.append(self.gen_token(Tok.RPAREN))
2847
- AstNode.set_kids(self, nodes=new_kid)
2848
+ self.set_kids(nodes=new_kid)
2848
2849
  return res
2849
2850
 
2850
2851
 
@@ -2865,7 +2866,7 @@ class SetCompr(ListCompr):
2865
2866
  for comp in self.compr:
2866
2867
  new_kid.append(comp)
2867
2868
  new_kid.append(self.gen_token(Tok.RBRACE))
2868
- AstNode.set_kids(self, nodes=new_kid)
2869
+ self.set_kids(nodes=new_kid)
2869
2870
  return res
2870
2871
 
2871
2872
 
@@ -2902,7 +2903,7 @@ class DictCompr(AtomExpr):
2902
2903
  for comp in self.compr:
2903
2904
  new_kid.append(comp)
2904
2905
  new_kid.append(self.gen_token(Tok.RBRACE))
2905
- AstNode.set_kids(self, nodes=new_kid)
2906
+ self.set_kids(nodes=new_kid)
2906
2907
  return res
2907
2908
 
2908
2909
 
@@ -2916,12 +2917,14 @@ class AtomTrailer(Expr):
2916
2917
  is_attr: bool,
2917
2918
  is_null_ok: bool,
2918
2919
  kid: Sequence[AstNode],
2920
+ is_genai: bool = False,
2919
2921
  ) -> None:
2920
2922
  """Initialize atom trailer expression node."""
2921
2923
  self.target = target
2922
2924
  self.right = right
2923
2925
  self.is_attr = is_attr
2924
2926
  self.is_null_ok = is_null_ok
2927
+ self.is_genai = is_genai
2925
2928
  AstNode.__init__(self, kid=kid)
2926
2929
 
2927
2930
  def normalize(self, deep: bool = True) -> bool:
@@ -2937,7 +2940,7 @@ class AtomTrailer(Expr):
2937
2940
  new_kid.append(self.gen_token(Tok.DOT))
2938
2941
  if self.right:
2939
2942
  new_kid.append(self.right)
2940
- AstNode.set_kids(self, nodes=new_kid)
2943
+ self.set_kids(nodes=new_kid)
2941
2944
  return res
2942
2945
 
2943
2946
 
@@ -2962,7 +2965,7 @@ class AtomUnit(Expr):
2962
2965
  new_kid.append(self.gen_token(Tok.LPAREN))
2963
2966
  new_kid.append(self.value)
2964
2967
  new_kid.append(self.gen_token(Tok.RPAREN))
2965
- AstNode.set_kids(self, nodes=new_kid)
2968
+ self.set_kids(nodes=new_kid)
2966
2969
  return res
2967
2970
 
2968
2971
 
@@ -2991,7 +2994,7 @@ class YieldExpr(Expr):
2991
2994
  if self.expr:
2992
2995
  new_kid.append(self.expr)
2993
2996
  new_kid.append(self.gen_token(Tok.SEMI))
2994
- AstNode.set_kids(self, nodes=new_kid)
2997
+ self.set_kids(nodes=new_kid)
2995
2998
  return res
2996
2999
 
2997
3000
 
@@ -3002,11 +3005,13 @@ class FuncCall(Expr):
3002
3005
  self,
3003
3006
  target: Expr,
3004
3007
  params: Optional[SubNodeList[Expr | KWPair]],
3008
+ genai_call: Optional[FuncCall],
3005
3009
  kid: Sequence[AstNode],
3006
3010
  ) -> None:
3007
3011
  """Initialize function call expression node."""
3008
3012
  self.target = target
3009
3013
  self.params = params
3014
+ self.genai_call = genai_call
3010
3015
  AstNode.__init__(self, kid=kid)
3011
3016
 
3012
3017
  def normalize(self, deep: bool = True) -> bool:
@@ -3014,10 +3019,14 @@ class FuncCall(Expr):
3014
3019
  if deep:
3015
3020
  res = self.target.normalize(deep)
3016
3021
  res = res and (not self.params or self.params.normalize(deep))
3017
- AstNode.__init__(self, kid=[self.target, self.gen_token(Tok.LPAREN, "(")])
3018
- if self.params: # TODO: Fix
3019
- self.kid.append(self.params)
3020
- self.kid.append(self.gen_token(Tok.RPAREN, ")"))
3022
+ new_kids = [self.target, self.gen_token(Tok.LPAREN, "(")]
3023
+ if self.params:
3024
+ new_kids.append(self.params)
3025
+ if self.genai_call:
3026
+ new_kids.append(self.gen_token(Tok.KW_BY))
3027
+ new_kids.append(self.genai_call)
3028
+ new_kids.append(self.gen_token(Tok.RPAREN, ")"))
3029
+ self.set_kids(nodes=new_kids)
3021
3030
  return res
3022
3031
 
3023
3032
 
@@ -3068,7 +3077,7 @@ class IndexSlice(AtomExpr):
3068
3077
  else:
3069
3078
  res = False
3070
3079
  new_kid.append(self.gen_token(Tok.RSQUARE))
3071
- AstNode.set_kids(self, nodes=new_kid)
3080
+ self.set_kids(nodes=new_kid)
3072
3081
  return res
3073
3082
 
3074
3083
 
@@ -3098,7 +3107,7 @@ class ArchRef(NameSpec):
3098
3107
  if deep:
3099
3108
  res = self.name_ref.normalize(deep)
3100
3109
  new_kid: list[AstNode] = [self.arch, self.name_ref]
3101
- AstNode.set_kids(self, nodes=new_kid)
3110
+ self.set_kids(nodes=new_kid)
3102
3111
  return res
3103
3112
 
3104
3113
  def py_resolve_name(self) -> str:
@@ -3135,7 +3144,7 @@ class SpecialVarRef(NameSpec):
3135
3144
  if deep:
3136
3145
  res = self.var.normalize(deep)
3137
3146
  new_kid: list[AstNode] = [self.var]
3138
- AstNode.set_kids(self, nodes=new_kid)
3147
+ self.set_kids(nodes=new_kid)
3139
3148
  return res
3140
3149
 
3141
3150
  def py_resolve_name(self) -> str:
@@ -3181,7 +3190,7 @@ class EdgeRefTrailer(Expr):
3181
3190
  new_kid.append(self.gen_token(Tok.LSQUARE))
3182
3191
  new_kid.extend(self.chain)
3183
3192
  new_kid.append(self.gen_token(Tok.RSQUARE))
3184
- AstNode.set_kids(self, nodes=new_kid)
3193
+ self.set_kids(nodes=new_kid)
3185
3194
  return res
3186
3195
 
3187
3196
 
@@ -3233,7 +3242,7 @@ class EdgeOpRef(WalkerStmtOnlyNode, AtomExpr):
3233
3242
  new_kid.append(self.gen_token(Tok.ARROW_L_P1))
3234
3243
  new_kid.append(self.filter_cond)
3235
3244
  new_kid.append(self.gen_token(Tok.ARROW_R_P2))
3236
- AstNode.set_kids(self, nodes=new_kid)
3245
+ self.set_kids(nodes=new_kid)
3237
3246
  return res
3238
3247
 
3239
3248
 
@@ -3256,7 +3265,7 @@ class DisconnectOp(WalkerStmtOnlyNode):
3256
3265
  if deep:
3257
3266
  res = self.edge_spec.normalize(deep)
3258
3267
  new_kid: list[AstNode] = [self.gen_token(Tok.KW_DELETE), self.edge_spec]
3259
- AstNode.set_kids(self, nodes=new_kid)
3268
+ self.set_kids(nodes=new_kid)
3260
3269
  return res
3261
3270
 
3262
3271
 
@@ -3316,7 +3325,7 @@ class ConnectOp(AstNode):
3316
3325
  new_kid.append(self.gen_token(Tok.COLON))
3317
3326
  new_kid.append(self.conn_assign)
3318
3327
  new_kid.append(self.gen_token(Tok.CARROW_R_P2))
3319
- AstNode.set_kids(self, nodes=new_kid)
3328
+ self.set_kids(nodes=new_kid)
3320
3329
  return res
3321
3330
 
3322
3331
 
@@ -3360,7 +3369,7 @@ class FilterCompr(AtomExpr):
3360
3369
  new_kid.append(self.compares)
3361
3370
  if not isinstance(self.parent, EdgeOpRef):
3362
3371
  new_kid.append(self.gen_token(Tok.RPAREN))
3363
- AstNode.set_kids(self, nodes=new_kid)
3372
+ self.set_kids(nodes=new_kid)
3364
3373
  return res
3365
3374
 
3366
3375
 
@@ -3395,7 +3404,7 @@ class AssignCompr(AtomExpr):
3395
3404
  new_kid.append(self.gen_token(Tok.EQ))
3396
3405
  new_kid.append(self.assigns)
3397
3406
  new_kid.append(self.gen_token(Tok.RPAREN))
3398
- AstNode.set_kids(self, nodes=new_kid)
3407
+ self.set_kids(nodes=new_kid)
3399
3408
  return res
3400
3409
 
3401
3410
 
@@ -3433,7 +3442,7 @@ class MatchStmt(CodeBlockStmt):
3433
3442
  new_kid.append(case)
3434
3443
  new_kid.append(self.gen_token(Tok.RBRACE))
3435
3444
 
3436
- AstNode.set_kids(self, nodes=new_kid)
3445
+ self.set_kids(nodes=new_kid)
3437
3446
  return res
3438
3447
 
3439
3448
 
@@ -3468,7 +3477,7 @@ class MatchCase(AstNode):
3468
3477
  new_kid.append(self.gen_token(Tok.COLON))
3469
3478
  if self.body:
3470
3479
  new_kid.extend([*self.body])
3471
- AstNode.set_kids(self, nodes=new_kid)
3480
+ self.set_kids(nodes=new_kid)
3472
3481
  return res
3473
3482
 
3474
3483
 
@@ -3495,7 +3504,7 @@ class MatchOr(MatchPattern):
3495
3504
  new_kid.append(pattern)
3496
3505
  new_kid.append(self.gen_token(Tok.KW_OR))
3497
3506
  new_kid.pop()
3498
- AstNode.set_kids(self, nodes=new_kid)
3507
+ self.set_kids(nodes=new_kid)
3499
3508
  return res
3500
3509
 
3501
3510
 
@@ -3524,7 +3533,7 @@ class MatchAs(MatchPattern):
3524
3533
  new_kid.append(self.pattern)
3525
3534
  new_kid.append(self.gen_token(Tok.KW_AS))
3526
3535
  new_kid.append(self.name)
3527
- AstNode.set_kids(self, nodes=new_kid)
3536
+ self.set_kids(nodes=new_kid)
3528
3537
  return res
3529
3538
 
3530
3539
 
@@ -3568,7 +3577,7 @@ class MatchValue(MatchPattern):
3568
3577
  res = True
3569
3578
  if deep:
3570
3579
  res = self.value.normalize(deep)
3571
- AstNode.set_kids(self, nodes=[self.value])
3580
+ self.set_kids(nodes=[self.value])
3572
3581
  return res
3573
3582
 
3574
3583
 
@@ -3587,7 +3596,7 @@ class MatchSingleton(MatchPattern):
3587
3596
  def normalize(self, deep: bool = False) -> bool:
3588
3597
  """Normalize match singleton node."""
3589
3598
  res = True
3590
- AstNode.set_kids(self, nodes=[self.value])
3599
+ self.set_kids(nodes=[self.value])
3591
3600
  return res
3592
3601
 
3593
3602
 
@@ -3615,7 +3624,7 @@ class MatchSequence(MatchPattern):
3615
3624
  new_kid.append(self.gen_token(Tok.COMMA))
3616
3625
  new_kid.pop()
3617
3626
  new_kid.append(self.gen_token(Tok.RSQUARE))
3618
- AstNode.set_kids(self, nodes=new_kid)
3627
+ self.set_kids(nodes=new_kid)
3619
3628
  return res
3620
3629
 
3621
3630
 
@@ -3643,7 +3652,7 @@ class MatchMapping(MatchPattern):
3643
3652
  new_kid.append(self.gen_token(Tok.COMMA))
3644
3653
  new_kid.pop()
3645
3654
  new_kid.append(self.gen_token(Tok.RBRACE))
3646
- AstNode.set_kids(self, nodes=new_kid)
3655
+ self.set_kids(nodes=new_kid)
3647
3656
  return res
3648
3657
 
3649
3658
 
@@ -3671,7 +3680,7 @@ class MatchKVPair(MatchPattern):
3671
3680
  res = res and self.value.normalize(deep)
3672
3681
  op = Tok.EQ if isinstance(self.key, Name) else Tok.COLON
3673
3682
  new_kid: list[AstNode] = [self.key, self.gen_token(op), self.value]
3674
- AstNode.set_kids(self, nodes=new_kid)
3683
+ self.set_kids(nodes=new_kid)
3675
3684
  return res
3676
3685
 
3677
3686
 
@@ -3698,7 +3707,7 @@ class MatchStar(MatchPattern):
3698
3707
  self.gen_token(Tok.STAR_MUL if self.is_list else Tok.STAR_POW)
3699
3708
  ]
3700
3709
  new_kid.append(self.name)
3701
- AstNode.set_kids(self, nodes=new_kid)
3710
+ self.set_kids(nodes=new_kid)
3702
3711
  return res
3703
3712
 
3704
3713
 
@@ -3735,7 +3744,7 @@ class MatchArch(MatchPattern):
3735
3744
  else:
3736
3745
  new_kid.pop()
3737
3746
  new_kid.append(self.gen_token(Tok.RPAREN))
3738
- AstNode.set_kids(self, nodes=new_kid)
3747
+ self.set_kids(nodes=new_kid)
3739
3748
  return res
3740
3749
 
3741
3750