jaclang 0.5.8__py3-none-any.whl → 0.5.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of jaclang might be problematic. Click here for more details.
- jaclang/cli/cli.py +58 -0
- jaclang/compiler/__init__.py +53 -0
- jaclang/compiler/absyntree.py +218 -174
- jaclang/compiler/parser.py +3 -0
- jaclang/compiler/passes/ir_pass.py +18 -0
- jaclang/compiler/passes/main/__init__.py +2 -0
- jaclang/compiler/passes/main/pyast_gen_pass.py +239 -34
- jaclang/compiler/passes/main/registry_pass.py +126 -0
- jaclang/compiler/passes/main/schedules.py +2 -0
- jaclang/compiler/passes/main/tests/test_registry_pass.py +39 -0
- jaclang/compiler/passes/tool/tests/test_unparse_validate.py +28 -6
- jaclang/core/aott.py +193 -28
- jaclang/core/construct.py +7 -2
- jaclang/core/registry.py +115 -0
- jaclang/core/utils.py +25 -0
- jaclang/plugin/default.py +57 -13
- jaclang/plugin/feature.py +6 -2
- jaclang/plugin/spec.py +4 -2
- jaclang/utils/helpers.py +41 -3
- jaclang/utils/lang_tools.py +2 -37
- {jaclang-0.5.8.dist-info → jaclang-0.5.9.dist-info}/METADATA +1 -1
- {jaclang-0.5.8.dist-info → jaclang-0.5.9.dist-info}/RECORD +25 -24
- jaclang/compiler/__jac_gen__/__init__.py +0 -0
- jaclang/compiler/__jac_gen__/jac_parser.py +0 -4069
- {jaclang-0.5.8.dist-info → jaclang-0.5.9.dist-info}/WHEEL +0 -0
- {jaclang-0.5.8.dist-info → jaclang-0.5.9.dist-info}/entry_points.txt +0 -0
- {jaclang-0.5.8.dist-info → jaclang-0.5.9.dist-info}/top_level.txt +0 -0
jaclang/compiler/absyntree.py
CHANGED
|
@@ -17,6 +17,7 @@ from jaclang.compiler.symtable import (
|
|
|
17
17
|
SymbolTable,
|
|
18
18
|
SymbolType,
|
|
19
19
|
)
|
|
20
|
+
from jaclang.core.registry import SemRegistry
|
|
20
21
|
from jaclang.utils.treeprinter import dotgen_ast_tree, print_ast_tree
|
|
21
22
|
|
|
22
23
|
|
|
@@ -109,6 +110,12 @@ class AstNode:
|
|
|
109
110
|
|
|
110
111
|
return Pass.get_all_sub_nodes(node=self, typ=typ, brute_force=brute_force)
|
|
111
112
|
|
|
113
|
+
def has_parent_of_type(self, typ: Type[T]) -> Optional[T]:
|
|
114
|
+
"""Get parent of type."""
|
|
115
|
+
from jaclang.compiler.passes import Pass
|
|
116
|
+
|
|
117
|
+
return Pass.has_parent_of_type(node=self, typ=typ)
|
|
118
|
+
|
|
112
119
|
def format(self) -> str:
|
|
113
120
|
"""Get all sub nodes of type."""
|
|
114
121
|
from jaclang.compiler.passes.tool import JacFormatPass
|
|
@@ -320,7 +327,7 @@ class SubTag(AstNode, Generic[T]):
|
|
|
320
327
|
def normalize(self, deep: bool = False) -> bool:
|
|
321
328
|
"""Normalize sub tag node."""
|
|
322
329
|
res = self.tag.normalize() if deep else True
|
|
323
|
-
AstNode.
|
|
330
|
+
AstNode.set_kids(self, nodes=[self.gen_token(Tok.COLON), self.tag])
|
|
324
331
|
return res
|
|
325
332
|
|
|
326
333
|
|
|
@@ -363,7 +370,7 @@ class SubNodeList(AstNode, Generic[T]):
|
|
|
363
370
|
new_kid.pop()
|
|
364
371
|
if self.right_enc:
|
|
365
372
|
new_kid.append(self.right_enc)
|
|
366
|
-
AstNode.
|
|
373
|
+
AstNode.set_kids(self, nodes=new_kid if len(new_kid) else [EmptyToken()])
|
|
367
374
|
return res
|
|
368
375
|
|
|
369
376
|
|
|
@@ -382,6 +389,7 @@ class Module(AstDocNode):
|
|
|
382
389
|
kid: Sequence[AstNode],
|
|
383
390
|
impl_mod: Optional[Module] = None,
|
|
384
391
|
test_mod: Optional[Module] = None,
|
|
392
|
+
registry: Optional[SemRegistry] = None,
|
|
385
393
|
) -> None:
|
|
386
394
|
"""Initialize whole program node."""
|
|
387
395
|
self.name = name
|
|
@@ -391,6 +399,7 @@ class Module(AstDocNode):
|
|
|
391
399
|
self.impl_mod = impl_mod
|
|
392
400
|
self.test_mod = test_mod
|
|
393
401
|
self.mod_deps: dict[str, Module] = {}
|
|
402
|
+
self.registry = registry
|
|
394
403
|
AstNode.__init__(self, kid=kid)
|
|
395
404
|
AstDocNode.__init__(self, doc=doc)
|
|
396
405
|
|
|
@@ -405,7 +414,7 @@ class Module(AstDocNode):
|
|
|
405
414
|
if self.doc:
|
|
406
415
|
new_kid.append(self.doc)
|
|
407
416
|
new_kid.extend(self.body)
|
|
408
|
-
AstNode.
|
|
417
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
409
418
|
return res
|
|
410
419
|
|
|
411
420
|
def unparse(self) -> str:
|
|
@@ -440,17 +449,16 @@ class GlobalVars(ElementStmt, AstAccessNode):
|
|
|
440
449
|
res = res and self.assignments.normalize(deep)
|
|
441
450
|
res = res and self.doc.normalize(deep) if self.doc else res
|
|
442
451
|
new_kid: list[AstNode] = []
|
|
452
|
+
if self.doc:
|
|
453
|
+
new_kid.append(self.doc)
|
|
443
454
|
if self.is_frozen:
|
|
444
455
|
new_kid.append(self.gen_token(Tok.KW_LET))
|
|
445
456
|
else:
|
|
446
457
|
new_kid.append(self.gen_token(Tok.KW_GLOBAL))
|
|
447
|
-
if self.doc:
|
|
448
|
-
new_kid.append(self.doc)
|
|
449
458
|
if self.access:
|
|
450
459
|
new_kid.append(self.access)
|
|
451
460
|
new_kid.append(self.assignments)
|
|
452
|
-
|
|
453
|
-
AstNode.__init__(self, kid=new_kid)
|
|
461
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
454
462
|
return res
|
|
455
463
|
|
|
456
464
|
|
|
@@ -508,10 +516,8 @@ class Test(AstSymbolNode, ElementStmt):
|
|
|
508
516
|
new_kid.append(self.doc)
|
|
509
517
|
new_kid.append(self.gen_token(Tok.KW_TEST))
|
|
510
518
|
new_kid.append(self.name)
|
|
511
|
-
|
|
512
519
|
new_kid.append(self.body)
|
|
513
|
-
|
|
514
|
-
AstNode.__init__(self, kid=new_kid)
|
|
520
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
515
521
|
return res
|
|
516
522
|
|
|
517
523
|
|
|
@@ -545,10 +551,8 @@ class ModuleCode(ElementStmt, ArchBlockStmt, EnumBlockStmt):
|
|
|
545
551
|
new_kid.append(self.gen_token(Tok.KW_ENTRY))
|
|
546
552
|
if self.name:
|
|
547
553
|
new_kid.append(self.name)
|
|
548
|
-
|
|
549
554
|
new_kid.append(self.body)
|
|
550
|
-
|
|
551
|
-
AstNode.__init__(self, kid=new_kid)
|
|
555
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
552
556
|
return res
|
|
553
557
|
|
|
554
558
|
|
|
@@ -578,7 +582,7 @@ class PyInlineCode(ElementStmt, ArchBlockStmt, EnumBlockStmt, CodeBlockStmt):
|
|
|
578
582
|
new_kid.append(self.gen_token(Tok.PYNLINE))
|
|
579
583
|
new_kid.append(self.code)
|
|
580
584
|
new_kid.append(self.gen_token(Tok.PYNLINE))
|
|
581
|
-
AstNode.
|
|
585
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
582
586
|
return res
|
|
583
587
|
|
|
584
588
|
|
|
@@ -629,7 +633,7 @@ class Import(ElementStmt, CodeBlockStmt):
|
|
|
629
633
|
new_kid.append(self.gen_token(Tok.COMMA))
|
|
630
634
|
new_kid.append(self.items)
|
|
631
635
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
632
|
-
AstNode.
|
|
636
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
633
637
|
return res
|
|
634
638
|
|
|
635
639
|
|
|
@@ -667,8 +671,8 @@ class ModulePath(AstSymbolNode):
|
|
|
667
671
|
res = res and p.normalize(deep)
|
|
668
672
|
res = res and self.alias.normalize(deep) if self.alias else res
|
|
669
673
|
new_kid: list[AstNode] = []
|
|
670
|
-
for _ in range(self.level):
|
|
671
|
-
|
|
674
|
+
# for _ in range(self.level):
|
|
675
|
+
# new_kid.append(self.gen_token(Tok.DOT))
|
|
672
676
|
if self.path:
|
|
673
677
|
for p in self.path:
|
|
674
678
|
res = res and p.normalize(deep)
|
|
@@ -678,7 +682,7 @@ class ModulePath(AstSymbolNode):
|
|
|
678
682
|
if self.alias:
|
|
679
683
|
res = res and self.alias.normalize(deep)
|
|
680
684
|
new_kid.append(self.alias)
|
|
681
|
-
AstNode.
|
|
685
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
682
686
|
return res
|
|
683
687
|
|
|
684
688
|
@property
|
|
@@ -719,7 +723,7 @@ class ModuleItem(AstSymbolNode):
|
|
|
719
723
|
if self.alias:
|
|
720
724
|
new_kid.append(self.gen_token(Tok.KW_AS))
|
|
721
725
|
new_kid.append(self.alias)
|
|
722
|
-
AstNode.
|
|
726
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
723
727
|
return res
|
|
724
728
|
|
|
725
729
|
|
|
@@ -798,9 +802,14 @@ class Architype(ArchSpec, AstAccessNode, ArchBlockStmt, AstImplNeedingNode):
|
|
|
798
802
|
new_kid: list[AstNode] = []
|
|
799
803
|
if self.doc:
|
|
800
804
|
new_kid.append(self.doc)
|
|
805
|
+
if self.decorators:
|
|
806
|
+
new_kid.append(self.gen_token(Tok.DECOR_OP))
|
|
807
|
+
new_kid.append(self.decorators)
|
|
801
808
|
new_kid.append(self.arch_type)
|
|
802
809
|
if self.access:
|
|
803
810
|
new_kid.append(self.access)
|
|
811
|
+
if self.semstr:
|
|
812
|
+
new_kid.append(self.semstr)
|
|
804
813
|
new_kid.append(self.name)
|
|
805
814
|
if self.base_classes:
|
|
806
815
|
new_kid.append(self.gen_token(Tok.COLON))
|
|
@@ -808,12 +817,12 @@ class Architype(ArchSpec, AstAccessNode, ArchBlockStmt, AstImplNeedingNode):
|
|
|
808
817
|
new_kid.append(self.gen_token(Tok.COLON))
|
|
809
818
|
if self.body:
|
|
810
819
|
if isinstance(self.body, AstImplOnlyNode):
|
|
811
|
-
new_kid.append(self.
|
|
820
|
+
new_kid.append(self.gen_token(Tok.SEMI))
|
|
812
821
|
else:
|
|
813
822
|
new_kid.append(self.body)
|
|
814
823
|
else:
|
|
815
824
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
816
|
-
AstNode.
|
|
825
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
817
826
|
return res
|
|
818
827
|
|
|
819
828
|
|
|
@@ -854,14 +863,12 @@ class ArchDef(ArchSpec, AstImplOnlyNode):
|
|
|
854
863
|
if self.doc:
|
|
855
864
|
new_kid.append(self.doc)
|
|
856
865
|
new_kid.append(self.target)
|
|
857
|
-
|
|
858
866
|
new_kid.append(self.body)
|
|
859
|
-
|
|
860
|
-
AstNode.__init__(self, kid=new_kid)
|
|
867
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
861
868
|
return res
|
|
862
869
|
|
|
863
870
|
|
|
864
|
-
class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode):
|
|
871
|
+
class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt):
|
|
865
872
|
"""Enum node type for Jac Ast."""
|
|
866
873
|
|
|
867
874
|
def __init__(
|
|
@@ -910,6 +917,8 @@ class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode):
|
|
|
910
917
|
new_kid.append(self.gen_token(Tok.KW_ENUM))
|
|
911
918
|
if self.access:
|
|
912
919
|
new_kid.append(self.access)
|
|
920
|
+
if self.semstr:
|
|
921
|
+
new_kid.append(self.semstr)
|
|
913
922
|
new_kid.append(self.name)
|
|
914
923
|
if self.base_classes:
|
|
915
924
|
new_kid.append(self.gen_token(Tok.COLON))
|
|
@@ -917,12 +926,14 @@ class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode):
|
|
|
917
926
|
new_kid.append(self.gen_token(Tok.COLON))
|
|
918
927
|
if self.body:
|
|
919
928
|
if isinstance(self.body, AstImplOnlyNode):
|
|
920
|
-
new_kid.append(self.
|
|
929
|
+
new_kid.append(self.gen_token(Tok.SEMI))
|
|
921
930
|
else:
|
|
931
|
+
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
922
932
|
new_kid.append(self.body)
|
|
933
|
+
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
923
934
|
else:
|
|
924
935
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
925
|
-
AstNode.
|
|
936
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
926
937
|
return res
|
|
927
938
|
|
|
928
939
|
|
|
@@ -963,10 +974,10 @@ class EnumDef(ArchSpec, AstImplOnlyNode):
|
|
|
963
974
|
if self.doc:
|
|
964
975
|
new_kid.append(self.doc)
|
|
965
976
|
new_kid.append(self.target)
|
|
966
|
-
|
|
977
|
+
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
967
978
|
new_kid.append(self.body)
|
|
968
|
-
|
|
969
|
-
AstNode.
|
|
979
|
+
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
980
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
970
981
|
return res
|
|
971
982
|
|
|
972
983
|
|
|
@@ -1059,6 +1070,10 @@ class Ability(
|
|
|
1059
1070
|
new_kid: list[AstNode] = []
|
|
1060
1071
|
if self.doc:
|
|
1061
1072
|
new_kid.append(self.doc)
|
|
1073
|
+
if self.decorators:
|
|
1074
|
+
new_kid.append(self.gen_token(Tok.DECOR_OP))
|
|
1075
|
+
new_kid.append(self.decorators)
|
|
1076
|
+
new_kid.append(self.gen_token(Tok.WS))
|
|
1062
1077
|
if self.is_async:
|
|
1063
1078
|
new_kid.append(self.gen_token(Tok.KW_ASYNC))
|
|
1064
1079
|
if self.is_override:
|
|
@@ -1073,16 +1088,20 @@ class Ability(
|
|
|
1073
1088
|
new_kid.append(self.name_ref)
|
|
1074
1089
|
if self.signature:
|
|
1075
1090
|
new_kid.append(self.signature)
|
|
1091
|
+
if self.is_genai_ability:
|
|
1092
|
+
new_kid.append(self.gen_token(Tok.KW_BY))
|
|
1093
|
+
if self.is_abstract:
|
|
1094
|
+
new_kid.append(self.gen_token(Tok.KW_ABSTRACT))
|
|
1076
1095
|
if self.body:
|
|
1077
1096
|
if isinstance(self.body, AstImplOnlyNode):
|
|
1078
|
-
new_kid.append(self.
|
|
1097
|
+
new_kid.append(self.gen_token(Tok.SEMI))
|
|
1079
1098
|
else:
|
|
1080
|
-
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
1081
1099
|
new_kid.append(self.body)
|
|
1082
|
-
|
|
1100
|
+
if self.is_genai_ability:
|
|
1101
|
+
new_kid.append(self.gen_token(Tok.SEMI))
|
|
1083
1102
|
else:
|
|
1084
1103
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
1085
|
-
AstNode.
|
|
1104
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1086
1105
|
return res
|
|
1087
1106
|
|
|
1088
1107
|
|
|
@@ -1130,7 +1149,7 @@ class AbilityDef(AstSymbolNode, ElementStmt, AstImplOnlyNode, CodeBlockStmt):
|
|
|
1130
1149
|
|
|
1131
1150
|
new_kid.append(self.body)
|
|
1132
1151
|
|
|
1133
|
-
AstNode.
|
|
1152
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1134
1153
|
return res
|
|
1135
1154
|
|
|
1136
1155
|
@property
|
|
@@ -1171,8 +1190,11 @@ class FuncSignature(AstSemStrNode):
|
|
|
1171
1190
|
new_kid.append(self.gen_token(Tok.RPAREN))
|
|
1172
1191
|
if self.return_type:
|
|
1173
1192
|
new_kid.append(self.gen_token(Tok.RETURN_HINT))
|
|
1193
|
+
if self.semstr:
|
|
1194
|
+
new_kid.append(self.semstr)
|
|
1195
|
+
new_kid.append(self.gen_token(Tok.COLON))
|
|
1174
1196
|
new_kid.append(self.return_type)
|
|
1175
|
-
AstNode.
|
|
1197
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1176
1198
|
return res
|
|
1177
1199
|
|
|
1178
1200
|
@property
|
|
@@ -1231,7 +1253,7 @@ class EventSignature(AstSemStrNode):
|
|
|
1231
1253
|
new_kid.append(self.semstr)
|
|
1232
1254
|
new_kid.append(self.gen_token(Tok.RETURN_HINT))
|
|
1233
1255
|
new_kid.append(self.return_type)
|
|
1234
|
-
AstNode.
|
|
1256
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1235
1257
|
return res
|
|
1236
1258
|
|
|
1237
1259
|
@property
|
|
@@ -1267,7 +1289,7 @@ class ArchRefChain(AstNode):
|
|
|
1267
1289
|
new_kid: list[AstNode] = []
|
|
1268
1290
|
for a in self.archs:
|
|
1269
1291
|
new_kid.append(a)
|
|
1270
|
-
AstNode.
|
|
1292
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1271
1293
|
return res
|
|
1272
1294
|
|
|
1273
1295
|
def py_resolve_name(self) -> str:
|
|
@@ -1328,12 +1350,15 @@ class ParamVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
|
|
|
1328
1350
|
if self.unpack:
|
|
1329
1351
|
new_kid.append(self.unpack)
|
|
1330
1352
|
new_kid.append(self.name)
|
|
1353
|
+
if self.semstr:
|
|
1354
|
+
new_kid.append(self.gen_token(Tok.COLON))
|
|
1355
|
+
new_kid.append(self.semstr)
|
|
1331
1356
|
if self.type_tag:
|
|
1332
1357
|
new_kid.append(self.type_tag)
|
|
1333
1358
|
if self.value:
|
|
1334
1359
|
new_kid.append(self.gen_token(Tok.EQ))
|
|
1335
1360
|
new_kid.append(self.value)
|
|
1336
|
-
AstNode.
|
|
1361
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1337
1362
|
return res
|
|
1338
1363
|
|
|
1339
1364
|
|
|
@@ -1378,7 +1403,7 @@ class ArchHas(AstAccessNode, AstDocNode, ArchBlockStmt):
|
|
|
1378
1403
|
new_kid.append(self.access)
|
|
1379
1404
|
new_kid.append(self.vars)
|
|
1380
1405
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
1381
|
-
AstNode.
|
|
1406
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1382
1407
|
return res
|
|
1383
1408
|
|
|
1384
1409
|
|
|
@@ -1428,7 +1453,7 @@ class HasVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
|
|
|
1428
1453
|
if self.defer:
|
|
1429
1454
|
new_kid.append(self.gen_token(Tok.KW_BY))
|
|
1430
1455
|
new_kid.append(self.gen_token(Tok.KW_POST_INIT))
|
|
1431
|
-
AstNode.
|
|
1456
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1432
1457
|
return res
|
|
1433
1458
|
|
|
1434
1459
|
|
|
@@ -1457,7 +1482,7 @@ class TypedCtxBlock(CodeBlockStmt):
|
|
|
1457
1482
|
self.type_ctx,
|
|
1458
1483
|
self.body,
|
|
1459
1484
|
]
|
|
1460
|
-
AstNode.
|
|
1485
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1461
1486
|
return res
|
|
1462
1487
|
|
|
1463
1488
|
|
|
@@ -1487,13 +1512,11 @@ class IfStmt(CodeBlockStmt, AstElseBodyNode):
|
|
|
1487
1512
|
new_kid: list[AstNode] = [
|
|
1488
1513
|
self.gen_token(Tok.KW_IF),
|
|
1489
1514
|
self.condition,
|
|
1490
|
-
self.gen_token(Tok.LBRACE),
|
|
1491
1515
|
self.body,
|
|
1492
|
-
self.gen_token(Tok.RBRACE),
|
|
1493
1516
|
]
|
|
1494
1517
|
if self.else_body:
|
|
1495
1518
|
new_kid.append(self.else_body)
|
|
1496
|
-
AstNode.
|
|
1519
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1497
1520
|
return res
|
|
1498
1521
|
|
|
1499
1522
|
|
|
@@ -1510,13 +1533,11 @@ class ElseIf(IfStmt):
|
|
|
1510
1533
|
new_kid: list[AstNode] = [
|
|
1511
1534
|
self.gen_token(Tok.KW_ELIF),
|
|
1512
1535
|
self.condition,
|
|
1513
|
-
self.gen_token(Tok.LBRACE),
|
|
1514
1536
|
self.body,
|
|
1515
|
-
self.gen_token(Tok.RBRACE),
|
|
1516
1537
|
]
|
|
1517
1538
|
if self.else_body:
|
|
1518
1539
|
new_kid.append(self.else_body)
|
|
1519
|
-
AstNode.
|
|
1540
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1520
1541
|
return res
|
|
1521
1542
|
|
|
1522
1543
|
|
|
@@ -1539,11 +1560,9 @@ class ElseStmt(AstNode):
|
|
|
1539
1560
|
res = self.body.normalize(deep)
|
|
1540
1561
|
new_kid: list[AstNode] = [
|
|
1541
1562
|
self.gen_token(Tok.KW_ELSE),
|
|
1542
|
-
self.gen_token(Tok.LBRACE),
|
|
1543
1563
|
self.body,
|
|
1544
|
-
self.gen_token(Tok.RBRACE),
|
|
1545
1564
|
]
|
|
1546
|
-
AstNode.
|
|
1565
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1547
1566
|
return res
|
|
1548
1567
|
|
|
1549
1568
|
|
|
@@ -1565,14 +1584,13 @@ class ExprStmt(CodeBlockStmt):
|
|
|
1565
1584
|
"""Normalize ast node."""
|
|
1566
1585
|
if deep:
|
|
1567
1586
|
res = self.expr.normalize(deep)
|
|
1568
|
-
AstNode
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
)
|
|
1587
|
+
new_kid: list[AstNode] = []
|
|
1588
|
+
if self.in_fstring:
|
|
1589
|
+
new_kid.append(self.expr)
|
|
1590
|
+
else:
|
|
1591
|
+
new_kid.append(self.expr)
|
|
1592
|
+
new_kid.append(self.gen_token(Tok.SEMI))
|
|
1593
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1576
1594
|
return res and self.expr is not None
|
|
1577
1595
|
|
|
1578
1596
|
|
|
@@ -1607,16 +1625,14 @@ class TryStmt(AstElseBodyNode, CodeBlockStmt):
|
|
|
1607
1625
|
new_kid: list[AstNode] = [
|
|
1608
1626
|
self.gen_token(Tok.KW_TRY),
|
|
1609
1627
|
]
|
|
1610
|
-
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
1611
1628
|
new_kid.append(self.body)
|
|
1612
|
-
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
1613
1629
|
if self.excepts:
|
|
1614
1630
|
new_kid.append(self.excepts)
|
|
1615
1631
|
if self.else_body:
|
|
1616
1632
|
new_kid.append(self.else_body)
|
|
1617
1633
|
if self.finally_body:
|
|
1618
1634
|
new_kid.append(self.finally_body)
|
|
1619
|
-
AstNode.
|
|
1635
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1620
1636
|
return res
|
|
1621
1637
|
|
|
1622
1638
|
|
|
@@ -1650,10 +1666,8 @@ class Except(CodeBlockStmt):
|
|
|
1650
1666
|
if self.name:
|
|
1651
1667
|
new_kid.append(self.gen_token(Tok.KW_AS))
|
|
1652
1668
|
new_kid.append(self.name)
|
|
1653
|
-
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
1654
1669
|
new_kid.append(self.body)
|
|
1655
|
-
|
|
1656
|
-
AstNode.__init__(self, kid=new_kid)
|
|
1670
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1657
1671
|
return res
|
|
1658
1672
|
|
|
1659
1673
|
|
|
@@ -1677,10 +1691,8 @@ class FinallyStmt(CodeBlockStmt):
|
|
|
1677
1691
|
new_kid: list[AstNode] = [
|
|
1678
1692
|
self.gen_token(Tok.KW_FINALLY),
|
|
1679
1693
|
]
|
|
1680
|
-
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
1681
1694
|
new_kid.append(self.body)
|
|
1682
|
-
|
|
1683
|
-
AstNode.__init__(self, kid=new_kid)
|
|
1695
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1684
1696
|
return res
|
|
1685
1697
|
|
|
1686
1698
|
|
|
@@ -1724,12 +1736,10 @@ class IterForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
|
|
|
1724
1736
|
new_kid.append(self.condition)
|
|
1725
1737
|
new_kid.append(self.gen_token(Tok.KW_BY))
|
|
1726
1738
|
new_kid.append(self.count_by)
|
|
1727
|
-
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
1728
1739
|
new_kid.append(self.body)
|
|
1729
|
-
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
1730
1740
|
if self.else_body:
|
|
1731
1741
|
new_kid.append(self.else_body)
|
|
1732
|
-
AstNode.
|
|
1742
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1733
1743
|
return res
|
|
1734
1744
|
|
|
1735
1745
|
|
|
@@ -1770,13 +1780,10 @@ class InForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
|
|
|
1770
1780
|
new_kid.append(self.collection)
|
|
1771
1781
|
|
|
1772
1782
|
if self.body:
|
|
1773
|
-
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
1774
1783
|
new_kid.append(self.body)
|
|
1775
|
-
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
1776
|
-
|
|
1777
1784
|
if self.else_body:
|
|
1778
1785
|
new_kid.append(self.else_body)
|
|
1779
|
-
AstNode.
|
|
1786
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1780
1787
|
return res
|
|
1781
1788
|
|
|
1782
1789
|
|
|
@@ -1805,11 +1812,8 @@ class WhileStmt(CodeBlockStmt):
|
|
|
1805
1812
|
self.condition,
|
|
1806
1813
|
]
|
|
1807
1814
|
if self.body:
|
|
1808
|
-
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
1809
1815
|
new_kid.append(self.body)
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
AstNode.__init__(self, kid=new_kid)
|
|
1816
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1813
1817
|
return res
|
|
1814
1818
|
|
|
1815
1819
|
|
|
@@ -1840,12 +1844,11 @@ class WithStmt(AstAsyncNode, CodeBlockStmt):
|
|
|
1840
1844
|
new_kid.append(self.gen_token(Tok.KW_ASYNC))
|
|
1841
1845
|
new_kid.append(self.gen_token(Tok.KW_WITH))
|
|
1842
1846
|
new_kid.append(self.exprs)
|
|
1843
|
-
|
|
1844
1847
|
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
1845
1848
|
new_kid.append(self.body)
|
|
1846
1849
|
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
1847
1850
|
|
|
1848
|
-
AstNode.
|
|
1851
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1849
1852
|
return res
|
|
1850
1853
|
|
|
1851
1854
|
|
|
@@ -1873,7 +1876,7 @@ class ExprAsItem(AstNode):
|
|
|
1873
1876
|
if self.alias:
|
|
1874
1877
|
new_kid.append(self.gen_token(Tok.KW_AS))
|
|
1875
1878
|
new_kid.append(self.alias)
|
|
1876
|
-
AstNode.
|
|
1879
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1877
1880
|
return res
|
|
1878
1881
|
|
|
1879
1882
|
|
|
@@ -1904,7 +1907,7 @@ class RaiseStmt(CodeBlockStmt):
|
|
|
1904
1907
|
new_kid.append(self.gen_token(Tok.KW_FROM))
|
|
1905
1908
|
new_kid.append(self.from_target)
|
|
1906
1909
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
1907
|
-
AstNode.
|
|
1910
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1908
1911
|
return res
|
|
1909
1912
|
|
|
1910
1913
|
|
|
@@ -1936,7 +1939,7 @@ class AssertStmt(CodeBlockStmt):
|
|
|
1936
1939
|
new_kid.append(self.gen_token(Tok.COMMA))
|
|
1937
1940
|
new_kid.append(self.error_msg)
|
|
1938
1941
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
1939
|
-
AstNode.
|
|
1942
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1940
1943
|
return res
|
|
1941
1944
|
|
|
1942
1945
|
|
|
@@ -1958,7 +1961,7 @@ class CtrlStmt(CodeBlockStmt):
|
|
|
1958
1961
|
if deep:
|
|
1959
1962
|
res = self.ctrl.normalize(deep)
|
|
1960
1963
|
new_kid: list[AstNode] = [self.ctrl, self.gen_token(Tok.SEMI)]
|
|
1961
|
-
AstNode.
|
|
1964
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1962
1965
|
return res
|
|
1963
1966
|
|
|
1964
1967
|
|
|
@@ -1984,7 +1987,7 @@ class DeleteStmt(CodeBlockStmt):
|
|
|
1984
1987
|
self.target,
|
|
1985
1988
|
self.gen_token(Tok.SEMI),
|
|
1986
1989
|
]
|
|
1987
|
-
AstNode.
|
|
1990
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
1988
1991
|
return res
|
|
1989
1992
|
|
|
1990
1993
|
|
|
@@ -2010,7 +2013,7 @@ class ReportStmt(CodeBlockStmt):
|
|
|
2010
2013
|
self.expr,
|
|
2011
2014
|
self.gen_token(Tok.SEMI),
|
|
2012
2015
|
]
|
|
2013
|
-
AstNode.
|
|
2016
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2014
2017
|
return res
|
|
2015
2018
|
|
|
2016
2019
|
|
|
@@ -2037,7 +2040,7 @@ class ReturnStmt(CodeBlockStmt):
|
|
|
2037
2040
|
if self.expr:
|
|
2038
2041
|
new_kid.append(self.expr)
|
|
2039
2042
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
2040
|
-
AstNode.
|
|
2043
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2041
2044
|
return res
|
|
2042
2045
|
|
|
2043
2046
|
|
|
@@ -2064,7 +2067,7 @@ class IgnoreStmt(WalkerStmtOnlyNode, CodeBlockStmt):
|
|
|
2064
2067
|
self.target,
|
|
2065
2068
|
self.gen_token(Tok.SEMI),
|
|
2066
2069
|
]
|
|
2067
|
-
AstNode.
|
|
2070
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2068
2071
|
return res
|
|
2069
2072
|
|
|
2070
2073
|
|
|
@@ -2099,10 +2102,11 @@ class VisitStmt(WalkerStmtOnlyNode, AstElseBodyNode, CodeBlockStmt):
|
|
|
2099
2102
|
new_kid.append(self.vis_type)
|
|
2100
2103
|
new_kid.append(self.gen_token(Tok.COLON))
|
|
2101
2104
|
new_kid.append(self.target)
|
|
2102
|
-
new_kid.append(self.gen_token(Tok.SEMI))
|
|
2103
2105
|
if self.else_body:
|
|
2104
2106
|
new_kid.append(self.else_body)
|
|
2105
|
-
|
|
2107
|
+
else:
|
|
2108
|
+
new_kid.append(self.gen_token(Tok.SEMI))
|
|
2109
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2106
2110
|
return res
|
|
2107
2111
|
|
|
2108
2112
|
|
|
@@ -2133,7 +2137,7 @@ class RevisitStmt(WalkerStmtOnlyNode, AstElseBodyNode, CodeBlockStmt):
|
|
|
2133
2137
|
if self.else_body:
|
|
2134
2138
|
new_kid.append(self.else_body)
|
|
2135
2139
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
2136
|
-
AstNode.
|
|
2140
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2137
2141
|
return res
|
|
2138
2142
|
|
|
2139
2143
|
|
|
@@ -2154,7 +2158,7 @@ class DisengageStmt(WalkerStmtOnlyNode, CodeBlockStmt):
|
|
|
2154
2158
|
self.gen_token(Tok.KW_DISENGAGE),
|
|
2155
2159
|
self.gen_token(Tok.SEMI),
|
|
2156
2160
|
]
|
|
2157
|
-
AstNode.
|
|
2161
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2158
2162
|
return True
|
|
2159
2163
|
|
|
2160
2164
|
|
|
@@ -2179,7 +2183,7 @@ class AwaitExpr(Expr):
|
|
|
2179
2183
|
self.gen_token(Tok.KW_AWAIT),
|
|
2180
2184
|
self.target,
|
|
2181
2185
|
]
|
|
2182
|
-
AstNode.
|
|
2186
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2183
2187
|
return res
|
|
2184
2188
|
|
|
2185
2189
|
|
|
@@ -2205,7 +2209,7 @@ class GlobalStmt(CodeBlockStmt):
|
|
|
2205
2209
|
self.target,
|
|
2206
2210
|
self.gen_token(Tok.SEMI),
|
|
2207
2211
|
]
|
|
2208
|
-
AstNode.
|
|
2212
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2209
2213
|
return res
|
|
2210
2214
|
|
|
2211
2215
|
|
|
@@ -2222,7 +2226,7 @@ class NonLocalStmt(GlobalStmt):
|
|
|
2222
2226
|
self.target,
|
|
2223
2227
|
self.gen_token(Tok.SEMI),
|
|
2224
2228
|
]
|
|
2225
|
-
AstNode.
|
|
2229
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2226
2230
|
return res
|
|
2227
2231
|
|
|
2228
2232
|
|
|
@@ -2260,18 +2264,25 @@ class Assignment(AstSemStrNode, AstTypedVarNode, EnumBlockStmt, CodeBlockStmt):
|
|
|
2260
2264
|
res = res and self.aug_op.normalize(deep) if self.aug_op else res
|
|
2261
2265
|
new_kid: list[AstNode] = []
|
|
2262
2266
|
new_kid.append(self.target)
|
|
2267
|
+
if self.semstr:
|
|
2268
|
+
new_kid.append(self.gen_token(Tok.COLON))
|
|
2269
|
+
new_kid.append(self.semstr)
|
|
2263
2270
|
if self.type_tag:
|
|
2264
2271
|
new_kid.append(self.type_tag)
|
|
2265
2272
|
if self.aug_op:
|
|
2266
2273
|
new_kid.append(self.aug_op)
|
|
2267
|
-
new_kid.append(self.gen_token(Tok.EQ))
|
|
2268
|
-
else:
|
|
2269
|
-
new_kid.append(self.gen_token(Tok.EQ))
|
|
2270
2274
|
if self.value:
|
|
2275
|
+
if not self.aug_op:
|
|
2276
|
+
new_kid.append(self.gen_token(Tok.EQ))
|
|
2271
2277
|
new_kid.append(self.value)
|
|
2272
|
-
if
|
|
2278
|
+
if isinstance(self.parent, SubNodeList) and isinstance(
|
|
2279
|
+
self.parent.parent, GlobalVars
|
|
2280
|
+
):
|
|
2281
|
+
if self.parent.kid.index(self) == len(self.parent.kid) - 1:
|
|
2282
|
+
new_kid.append(self.gen_token(Tok.SEMI))
|
|
2283
|
+
elif (not self.is_enum_stmt) and not isinstance(self.parent, IterForStmt):
|
|
2273
2284
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
2274
|
-
AstNode.
|
|
2285
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2275
2286
|
return res
|
|
2276
2287
|
|
|
2277
2288
|
|
|
@@ -2305,7 +2316,7 @@ class BinaryExpr(Expr):
|
|
|
2305
2316
|
self.right,
|
|
2306
2317
|
self.gen_token(Tok.RPAREN),
|
|
2307
2318
|
]
|
|
2308
|
-
AstNode.
|
|
2319
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2309
2320
|
return res
|
|
2310
2321
|
|
|
2311
2322
|
|
|
@@ -2338,7 +2349,7 @@ class CompareExpr(Expr):
|
|
|
2338
2349
|
for i, right in enumerate(self.rights):
|
|
2339
2350
|
new_kid.append(self.ops[i])
|
|
2340
2351
|
new_kid.append(right)
|
|
2341
|
-
AstNode.
|
|
2352
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2342
2353
|
return res
|
|
2343
2354
|
|
|
2344
2355
|
|
|
@@ -2368,7 +2379,7 @@ class BoolExpr(Expr):
|
|
|
2368
2379
|
if i > 0:
|
|
2369
2380
|
new_kid.append(self.op)
|
|
2370
2381
|
new_kid.append(value)
|
|
2371
|
-
AstNode.
|
|
2382
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2372
2383
|
return res
|
|
2373
2384
|
|
|
2374
2385
|
|
|
@@ -2399,7 +2410,7 @@ class LambdaExpr(Expr):
|
|
|
2399
2410
|
self.body,
|
|
2400
2411
|
self.gen_token(Tok.SEMI),
|
|
2401
2412
|
]
|
|
2402
|
-
AstNode.
|
|
2413
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2403
2414
|
return res
|
|
2404
2415
|
|
|
2405
2416
|
|
|
@@ -2424,7 +2435,7 @@ class UnaryExpr(Expr):
|
|
|
2424
2435
|
res = self.operand.normalize(deep)
|
|
2425
2436
|
res = res and self.op.normalize(deep) if self.op else res
|
|
2426
2437
|
new_kid: list[AstNode] = [self.op, self.operand]
|
|
2427
|
-
AstNode.
|
|
2438
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2428
2439
|
return res
|
|
2429
2440
|
|
|
2430
2441
|
|
|
@@ -2458,7 +2469,7 @@ class IfElseExpr(Expr):
|
|
|
2458
2469
|
self.gen_token(Tok.KW_ELSE),
|
|
2459
2470
|
self.else_value,
|
|
2460
2471
|
]
|
|
2461
|
-
AstNode.
|
|
2472
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2462
2473
|
return res
|
|
2463
2474
|
|
|
2464
2475
|
|
|
@@ -2489,7 +2500,7 @@ class MultiString(AtomExpr):
|
|
|
2489
2500
|
new_kid: list[AstNode] = []
|
|
2490
2501
|
for string in self.strings:
|
|
2491
2502
|
new_kid.append(string)
|
|
2492
|
-
AstNode.
|
|
2503
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2493
2504
|
return res
|
|
2494
2505
|
|
|
2495
2506
|
|
|
@@ -2518,8 +2529,13 @@ class FString(AtomExpr):
|
|
|
2518
2529
|
res = self.parts.normalize(deep) if self.parts else res
|
|
2519
2530
|
new_kid: list[AstNode] = []
|
|
2520
2531
|
if self.parts:
|
|
2532
|
+
for i in self.parts.items:
|
|
2533
|
+
if isinstance(i, String):
|
|
2534
|
+
i.value = (
|
|
2535
|
+
"{{" if i.value == "{" else "}}" if i.value == "}" else i.value
|
|
2536
|
+
)
|
|
2521
2537
|
new_kid.append(self.parts)
|
|
2522
|
-
AstNode.
|
|
2538
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2523
2539
|
return res
|
|
2524
2540
|
|
|
2525
2541
|
|
|
@@ -2552,7 +2568,7 @@ class ListVal(AtomExpr):
|
|
|
2552
2568
|
if self.values:
|
|
2553
2569
|
new_kid.append(self.values)
|
|
2554
2570
|
new_kid.append(self.gen_token(Tok.RSQUARE))
|
|
2555
|
-
AstNode.
|
|
2571
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2556
2572
|
return res
|
|
2557
2573
|
|
|
2558
2574
|
|
|
@@ -2579,11 +2595,13 @@ class SetVal(AtomExpr):
|
|
|
2579
2595
|
res = True
|
|
2580
2596
|
if deep:
|
|
2581
2597
|
res = self.values.normalize(deep) if self.values else res
|
|
2582
|
-
new_kid: list[AstNode] = [
|
|
2598
|
+
new_kid: list[AstNode] = [
|
|
2599
|
+
self.gen_token(Tok.LBRACE),
|
|
2600
|
+
]
|
|
2583
2601
|
if self.values:
|
|
2584
2602
|
new_kid.append(self.values)
|
|
2585
|
-
|
|
2586
|
-
AstNode.
|
|
2603
|
+
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
2604
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2587
2605
|
return res
|
|
2588
2606
|
|
|
2589
2607
|
|
|
@@ -2610,15 +2628,28 @@ class TupleVal(AtomExpr):
|
|
|
2610
2628
|
res = True
|
|
2611
2629
|
if deep:
|
|
2612
2630
|
res = self.values.normalize(deep) if self.values else res
|
|
2613
|
-
|
|
2614
|
-
self.
|
|
2615
|
-
|
|
2631
|
+
in_ret_type = (
|
|
2632
|
+
self.parent
|
|
2633
|
+
and isinstance(self.parent, IndexSlice)
|
|
2634
|
+
and self.parent
|
|
2635
|
+
and isinstance(self.parent.parent, AtomTrailer)
|
|
2636
|
+
and self.parent.parent
|
|
2637
|
+
and isinstance(self.parent.parent.parent, FuncSignature)
|
|
2638
|
+
)
|
|
2639
|
+
new_kid: list[AstNode] = (
|
|
2640
|
+
[
|
|
2641
|
+
self.gen_token(Tok.LPAREN),
|
|
2642
|
+
]
|
|
2643
|
+
if not in_ret_type
|
|
2644
|
+
else []
|
|
2645
|
+
)
|
|
2616
2646
|
if self.values:
|
|
2617
2647
|
new_kid.append(self.values)
|
|
2618
2648
|
if len(self.values.items) < 2:
|
|
2619
2649
|
new_kid.append(self.gen_token(Tok.COMMA))
|
|
2620
|
-
|
|
2621
|
-
|
|
2650
|
+
if not in_ret_type:
|
|
2651
|
+
new_kid.append(self.gen_token(Tok.RPAREN))
|
|
2652
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2622
2653
|
return res
|
|
2623
2654
|
|
|
2624
2655
|
|
|
@@ -2654,7 +2685,7 @@ class DictVal(AtomExpr):
|
|
|
2654
2685
|
if i < len(self.kv_pairs) - 1:
|
|
2655
2686
|
new_kid.append(self.gen_token(Tok.COMMA))
|
|
2656
2687
|
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
2657
|
-
AstNode.
|
|
2688
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2658
2689
|
return res
|
|
2659
2690
|
|
|
2660
2691
|
|
|
@@ -2685,7 +2716,7 @@ class KVPair(AstNode):
|
|
|
2685
2716
|
else:
|
|
2686
2717
|
new_kid.append(self.gen_token(Tok.STAR_POW))
|
|
2687
2718
|
new_kid.append(self.value)
|
|
2688
|
-
AstNode.
|
|
2719
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2689
2720
|
return res
|
|
2690
2721
|
|
|
2691
2722
|
|
|
@@ -2714,7 +2745,7 @@ class KWPair(AstNode):
|
|
|
2714
2745
|
new_kid.append(self.key)
|
|
2715
2746
|
new_kid.append(self.gen_token(Tok.EQ))
|
|
2716
2747
|
new_kid.append(self.value)
|
|
2717
|
-
AstNode.
|
|
2748
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2718
2749
|
return res
|
|
2719
2750
|
|
|
2720
2751
|
|
|
@@ -2752,8 +2783,9 @@ class InnerCompr(AstAsyncNode):
|
|
|
2752
2783
|
new_kid.append(self.gen_token(Tok.KW_IN))
|
|
2753
2784
|
new_kid.append(self.collection)
|
|
2754
2785
|
for cond in self.conditional if self.conditional else []:
|
|
2786
|
+
new_kid.append(self.gen_token(Tok.KW_IF))
|
|
2755
2787
|
new_kid.append(cond)
|
|
2756
|
-
AstNode.
|
|
2788
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2757
2789
|
return res
|
|
2758
2790
|
|
|
2759
2791
|
|
|
@@ -2791,7 +2823,7 @@ class ListCompr(AtomExpr):
|
|
|
2791
2823
|
for comp in self.compr:
|
|
2792
2824
|
new_kid.append(comp)
|
|
2793
2825
|
new_kid.append(self.gen_token(Tok.RSQUARE))
|
|
2794
|
-
AstNode.
|
|
2826
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2795
2827
|
return res
|
|
2796
2828
|
|
|
2797
2829
|
|
|
@@ -2812,7 +2844,7 @@ class GenCompr(ListCompr):
|
|
|
2812
2844
|
for comp in self.compr:
|
|
2813
2845
|
new_kid.append(comp)
|
|
2814
2846
|
new_kid.append(self.gen_token(Tok.RPAREN))
|
|
2815
|
-
AstNode.
|
|
2847
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2816
2848
|
return res
|
|
2817
2849
|
|
|
2818
2850
|
|
|
@@ -2827,12 +2859,13 @@ class SetCompr(ListCompr):
|
|
|
2827
2859
|
for comp in self.compr:
|
|
2828
2860
|
res = res and comp.normalize(deep)
|
|
2829
2861
|
new_kid: list[AstNode] = [
|
|
2862
|
+
self.gen_token(Tok.LBRACE),
|
|
2830
2863
|
self.out_expr,
|
|
2831
2864
|
]
|
|
2832
2865
|
for comp in self.compr:
|
|
2833
2866
|
new_kid.append(comp)
|
|
2834
|
-
|
|
2835
|
-
AstNode.
|
|
2867
|
+
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
2868
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2836
2869
|
return res
|
|
2837
2870
|
|
|
2838
2871
|
|
|
@@ -2863,12 +2896,13 @@ class DictCompr(AtomExpr):
|
|
|
2863
2896
|
for comp in self.compr:
|
|
2864
2897
|
res = res and comp.normalize(deep)
|
|
2865
2898
|
new_kid: list[AstNode] = [
|
|
2899
|
+
self.gen_token(Tok.LBRACE),
|
|
2866
2900
|
self.kv_pair,
|
|
2867
2901
|
]
|
|
2868
2902
|
for comp in self.compr:
|
|
2869
2903
|
new_kid.append(comp)
|
|
2870
|
-
|
|
2871
|
-
AstNode.
|
|
2904
|
+
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
2905
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2872
2906
|
return res
|
|
2873
2907
|
|
|
2874
2908
|
|
|
@@ -2903,7 +2937,7 @@ class AtomTrailer(Expr):
|
|
|
2903
2937
|
new_kid.append(self.gen_token(Tok.DOT))
|
|
2904
2938
|
if self.right:
|
|
2905
2939
|
new_kid.append(self.right)
|
|
2906
|
-
AstNode.
|
|
2940
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2907
2941
|
return res
|
|
2908
2942
|
|
|
2909
2943
|
|
|
@@ -2928,7 +2962,7 @@ class AtomUnit(Expr):
|
|
|
2928
2962
|
new_kid.append(self.gen_token(Tok.LPAREN))
|
|
2929
2963
|
new_kid.append(self.value)
|
|
2930
2964
|
new_kid.append(self.gen_token(Tok.RPAREN))
|
|
2931
|
-
AstNode.
|
|
2965
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2932
2966
|
return res
|
|
2933
2967
|
|
|
2934
2968
|
|
|
@@ -2957,7 +2991,7 @@ class YieldExpr(Expr):
|
|
|
2957
2991
|
if self.expr:
|
|
2958
2992
|
new_kid.append(self.expr)
|
|
2959
2993
|
new_kid.append(self.gen_token(Tok.SEMI))
|
|
2960
|
-
AstNode.
|
|
2994
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
2961
2995
|
return res
|
|
2962
2996
|
|
|
2963
2997
|
|
|
@@ -3023,18 +3057,18 @@ class IndexSlice(AtomExpr):
|
|
|
3023
3057
|
if self.is_range:
|
|
3024
3058
|
if self.start:
|
|
3025
3059
|
new_kid.append(self.start)
|
|
3026
|
-
new_kid.append(self.gen_token(Tok.COLON))
|
|
3027
3060
|
if self.stop:
|
|
3061
|
+
new_kid.append(self.gen_token(Tok.COLON))
|
|
3028
3062
|
new_kid.append(self.stop)
|
|
3029
|
-
new_kid.append(self.gen_token(Tok.COLON))
|
|
3030
3063
|
if self.step:
|
|
3064
|
+
new_kid.append(self.gen_token(Tok.COLON))
|
|
3031
3065
|
new_kid.append(self.step)
|
|
3032
3066
|
elif self.start:
|
|
3033
3067
|
new_kid.append(self.start)
|
|
3034
3068
|
else:
|
|
3035
3069
|
res = False
|
|
3036
3070
|
new_kid.append(self.gen_token(Tok.RSQUARE))
|
|
3037
|
-
AstNode.
|
|
3071
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3038
3072
|
return res
|
|
3039
3073
|
|
|
3040
3074
|
|
|
@@ -3064,7 +3098,7 @@ class ArchRef(NameSpec):
|
|
|
3064
3098
|
if deep:
|
|
3065
3099
|
res = self.name_ref.normalize(deep)
|
|
3066
3100
|
new_kid: list[AstNode] = [self.arch, self.name_ref]
|
|
3067
|
-
AstNode.
|
|
3101
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3068
3102
|
return res
|
|
3069
3103
|
|
|
3070
3104
|
def py_resolve_name(self) -> str:
|
|
@@ -3101,7 +3135,7 @@ class SpecialVarRef(NameSpec):
|
|
|
3101
3135
|
if deep:
|
|
3102
3136
|
res = self.var.normalize(deep)
|
|
3103
3137
|
new_kid: list[AstNode] = [self.var]
|
|
3104
|
-
AstNode.
|
|
3138
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3105
3139
|
return res
|
|
3106
3140
|
|
|
3107
3141
|
def py_resolve_name(self) -> str:
|
|
@@ -3144,11 +3178,10 @@ class EdgeRefTrailer(Expr):
|
|
|
3144
3178
|
new_kid: list[AstNode] = []
|
|
3145
3179
|
if self.edges_only:
|
|
3146
3180
|
new_kid.append(self.gen_token(Tok.EDGE_OP))
|
|
3147
|
-
self.gen_token(Tok.LSQUARE)
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
AstNode.__init__(self, kid=new_kid)
|
|
3181
|
+
new_kid.append(self.gen_token(Tok.LSQUARE))
|
|
3182
|
+
new_kid.extend(self.chain)
|
|
3183
|
+
new_kid.append(self.gen_token(Tok.RSQUARE))
|
|
3184
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3152
3185
|
return res
|
|
3153
3186
|
|
|
3154
3187
|
|
|
@@ -3200,7 +3233,7 @@ class EdgeOpRef(WalkerStmtOnlyNode, AtomExpr):
|
|
|
3200
3233
|
new_kid.append(self.gen_token(Tok.ARROW_L_P1))
|
|
3201
3234
|
new_kid.append(self.filter_cond)
|
|
3202
3235
|
new_kid.append(self.gen_token(Tok.ARROW_R_P2))
|
|
3203
|
-
AstNode.
|
|
3236
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3204
3237
|
return res
|
|
3205
3238
|
|
|
3206
3239
|
|
|
@@ -3222,8 +3255,8 @@ class DisconnectOp(WalkerStmtOnlyNode):
|
|
|
3222
3255
|
res = True
|
|
3223
3256
|
if deep:
|
|
3224
3257
|
res = self.edge_spec.normalize(deep)
|
|
3225
|
-
new_kid: list[AstNode] = [self.gen_token(Tok.
|
|
3226
|
-
AstNode.
|
|
3258
|
+
new_kid: list[AstNode] = [self.gen_token(Tok.KW_DELETE), self.edge_spec]
|
|
3259
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3227
3260
|
return res
|
|
3228
3261
|
|
|
3229
3262
|
|
|
@@ -3283,7 +3316,7 @@ class ConnectOp(AstNode):
|
|
|
3283
3316
|
new_kid.append(self.gen_token(Tok.COLON))
|
|
3284
3317
|
new_kid.append(self.conn_assign)
|
|
3285
3318
|
new_kid.append(self.gen_token(Tok.CARROW_R_P2))
|
|
3286
|
-
AstNode.
|
|
3319
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3287
3320
|
return res
|
|
3288
3321
|
|
|
3289
3322
|
|
|
@@ -3314,17 +3347,20 @@ class FilterCompr(AtomExpr):
|
|
|
3314
3347
|
res = self.f_type.normalize(deep) if self.f_type else res
|
|
3315
3348
|
res = res and self.compares.normalize(deep) if self.compares else res
|
|
3316
3349
|
new_kid: list[AstNode] = []
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
|
|
3350
|
+
if not isinstance(self.parent, EdgeOpRef):
|
|
3351
|
+
new_kid.append(self.gen_token(Tok.LPAREN))
|
|
3352
|
+
if self.f_type:
|
|
3353
|
+
new_kid.append(self.gen_token(Tok.TYPE_OP))
|
|
3354
|
+
new_kid.append(self.gen_token(Tok.NULL_OK))
|
|
3321
3355
|
if self.f_type:
|
|
3322
3356
|
new_kid.append(self.f_type)
|
|
3323
|
-
new_kid.append(self.gen_token(Tok.COLON))
|
|
3324
3357
|
if self.compares:
|
|
3358
|
+
if self.f_type:
|
|
3359
|
+
new_kid.append(self.gen_token(Tok.COLON))
|
|
3325
3360
|
new_kid.append(self.compares)
|
|
3326
|
-
|
|
3327
|
-
|
|
3361
|
+
if not isinstance(self.parent, EdgeOpRef):
|
|
3362
|
+
new_kid.append(self.gen_token(Tok.RPAREN))
|
|
3363
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3328
3364
|
return res
|
|
3329
3365
|
|
|
3330
3366
|
|
|
@@ -3352,11 +3388,14 @@ class AssignCompr(AtomExpr):
|
|
|
3352
3388
|
if deep:
|
|
3353
3389
|
res = self.assigns.normalize(deep)
|
|
3354
3390
|
new_kid: list[AstNode] = []
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3391
|
+
if isinstance(self.parent, ConnectOp):
|
|
3392
|
+
new_kid.append(self.assigns)
|
|
3393
|
+
else:
|
|
3394
|
+
new_kid.append(self.gen_token(Tok.LPAREN))
|
|
3395
|
+
new_kid.append(self.gen_token(Tok.EQ))
|
|
3396
|
+
new_kid.append(self.assigns)
|
|
3397
|
+
new_kid.append(self.gen_token(Tok.RPAREN))
|
|
3398
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3360
3399
|
return res
|
|
3361
3400
|
|
|
3362
3401
|
|
|
@@ -3389,10 +3428,12 @@ class MatchStmt(CodeBlockStmt):
|
|
|
3389
3428
|
self.gen_token(Tok.KW_MATCH),
|
|
3390
3429
|
self.target,
|
|
3391
3430
|
]
|
|
3431
|
+
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
3392
3432
|
for case in self.cases:
|
|
3393
3433
|
new_kid.append(case)
|
|
3434
|
+
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
3394
3435
|
|
|
3395
|
-
AstNode.
|
|
3436
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3396
3437
|
return res
|
|
3397
3438
|
|
|
3398
3439
|
|
|
@@ -3427,7 +3468,7 @@ class MatchCase(AstNode):
|
|
|
3427
3468
|
new_kid.append(self.gen_token(Tok.COLON))
|
|
3428
3469
|
if self.body:
|
|
3429
3470
|
new_kid.extend([*self.body])
|
|
3430
|
-
AstNode.
|
|
3471
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3431
3472
|
return res
|
|
3432
3473
|
|
|
3433
3474
|
|
|
@@ -3454,7 +3495,7 @@ class MatchOr(MatchPattern):
|
|
|
3454
3495
|
new_kid.append(pattern)
|
|
3455
3496
|
new_kid.append(self.gen_token(Tok.KW_OR))
|
|
3456
3497
|
new_kid.pop()
|
|
3457
|
-
AstNode.
|
|
3498
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3458
3499
|
return res
|
|
3459
3500
|
|
|
3460
3501
|
|
|
@@ -3483,7 +3524,7 @@ class MatchAs(MatchPattern):
|
|
|
3483
3524
|
new_kid.append(self.pattern)
|
|
3484
3525
|
new_kid.append(self.gen_token(Tok.KW_AS))
|
|
3485
3526
|
new_kid.append(self.name)
|
|
3486
|
-
AstNode.
|
|
3527
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3487
3528
|
return res
|
|
3488
3529
|
|
|
3489
3530
|
|
|
@@ -3492,9 +3533,9 @@ class MatchWild(MatchPattern):
|
|
|
3492
3533
|
|
|
3493
3534
|
def normalize(self, deep: bool = False) -> bool:
|
|
3494
3535
|
"""Normalize match wild card node."""
|
|
3495
|
-
AstNode.
|
|
3536
|
+
AstNode.set_kids(
|
|
3496
3537
|
self,
|
|
3497
|
-
|
|
3538
|
+
nodes=[
|
|
3498
3539
|
Name(
|
|
3499
3540
|
file_path=self.loc.mod_path,
|
|
3500
3541
|
name=Tok.NAME,
|
|
@@ -3527,7 +3568,7 @@ class MatchValue(MatchPattern):
|
|
|
3527
3568
|
res = True
|
|
3528
3569
|
if deep:
|
|
3529
3570
|
res = self.value.normalize(deep)
|
|
3530
|
-
AstNode.
|
|
3571
|
+
AstNode.set_kids(self, nodes=[self.value])
|
|
3531
3572
|
return res
|
|
3532
3573
|
|
|
3533
3574
|
|
|
@@ -3546,7 +3587,7 @@ class MatchSingleton(MatchPattern):
|
|
|
3546
3587
|
def normalize(self, deep: bool = False) -> bool:
|
|
3547
3588
|
"""Normalize match singleton node."""
|
|
3548
3589
|
res = True
|
|
3549
|
-
AstNode.
|
|
3590
|
+
AstNode.set_kids(self, nodes=[self.value])
|
|
3550
3591
|
return res
|
|
3551
3592
|
|
|
3552
3593
|
|
|
@@ -3574,7 +3615,7 @@ class MatchSequence(MatchPattern):
|
|
|
3574
3615
|
new_kid.append(self.gen_token(Tok.COMMA))
|
|
3575
3616
|
new_kid.pop()
|
|
3576
3617
|
new_kid.append(self.gen_token(Tok.RSQUARE))
|
|
3577
|
-
AstNode.
|
|
3618
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3578
3619
|
return res
|
|
3579
3620
|
|
|
3580
3621
|
|
|
@@ -3602,7 +3643,7 @@ class MatchMapping(MatchPattern):
|
|
|
3602
3643
|
new_kid.append(self.gen_token(Tok.COMMA))
|
|
3603
3644
|
new_kid.pop()
|
|
3604
3645
|
new_kid.append(self.gen_token(Tok.RBRACE))
|
|
3605
|
-
AstNode.
|
|
3646
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3606
3647
|
return res
|
|
3607
3648
|
|
|
3608
3649
|
|
|
@@ -3628,8 +3669,9 @@ class MatchKVPair(MatchPattern):
|
|
|
3628
3669
|
self.key.normalize(deep) if isinstance(self.key, MatchPattern) else True
|
|
3629
3670
|
)
|
|
3630
3671
|
res = res and self.value.normalize(deep)
|
|
3631
|
-
|
|
3632
|
-
AstNode.
|
|
3672
|
+
op = Tok.EQ if isinstance(self.key, Name) else Tok.COLON
|
|
3673
|
+
new_kid: list[AstNode] = [self.key, self.gen_token(op), self.value]
|
|
3674
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3633
3675
|
return res
|
|
3634
3676
|
|
|
3635
3677
|
|
|
@@ -3656,7 +3698,7 @@ class MatchStar(MatchPattern):
|
|
|
3656
3698
|
self.gen_token(Tok.STAR_MUL if self.is_list else Tok.STAR_POW)
|
|
3657
3699
|
]
|
|
3658
3700
|
new_kid.append(self.name)
|
|
3659
|
-
AstNode.
|
|
3701
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3660
3702
|
return res
|
|
3661
3703
|
|
|
3662
3704
|
|
|
@@ -3693,7 +3735,7 @@ class MatchArch(MatchPattern):
|
|
|
3693
3735
|
else:
|
|
3694
3736
|
new_kid.pop()
|
|
3695
3737
|
new_kid.append(self.gen_token(Tok.RPAREN))
|
|
3696
|
-
AstNode.
|
|
3738
|
+
AstNode.set_kids(self, nodes=new_kid)
|
|
3697
3739
|
return res
|
|
3698
3740
|
|
|
3699
3741
|
|
|
@@ -3913,6 +3955,8 @@ class String(Literal):
|
|
|
3913
3955
|
@property
|
|
3914
3956
|
def lit_value(self) -> str:
|
|
3915
3957
|
"""Return literal value in its python type."""
|
|
3958
|
+
if isinstance(self.value, bytes):
|
|
3959
|
+
return self.value
|
|
3916
3960
|
prefix_len = 3 if self.value.startswith(("'''", '"""')) else 1
|
|
3917
3961
|
if any(
|
|
3918
3962
|
self.value.startswith(prefix)
|
|
@@ -3923,13 +3967,13 @@ class String(Literal):
|
|
|
3923
3967
|
|
|
3924
3968
|
elif self.value.startswith(("'", '"')):
|
|
3925
3969
|
ret_str = self.value[prefix_len:-prefix_len]
|
|
3970
|
+
return ret_str.encode().decode("unicode_escape", errors="backslashreplace")
|
|
3926
3971
|
else:
|
|
3927
|
-
|
|
3928
|
-
ret_str = ret_str.encode().decode("unicode_escape")
|
|
3929
|
-
return ret_str
|
|
3972
|
+
return self.value
|
|
3930
3973
|
|
|
3931
3974
|
def normalize(self, deep: bool = True) -> bool:
|
|
3932
3975
|
"""Normalize string."""
|
|
3976
|
+
self.value = r"%s" % self.value
|
|
3933
3977
|
return True
|
|
3934
3978
|
|
|
3935
3979
|
def unparse(self) -> str:
|