jaclang 0.7.33__py3-none-any.whl → 0.8.0__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 (1481) hide show
  1. jaclang/__init__.py +7 -414
  2. jaclang/cli/cli.md +5 -5
  3. jaclang/cli/cli.py +311 -214
  4. jaclang/cli/cmdreg.py +188 -31
  5. jaclang/compiler/__init__.py +10 -15
  6. jaclang/compiler/{codeloc.py → codeinfo.py} +11 -30
  7. jaclang/compiler/constant.py +10 -33
  8. jaclang/compiler/jac.lark +61 -92
  9. jaclang/compiler/larkparse/jac_parser.py +3444 -0
  10. jaclang/compiler/parser.py +1054 -1341
  11. jaclang/compiler/passes/__init__.py +2 -2
  12. jaclang/compiler/passes/main/__init__.py +33 -14
  13. jaclang/compiler/passes/main/annex_pass.py +85 -0
  14. jaclang/compiler/passes/main/cfg_build_pass.py +275 -0
  15. jaclang/compiler/passes/main/def_impl_match_pass.py +146 -102
  16. jaclang/compiler/passes/main/def_use_pass.py +64 -269
  17. jaclang/compiler/passes/main/import_pass.py +175 -360
  18. jaclang/compiler/passes/main/inheritance_pass.py +107 -105
  19. jaclang/compiler/passes/main/pyast_gen_pass.py +1129 -1600
  20. jaclang/compiler/passes/main/pyast_load_pass.py +540 -584
  21. jaclang/compiler/passes/main/pybc_gen_pass.py +38 -35
  22. jaclang/compiler/passes/main/pyjac_ast_link_pass.py +46 -160
  23. jaclang/compiler/passes/main/sym_tab_build_pass.py +113 -1202
  24. jaclang/compiler/passes/main/sym_tab_link_pass.py +141 -0
  25. jaclang/{tests → compiler/passes/main/tests}/fixtures/access_modifier.jac +10 -9
  26. jaclang/compiler/passes/main/tests/fixtures/atest.impl.jac +3 -0
  27. jaclang/compiler/passes/main/tests/fixtures/atest.jac +11 -0
  28. jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl/getme.impl.jac +1 -1
  29. jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl.jac +1 -1
  30. jaclang/compiler/passes/main/tests/fixtures/autoimpl.jac +3 -3
  31. jaclang/compiler/passes/main/tests/fixtures/autoimpl.something.else.impl.jac +1 -1
  32. jaclang/compiler/passes/main/tests/fixtures/base.impl.jac +8 -0
  33. jaclang/compiler/passes/main/tests/fixtures/base.jac +4 -4
  34. jaclang/compiler/passes/main/tests/fixtures/base2.impl.jac +8 -0
  35. jaclang/compiler/passes/main/tests/fixtures/base2.jac +4 -4
  36. jaclang/compiler/passes/main/tests/fixtures/blip.jac +1 -1
  37. jaclang/compiler/passes/main/tests/fixtures/cfg_ability_test.jac +23 -0
  38. jaclang/compiler/passes/main/tests/fixtures/cfg_gen.jac +19 -0
  39. jaclang/compiler/passes/main/tests/fixtures/circular_import.jac +7 -0
  40. jaclang/compiler/passes/main/tests/fixtures/data_spatial_types.jac +12 -12
  41. jaclang/compiler/passes/main/tests/fixtures/decls.jac +4 -4
  42. jaclang/compiler/passes/main/tests/fixtures/defn_decl_mismatch.jac +4 -4
  43. jaclang/compiler/passes/main/tests/fixtures/defs_and_uses.jac +6 -6
  44. jaclang/compiler/passes/main/tests/fixtures/enumerations.jac +13 -0
  45. jaclang/compiler/passes/main/tests/fixtures/fstrings.jac +1 -1
  46. jaclang/compiler/passes/main/tests/fixtures/func.jac +2 -2
  47. jaclang/compiler/passes/main/tests/fixtures/func2.jac +1 -1
  48. jaclang/compiler/passes/main/tests/fixtures/game1.jac +4 -4
  49. jaclang/compiler/passes/main/tests/fixtures/impl/defs1.jac +2 -2
  50. jaclang/compiler/passes/main/tests/fixtures/impl/defs2.jac +2 -2
  51. jaclang/compiler/passes/main/tests/fixtures/impl/imps.jac +0 -8
  52. jaclang/compiler/passes/main/tests/fixtures/impl_grab.impl.jac +5 -0
  53. jaclang/{tests → compiler/passes/main/tests}/fixtures/impl_grab.jac +1 -1
  54. jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac +1 -1
  55. jaclang/compiler/passes/main/tests/fixtures/main_err.impl.jac +6 -0
  56. jaclang/compiler/passes/main/tests/fixtures/main_err.jac +6 -0
  57. jaclang/compiler/passes/main/tests/fixtures/mod_type_assign.jac +1 -1
  58. jaclang/compiler/passes/main/tests/fixtures/mtest.impl.jac +6 -0
  59. jaclang/{tests → compiler/passes/main/tests}/fixtures/mtest.jac +1 -1
  60. jaclang/{tests → compiler/passes/main/tests}/fixtures/nested_impls.jac +14 -15
  61. jaclang/compiler/passes/main/tests/fixtures/py_imp_test.jac +7 -7
  62. jaclang/compiler/passes/main/tests/fixtures/second_err.jac +4 -0
  63. jaclang/compiler/passes/main/tests/fixtures/str2doc.py +3 -0
  64. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/__init__.py +5 -0
  65. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/actions.jac +23 -0
  66. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/main.jac +14 -0
  67. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/no_dupls.jac +35 -0
  68. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/one.jac +8 -0
  69. jaclang/compiler/passes/main/tests/fixtures/type_info.jac +4 -4
  70. jaclang/compiler/passes/main/tests/test_cfg_build_pass.py +99 -0
  71. jaclang/compiler/passes/main/tests/test_decl_impl_match_pass.py +157 -0
  72. jaclang/compiler/passes/main/tests/test_def_use_pass.py +4 -6
  73. jaclang/compiler/passes/main/tests/test_import_pass.py +59 -46
  74. jaclang/compiler/passes/main/tests/test_pyast_build_pass.py +15 -0
  75. jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py +25 -34
  76. jaclang/compiler/passes/main/tests/test_pybc_gen_pass.py +3 -3
  77. jaclang/compiler/passes/main/tests/test_sub_node_pass.py +8 -7
  78. jaclang/compiler/passes/main/tests/test_sym_tab_build_pass.py +4 -4
  79. jaclang/compiler/passes/main/tests/test_sym_tab_link_pass.py +62 -0
  80. jaclang/compiler/passes/tool/__init__.py +2 -0
  81. jaclang/compiler/passes/tool/doc_ir.py +179 -0
  82. jaclang/compiler/passes/tool/doc_ir_gen_pass.py +1210 -0
  83. jaclang/compiler/passes/tool/fuse_comments_pass.py +90 -70
  84. jaclang/compiler/passes/tool/jac_formatter_pass.py +122 -2554
  85. jaclang/compiler/passes/tool/tests/fixtures/corelib.jac +249 -97
  86. jaclang/compiler/passes/tool/tests/fixtures/corelib_fmt.jac +94 -97
  87. jaclang/compiler/passes/tool/tests/fixtures/doc_string.jac +2 -2
  88. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/access_mod_check.jac +5 -5
  89. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/archetype_test.jac +13 -0
  90. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/decorator_stack.jac +7 -7
  91. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/line_spacing.jac +8 -8
  92. jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.dot +3 -3
  93. jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.txt +3 -3
  94. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/ability_impl_long_comprehension.jac +1 -1
  95. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/call_with_many_parameters.jac +2 -2
  96. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/simple_walker.jac +3 -3
  97. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/try_block_and_walker_spawn_and_fstrings.jac +1 -1
  98. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/type_annotation.jac +1 -1
  99. jaclang/compiler/passes/tool/tests/fixtures/simple_walk.jac +1 -1
  100. jaclang/compiler/passes/tool/tests/fixtures/simple_walk_fmt.jac +10 -4
  101. jaclang/compiler/passes/tool/tests/test_doc_ir_gen_pass.py +29 -0
  102. jaclang/compiler/passes/tool/tests/test_jac_format_pass.py +63 -88
  103. jaclang/compiler/passes/tool/tests/test_unparse_validate.py +27 -28
  104. jaclang/compiler/passes/transform.py +56 -16
  105. jaclang/compiler/passes/{ir_pass.py → uni_pass.py} +35 -52
  106. jaclang/compiler/program.py +205 -0
  107. jaclang/compiler/tests/fixtures/codegentext.jac +31 -0
  108. jaclang/compiler/tests/fixtures/fam.jac +10 -10
  109. jaclang/compiler/tests/fixtures/hello_world.jac +1 -1
  110. jaclang/compiler/tests/fixtures/staticcheck.jac +2 -2
  111. jaclang/compiler/tests/test_importer.py +21 -16
  112. jaclang/compiler/tests/test_parser.py +38 -17
  113. jaclang/compiler/{absyntree.py → unitree.py} +1120 -1012
  114. jaclang/langserve/engine.py +183 -171
  115. jaclang/langserve/sem_manager.py +26 -22
  116. jaclang/langserve/server.py +6 -15
  117. jaclang/langserve/tests/fixtures/base_module_structure.jac +7 -7
  118. jaclang/langserve/tests/fixtures/circle.jac +6 -6
  119. jaclang/langserve/tests/fixtures/circle_err.jac +6 -6
  120. jaclang/langserve/tests/fixtures/circle_pure.impl.jac +5 -5
  121. jaclang/langserve/tests/fixtures/circle_pure.jac +7 -7
  122. jaclang/langserve/tests/fixtures/circle_pure_err.impl.jac +2 -2
  123. jaclang/langserve/tests/fixtures/circle_pure_err.jac +7 -7
  124. jaclang/langserve/tests/fixtures/import_include_statements.jac +6 -6
  125. jaclang/langserve/tests/fixtures/rename.jac +6 -6
  126. jaclang/langserve/tests/server_test/test_lang_serve.py +262 -0
  127. jaclang/langserve/tests/server_test/utils.py +115 -0
  128. jaclang/langserve/tests/test_sem_tokens.py +2 -2
  129. jaclang/langserve/tests/test_server.py +41 -23
  130. jaclang/langserve/utils.jac +438 -0
  131. jaclang/runtimelib/{architype.py → archetype.py} +85 -61
  132. jaclang/runtimelib/builtin.py +92 -0
  133. jaclang/runtimelib/constructs.py +11 -13
  134. jaclang/runtimelib/importer.py +63 -51
  135. jaclang/runtimelib/machine.py +1551 -144
  136. jaclang/runtimelib/memory.py +6 -6
  137. jaclang/{plugin → runtimelib}/tests/fixtures/graph_purger.jac +1 -1
  138. jaclang/{plugin → runtimelib}/tests/fixtures/impl_match.jac +2 -2
  139. jaclang/runtimelib/tests/fixtures/impl_match_impl.jac +3 -0
  140. jaclang/{plugin → runtimelib}/tests/fixtures/other_root_access.jac +7 -7
  141. jaclang/{plugin → runtimelib}/tests/fixtures/savable_object.jac +3 -5
  142. jaclang/{plugin → runtimelib}/tests/fixtures/simple_node_connection.jac +6 -6
  143. jaclang/{plugin → runtimelib}/tests/fixtures/simple_persistent.jac +1 -1
  144. jaclang/runtimelib/tests/test_features.py +72 -0
  145. jaclang/{plugin → runtimelib}/tests/test_jaseci.py +6 -5
  146. jaclang/runtimelib/utils.py +31 -63
  147. jaclang/settings.py +1 -6
  148. jaclang/tests/fixtures/{abc.jac → abc_check.jac} +6 -6
  149. jaclang/tests/fixtures/arch_rel_import_creation.jac +4 -4
  150. jaclang/tests/fixtures/async_ability.jac +18 -0
  151. jaclang/tests/fixtures/async_walker.jac +23 -0
  152. jaclang/tests/fixtures/baddy.jac +1 -1
  153. jaclang/tests/fixtures/base_class1.jac +2 -2
  154. jaclang/tests/fixtures/base_class2.jac +2 -2
  155. jaclang/tests/fixtures/base_class_complex_expr.jac +3 -3
  156. jaclang/tests/fixtures/builtin_dotgen.jac +1 -1
  157. jaclang/tests/fixtures/builtin_dotgen_json.jac +21 -0
  158. jaclang/tests/fixtures/byllmissue.jac +1 -1
  159. jaclang/tests/fixtures/chandra_bugs.jac +1 -1
  160. jaclang/tests/fixtures/chandra_bugs2.jac +1 -1
  161. jaclang/tests/fixtures/cls_method.jac +6 -6
  162. jaclang/tests/fixtures/concurrency.jac +39 -0
  163. jaclang/tests/fixtures/connect_traverse_syntax.jac +18 -0
  164. jaclang/tests/fixtures/create_dynamic_archetype.jac +35 -0
  165. jaclang/tests/fixtures/decl_defn_param_name.jac +4 -4
  166. jaclang/tests/fixtures/deep/deeper/__init__.jac +1 -0
  167. jaclang/tests/fixtures/deep/deeper/deep_outer_import.jac +2 -3
  168. jaclang/tests/fixtures/deep/deeper/deep_outer_import2.jac +3 -3
  169. jaclang/tests/fixtures/deep/deeper/snd_lev.jac +2 -2
  170. jaclang/tests/fixtures/deep/mycode.jac +1 -1
  171. jaclang/tests/fixtures/deep/one_lev.jac +3 -4
  172. jaclang/tests/fixtures/deep/one_lev_dup.jac +2 -2
  173. jaclang/tests/fixtures/deep_convert.jac +1 -1
  174. jaclang/tests/fixtures/deep_import.jac +2 -2
  175. jaclang/tests/fixtures/deep_import_interp.jac +8 -0
  176. jaclang/tests/fixtures/deep_import_mods.jac +3 -3
  177. jaclang/tests/fixtures/deferred_field.jac +1 -1
  178. jaclang/tests/fixtures/del_clean.jac +7 -0
  179. jaclang/tests/fixtures/disconn.jac +3 -3
  180. jaclang/tests/fixtures/dynamic_archetype.jac +34 -0
  181. jaclang/tests/fixtures/edge_node_walk.jac +12 -12
  182. jaclang/tests/fixtures/edge_ops.jac +7 -7
  183. jaclang/tests/fixtures/edges_walk.jac +10 -10
  184. jaclang/tests/fixtures/edgetypeissue.jac +1 -1
  185. jaclang/tests/fixtures/enum_inside_archtype.jac +4 -4
  186. jaclang/tests/fixtures/err.impl.jac +1 -1
  187. jaclang/tests/fixtures/err.jac +2 -2
  188. jaclang/tests/fixtures/err_runtime.jac +2 -2
  189. jaclang/tests/fixtures/foo.jac +7 -7
  190. jaclang/tests/fixtures/game1.jac +4 -4
  191. jaclang/tests/fixtures/gendot_bubble_sort.jac +4 -4
  192. jaclang/tests/fixtures/glob_multivar_statement.jac +1 -1
  193. jaclang/tests/fixtures/guess_game.jac +5 -5
  194. jaclang/tests/fixtures/has_goodness.jac +1 -1
  195. jaclang/tests/fixtures/hash_init_check.jac +3 -3
  196. jaclang/tests/fixtures/hello.jac +1 -1
  197. jaclang/tests/fixtures/ignore.jac +3 -3
  198. jaclang/tests/fixtures/ignore_dup.jac +3 -3
  199. jaclang/tests/fixtures/impl_match_confused.impl.jac +1 -1
  200. jaclang/tests/fixtures/import.jac +9 -9
  201. jaclang/tests/fixtures/import_all.jac +1 -1
  202. jaclang/tests/fixtures/index_slice.jac +1 -1
  203. jaclang/tests/fixtures/inherit_check.jac +3 -3
  204. jaclang/tests/fixtures/jac_from_py.py +4 -0
  205. jaclang/tests/fixtures/jacsamp.jac +1 -1
  206. jaclang/tests/fixtures/jactest_main.jac +1 -1
  207. jaclang/tests/fixtures/jp_importer.jac +7 -8
  208. jaclang/tests/fixtures/jp_importer_auto.jac +3 -3
  209. jaclang/tests/fixtures/lambda.jac +2 -2
  210. jaclang/tests/fixtures/needs_import.jac +6 -6
  211. jaclang/tests/fixtures/needs_import_1.jac +1 -1
  212. jaclang/tests/fixtures/needs_import_2.jac +1 -1
  213. jaclang/tests/fixtures/needs_import_3.jac +1 -1
  214. jaclang/tests/fixtures/needs_import_dup.jac +6 -6
  215. jaclang/tests/fixtures/node_del.jac +60 -0
  216. jaclang/tests/fixtures/nosigself.jac +3 -3
  217. jaclang/tests/fixtures/py2jac.py +30 -0
  218. jaclang/tests/fixtures/py_bool_expr.py +7 -0
  219. jaclang/tests/fixtures/py_namedexpr.py +7 -0
  220. jaclang/tests/fixtures/pyfunc_3.py +0 -2
  221. jaclang/tests/fixtures/random_check.jac +5 -5
  222. jaclang/tests/fixtures/refs_target.jac +17 -0
  223. jaclang/tests/fixtures/simple_archs.jac +2 -2
  224. jaclang/tests/fixtures/simple_walk.jac +52 -0
  225. jaclang/tests/fixtures/slice_vals.jac +3 -3
  226. jaclang/tests/fixtures/sub_abil_sep.jac +3 -3
  227. jaclang/tests/fixtures/sub_abil_sep_multilev.jac +3 -3
  228. jaclang/tests/fixtures/trailing_comma.jac +4 -4
  229. jaclang/tests/fixtures/type_info.jac +5 -5
  230. jaclang/{compiler/passes/main/tests → tests}/fixtures/uninitialized_hasvars.jac +1 -1
  231. jaclang/tests/fixtures/visit_order.jac +4 -4
  232. jaclang/tests/fixtures/walker_override.jac +2 -2
  233. jaclang/tests/fixtures/walker_update.jac +5 -5
  234. jaclang/tests/fixtures/with_context.jac +4 -4
  235. jaclang/tests/test_bugs.py +2 -2
  236. jaclang/tests/test_cli.py +118 -223
  237. jaclang/tests/test_language.py +474 -468
  238. jaclang/tests/test_man_code.py +2 -2
  239. jaclang/tests/test_reference.py +4 -4
  240. jaclang/tests/test_settings.py +16 -16
  241. jaclang/tests/test_typecheck.py +555 -0
  242. jaclang/utils/__init__.py +4 -0
  243. jaclang/utils/helpers.py +12 -27
  244. jaclang/utils/lang_tools.py +84 -74
  245. jaclang/utils/module_resolver.py +69 -0
  246. jaclang/utils/test.py +8 -5
  247. jaclang/utils/tests/test_lang_tools.py +38 -13
  248. jaclang/utils/treeprinter.py +177 -40
  249. jaclang/vendor/__init__.py +1 -2
  250. jaclang/vendor/attr/__init__.py +14 -44
  251. jaclang/vendor/attr/__init__.pyi +155 -321
  252. jaclang/vendor/attr/_cmp.py +25 -15
  253. jaclang/vendor/attr/_cmp.pyi +7 -7
  254. jaclang/vendor/attr/_compat.py +15 -8
  255. jaclang/vendor/attr/_config.py +1 -1
  256. jaclang/vendor/attr/_funcs.py +148 -163
  257. jaclang/vendor/attr/_make.py +859 -855
  258. jaclang/vendor/attr/_next_gen.py +426 -32
  259. jaclang/vendor/attr/converters.py +67 -49
  260. jaclang/vendor/attr/converters.pyi +13 -7
  261. jaclang/vendor/attr/filters.py +17 -11
  262. jaclang/vendor/attr/filters.pyi +3 -3
  263. jaclang/vendor/attr/setters.py +11 -5
  264. jaclang/vendor/attr/setters.pyi +2 -1
  265. jaclang/vendor/attr/validators.py +191 -162
  266. jaclang/vendor/attr/validators.pyi +25 -27
  267. jaclang/vendor/attrs/__init__.py +9 -5
  268. jaclang/vendor/attrs/__init__.pyi +225 -29
  269. jaclang/vendor/attrs-25.3.0.dist-info/INSTALLER +1 -0
  270. jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/METADATA +83 -53
  271. jaclang/vendor/attrs-25.3.0.dist-info/RECORD +56 -0
  272. jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/WHEEL +1 -1
  273. jaclang/vendor/bin/dmypy +8 -0
  274. jaclang/vendor/bin/mypy +8 -0
  275. jaclang/vendor/bin/mypyc +8 -0
  276. jaclang/vendor/bin/stubgen +8 -0
  277. jaclang/vendor/bin/stubtest +8 -0
  278. jaclang/vendor/cattr/gen.py +2 -2
  279. jaclang/vendor/cattr/preconf/bson.py +1 -0
  280. jaclang/vendor/cattr/preconf/json.py +1 -0
  281. jaclang/vendor/cattr/preconf/msgpack.py +1 -0
  282. jaclang/vendor/cattr/preconf/orjson.py +1 -0
  283. jaclang/vendor/cattr/preconf/pyyaml.py +1 -0
  284. jaclang/vendor/cattr/preconf/tomlkit.py +1 -0
  285. jaclang/vendor/cattr/preconf/ujson.py +1 -0
  286. jaclang/vendor/cattrs/__init__.py +21 -21
  287. jaclang/vendor/cattrs/_compat.py +176 -62
  288. jaclang/vendor/cattrs/_generics.py +5 -3
  289. jaclang/vendor/cattrs/cols.py +289 -0
  290. jaclang/vendor/cattrs/converters.py +505 -187
  291. jaclang/vendor/cattrs/disambiguators.py +118 -45
  292. jaclang/vendor/cattrs/dispatch.py +66 -36
  293. jaclang/vendor/cattrs/fns.py +6 -1
  294. jaclang/vendor/cattrs/gen/__init__.py +365 -202
  295. jaclang/vendor/cattrs/gen/_generics.py +41 -5
  296. jaclang/vendor/cattrs/gen/_lc.py +3 -2
  297. jaclang/vendor/cattrs/gen/_shared.py +39 -32
  298. jaclang/vendor/cattrs/gen/typeddicts.py +75 -88
  299. jaclang/vendor/cattrs/preconf/__init__.py +20 -0
  300. jaclang/vendor/cattrs/preconf/bson.py +7 -8
  301. jaclang/vendor/cattrs/preconf/cbor2.py +3 -0
  302. jaclang/vendor/cattrs/preconf/json.py +8 -4
  303. jaclang/vendor/cattrs/preconf/msgpack.py +3 -0
  304. jaclang/vendor/cattrs/preconf/msgspec.py +185 -0
  305. jaclang/vendor/cattrs/preconf/orjson.py +20 -7
  306. jaclang/vendor/cattrs/preconf/pyyaml.py +15 -3
  307. jaclang/vendor/cattrs/preconf/tomlkit.py +3 -1
  308. jaclang/vendor/cattrs/preconf/ujson.py +3 -0
  309. jaclang/vendor/cattrs/strategies/__init__.py +1 -0
  310. jaclang/vendor/cattrs/strategies/_class_methods.py +1 -1
  311. jaclang/vendor/cattrs/strategies/_subclasses.py +43 -29
  312. jaclang/vendor/cattrs/strategies/_unions.py +47 -24
  313. jaclang/vendor/cattrs/v.py +1 -0
  314. jaclang/vendor/cattrs-24.1.3.dist-info/INSTALLER +1 -0
  315. jaclang/vendor/cattrs-24.1.3.dist-info/METADATA +161 -0
  316. jaclang/vendor/cattrs-24.1.3.dist-info/RECORD +96 -0
  317. jaclang/vendor/{cattrs-23.2.3.dist-info → cattrs-24.1.3.dist-info}/WHEEL +1 -1
  318. jaclang/vendor/lark/__init__.py +38 -38
  319. jaclang/vendor/lark/__pyinstaller/__init__.py +6 -6
  320. jaclang/vendor/lark/__pyinstaller/hook-lark.py +14 -14
  321. jaclang/vendor/lark/ast_utils.py +59 -59
  322. jaclang/vendor/lark/common.py +86 -89
  323. jaclang/vendor/lark/exceptions.py +292 -292
  324. jaclang/vendor/lark/grammar.py +130 -130
  325. jaclang/vendor/lark/grammars/common.lark +59 -59
  326. jaclang/vendor/lark/grammars/lark.lark +62 -62
  327. jaclang/vendor/lark/grammars/python.lark +302 -302
  328. jaclang/vendor/lark/grammars/unicode.lark +7 -7
  329. jaclang/vendor/lark/indenter.py +143 -112
  330. jaclang/vendor/lark/lark.py +658 -661
  331. jaclang/vendor/lark/lexer.py +678 -678
  332. jaclang/vendor/lark/load_grammar.py +1428 -1428
  333. jaclang/vendor/lark/parse_tree_builder.py +391 -391
  334. jaclang/vendor/lark/parser_frontends.py +257 -257
  335. jaclang/vendor/lark/parsers/cyk.py +340 -340
  336. jaclang/vendor/lark/parsers/earley.py +317 -308
  337. jaclang/vendor/lark/parsers/earley_common.py +42 -42
  338. jaclang/vendor/lark/parsers/earley_forest.py +802 -810
  339. jaclang/vendor/lark/parsers/grammar_analysis.py +203 -203
  340. jaclang/vendor/lark/parsers/lalr_analysis.py +332 -332
  341. jaclang/vendor/lark/parsers/lalr_interactive_parser.py +158 -157
  342. jaclang/vendor/lark/parsers/lalr_parser.py +122 -122
  343. jaclang/vendor/lark/parsers/lalr_parser_state.py +110 -110
  344. jaclang/vendor/lark/parsers/xearley.py +165 -165
  345. jaclang/vendor/lark/reconstruct.py +107 -107
  346. jaclang/vendor/lark/tools/__init__.py +70 -71
  347. jaclang/vendor/lark/tools/nearley.py +202 -202
  348. jaclang/vendor/lark/tools/serialize.py +32 -32
  349. jaclang/vendor/lark/tools/standalone.py +196 -196
  350. jaclang/vendor/lark/tree.py +267 -272
  351. jaclang/vendor/lark/tree_matcher.py +186 -186
  352. jaclang/vendor/lark/utils.py +346 -361
  353. jaclang/vendor/lark/visitors.py +596 -593
  354. jaclang/vendor/lark-1.2.2.dist-info/INSTALLER +1 -0
  355. jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/METADATA +48 -47
  356. jaclang/vendor/lark-1.2.2.dist-info/RECORD +83 -0
  357. jaclang/vendor/{mypy_extensions-1.0.0.dist-info → lark-1.2.2.dist-info}/WHEEL +1 -1
  358. jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info/licenses}/LICENSE +18 -18
  359. jaclang/vendor/lsprotocol-2023.0.1.dist-info/INSTALLER +1 -0
  360. jaclang/vendor/lsprotocol-2023.0.1.dist-info/METADATA +2 -1
  361. jaclang/vendor/lsprotocol-2023.0.1.dist-info/RECORD +17 -10
  362. jaclang/vendor/lsprotocol-2023.0.1.dist-info/WHEEL +1 -1
  363. jaclang/vendor/pluggy/_version.py +7 -2
  364. jaclang/vendor/pluggy-1.5.0.dist-info/INSTALLER +1 -0
  365. jaclang/vendor/pluggy-1.5.0.dist-info/METADATA +6 -5
  366. jaclang/vendor/pluggy-1.5.0.dist-info/RECORD +24 -14
  367. jaclang/vendor/pluggy-1.5.0.dist-info/WHEEL +1 -1
  368. jaclang/vendor/pygls-1.3.1.dist-info/INSTALLER +1 -0
  369. jaclang/vendor/pygls-1.3.1.dist-info/METADATA +2 -2
  370. jaclang/vendor/pygls-1.3.1.dist-info/RECORD +45 -24
  371. jaclang/vendor/pygls-1.3.1.dist-info/WHEEL +1 -1
  372. {jaclang-0.7.33.dist-info → jaclang-0.8.0.dist-info}/METADATA +4 -4
  373. jaclang-0.8.0.dist-info/RECORD +552 -0
  374. {jaclang-0.7.33.dist-info → jaclang-0.8.0.dist-info}/WHEEL +1 -1
  375. jaclang/compiler/.gitignore +0 -1
  376. jaclang/compiler/compile.py +0 -119
  377. jaclang/compiler/passes/main/access_modifier_pass.py +0 -130
  378. jaclang/compiler/passes/main/fuse_typeinfo_pass.py +0 -656
  379. jaclang/compiler/passes/main/py_collect_dep_pass.py +0 -78
  380. jaclang/compiler/passes/main/pyout_pass.py +0 -86
  381. jaclang/compiler/passes/main/registry_pass.py +0 -156
  382. jaclang/compiler/passes/main/schedules.py +0 -47
  383. jaclang/compiler/passes/main/sub_node_tab_pass.py +0 -36
  384. jaclang/compiler/passes/main/tests/fixtures/registry.jac +0 -36
  385. jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py +0 -114
  386. jaclang/compiler/passes/main/tests/test_registry_pass.py +0 -31
  387. jaclang/compiler/passes/main/tests/test_type_check_pass.py +0 -91
  388. jaclang/compiler/passes/main/tests/test_typeinfo_pass.py +0 -29
  389. jaclang/compiler/passes/main/type_check_pass.py +0 -128
  390. jaclang/compiler/passes/tool/schedules.py +0 -18
  391. jaclang/compiler/passes/tool/tests/fixtures/genai/essay_review.jac +0 -36
  392. jaclang/compiler/passes/tool/tests/fixtures/genai/expert_answer.jac +0 -17
  393. jaclang/compiler/passes/tool/tests/fixtures/genai/joke_gen.jac +0 -32
  394. jaclang/compiler/passes/tool/tests/fixtures/genai/odd_word_out.jac +0 -27
  395. jaclang/compiler/passes/tool/tests/fixtures/genai/personality_finder.jac +0 -35
  396. jaclang/compiler/passes/tool/tests/fixtures/genai/text_to_type.jac +0 -25
  397. jaclang/compiler/passes/tool/tests/fixtures/genai/translator.jac +0 -13
  398. jaclang/compiler/passes/tool/tests/fixtures/genai/wikipedia.jac +0 -63
  399. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/architype_test.jac +0 -13
  400. jaclang/compiler/passes/utils/mypy_ast_build.py +0 -940
  401. jaclang/compiler/py_info.py +0 -22
  402. jaclang/compiler/semtable.py +0 -159
  403. jaclang/compiler/symtable.py +0 -297
  404. jaclang/langserve/utils.py +0 -458
  405. jaclang/plugin/__init__.py +0 -7
  406. jaclang/plugin/builtin.py +0 -57
  407. jaclang/plugin/default.py +0 -1443
  408. jaclang/plugin/feature.py +0 -574
  409. jaclang/plugin/plugin.md +0 -471
  410. jaclang/plugin/spec.py +0 -536
  411. jaclang/plugin/tests/fixtures/impl_match_impl.jac +0 -3
  412. jaclang/plugin/tests/test_features.py +0 -56
  413. jaclang/runtimelib/context.py +0 -191
  414. jaclang/tests/fixtures/create_dynamic_architype.jac +0 -35
  415. jaclang/tests/fixtures/dynamic_architype.jac +0 -34
  416. jaclang/tests/fixtures/impl_grab.impl.jac +0 -5
  417. jaclang/tests/fixtures/mtest.impl.jac +0 -6
  418. jaclang/tests/fixtures/registry.jac +0 -58
  419. jaclang/tests/fixtures/semstr.jac +0 -30
  420. jaclang/tests/main.jac +0 -2
  421. jaclang/utils/profiler.py +0 -62
  422. jaclang/vendor/attrs-23.2.0.dist-info/RECORD +0 -35
  423. jaclang/vendor/cattrs-23.2.3.dist-info/METADATA +0 -221
  424. jaclang/vendor/cattrs-23.2.3.dist-info/RECORD +0 -48
  425. jaclang/vendor/lark-1.1.9.dist-info/RECORD +0 -46
  426. jaclang/vendor/lark-1.1.9.dist-info/WHEEL +0 -5
  427. jaclang/vendor/mypy/__init__.py +0 -1
  428. jaclang/vendor/mypy/__main__.py +0 -37
  429. jaclang/vendor/mypy/api.py +0 -94
  430. jaclang/vendor/mypy/applytype.py +0 -172
  431. jaclang/vendor/mypy/argmap.py +0 -268
  432. jaclang/vendor/mypy/binder.py +0 -538
  433. jaclang/vendor/mypy/bogus_type.py +0 -27
  434. jaclang/vendor/mypy/build.py +0 -3562
  435. jaclang/vendor/mypy/checker.py +0 -8445
  436. jaclang/vendor/mypy/checkexpr.py +0 -6623
  437. jaclang/vendor/mypy/checkmember.py +0 -1363
  438. jaclang/vendor/mypy/checkpattern.py +0 -801
  439. jaclang/vendor/mypy/checkstrformat.py +0 -1109
  440. jaclang/vendor/mypy/config_parser.py +0 -670
  441. jaclang/vendor/mypy/constant_fold.py +0 -187
  442. jaclang/vendor/mypy/constraints.py +0 -1636
  443. jaclang/vendor/mypy/copytype.py +0 -133
  444. jaclang/vendor/mypy/defaults.py +0 -46
  445. jaclang/vendor/mypy/dmypy/__main__.py +0 -6
  446. jaclang/vendor/mypy/dmypy/client.py +0 -749
  447. jaclang/vendor/mypy/dmypy_os.py +0 -42
  448. jaclang/vendor/mypy/dmypy_server.py +0 -1107
  449. jaclang/vendor/mypy/dmypy_util.py +0 -117
  450. jaclang/vendor/mypy/erasetype.py +0 -278
  451. jaclang/vendor/mypy/errorcodes.py +0 -291
  452. jaclang/vendor/mypy/errors.py +0 -1280
  453. jaclang/vendor/mypy/evalexpr.py +0 -205
  454. jaclang/vendor/mypy/expandtype.py +0 -524
  455. jaclang/vendor/mypy/exprtotype.py +0 -209
  456. jaclang/vendor/mypy/fastparse.py +0 -2147
  457. jaclang/vendor/mypy/find_sources.py +0 -243
  458. jaclang/vendor/mypy/fixup.py +0 -428
  459. jaclang/vendor/mypy/freetree.py +0 -23
  460. jaclang/vendor/mypy/fscache.py +0 -309
  461. jaclang/vendor/mypy/fswatcher.py +0 -106
  462. jaclang/vendor/mypy/gclogger.py +0 -47
  463. jaclang/vendor/mypy/git.py +0 -34
  464. jaclang/vendor/mypy/graph_utils.py +0 -112
  465. jaclang/vendor/mypy/indirection.py +0 -121
  466. jaclang/vendor/mypy/infer.py +0 -75
  467. jaclang/vendor/mypy/inspections.py +0 -627
  468. jaclang/vendor/mypy/ipc.py +0 -310
  469. jaclang/vendor/mypy/join.py +0 -871
  470. jaclang/vendor/mypy/literals.py +0 -306
  471. jaclang/vendor/mypy/lookup.py +0 -61
  472. jaclang/vendor/mypy/main.py +0 -1574
  473. jaclang/vendor/mypy/maptype.py +0 -106
  474. jaclang/vendor/mypy/meet.py +0 -1140
  475. jaclang/vendor/mypy/memprofile.py +0 -121
  476. jaclang/vendor/mypy/message_registry.py +0 -329
  477. jaclang/vendor/mypy/messages.py +0 -3186
  478. jaclang/vendor/mypy/metastore.py +0 -225
  479. jaclang/vendor/mypy/mixedtraverser.py +0 -112
  480. jaclang/vendor/mypy/modulefinder.py +0 -875
  481. jaclang/vendor/mypy/moduleinspect.py +0 -184
  482. jaclang/vendor/mypy/mro.py +0 -62
  483. jaclang/vendor/mypy/nodes.py +0 -4115
  484. jaclang/vendor/mypy/operators.py +0 -126
  485. jaclang/vendor/mypy/options.py +0 -556
  486. jaclang/vendor/mypy/parse.py +0 -30
  487. jaclang/vendor/mypy/partially_defined.py +0 -675
  488. jaclang/vendor/mypy/patterns.py +0 -150
  489. jaclang/vendor/mypy/plugin.py +0 -901
  490. jaclang/vendor/mypy/plugins/attrs.py +0 -1166
  491. jaclang/vendor/mypy/plugins/common.py +0 -440
  492. jaclang/vendor/mypy/plugins/ctypes.py +0 -245
  493. jaclang/vendor/mypy/plugins/dataclasses.py +0 -1108
  494. jaclang/vendor/mypy/plugins/default.py +0 -531
  495. jaclang/vendor/mypy/plugins/enums.py +0 -259
  496. jaclang/vendor/mypy/plugins/functools.py +0 -104
  497. jaclang/vendor/mypy/plugins/proper_plugin.py +0 -175
  498. jaclang/vendor/mypy/plugins/singledispatch.py +0 -224
  499. jaclang/vendor/mypy/py.typed +0 -1
  500. jaclang/vendor/mypy/pyinfo.py +0 -78
  501. jaclang/vendor/mypy/reachability.py +0 -362
  502. jaclang/vendor/mypy/refinfo.py +0 -92
  503. jaclang/vendor/mypy/renaming.py +0 -568
  504. jaclang/vendor/mypy/report.py +0 -924
  505. jaclang/vendor/mypy/scope.py +0 -125
  506. jaclang/vendor/mypy/semanal.py +0 -7187
  507. jaclang/vendor/mypy/semanal_classprop.py +0 -187
  508. jaclang/vendor/mypy/semanal_enum.py +0 -253
  509. jaclang/vendor/mypy/semanal_infer.py +0 -128
  510. jaclang/vendor/mypy/semanal_main.py +0 -511
  511. jaclang/vendor/mypy/semanal_namedtuple.py +0 -670
  512. jaclang/vendor/mypy/semanal_newtype.py +0 -273
  513. jaclang/vendor/mypy/semanal_pass1.py +0 -156
  514. jaclang/vendor/mypy/semanal_shared.py +0 -490
  515. jaclang/vendor/mypy/semanal_typeargs.py +0 -265
  516. jaclang/vendor/mypy/semanal_typeddict.py +0 -575
  517. jaclang/vendor/mypy/server/astdiff.py +0 -518
  518. jaclang/vendor/mypy/server/astmerge.py +0 -562
  519. jaclang/vendor/mypy/server/aststrip.py +0 -281
  520. jaclang/vendor/mypy/server/deps.py +0 -1137
  521. jaclang/vendor/mypy/server/mergecheck.py +0 -83
  522. jaclang/vendor/mypy/server/objgraph.py +0 -101
  523. jaclang/vendor/mypy/server/subexpr.py +0 -198
  524. jaclang/vendor/mypy/server/target.py +0 -11
  525. jaclang/vendor/mypy/server/trigger.py +0 -26
  526. jaclang/vendor/mypy/server/update.py +0 -1339
  527. jaclang/vendor/mypy/sharedparse.py +0 -112
  528. jaclang/vendor/mypy/solve.py +0 -562
  529. jaclang/vendor/mypy/split_namespace.py +0 -35
  530. jaclang/vendor/mypy/state.py +0 -28
  531. jaclang/vendor/mypy/stats.py +0 -489
  532. jaclang/vendor/mypy/strconv.py +0 -641
  533. jaclang/vendor/mypy/stubdoc.py +0 -491
  534. jaclang/vendor/mypy/stubgen.py +0 -1886
  535. jaclang/vendor/mypy/stubgenc.py +0 -993
  536. jaclang/vendor/mypy/stubinfo.py +0 -173
  537. jaclang/vendor/mypy/stubtest.py +0 -2079
  538. jaclang/vendor/mypy/stubutil.py +0 -834
  539. jaclang/vendor/mypy/subtypes.py +0 -1980
  540. jaclang/vendor/mypy/suggestions.py +0 -1046
  541. jaclang/vendor/mypy/test/config.py +0 -28
  542. jaclang/vendor/mypy/test/data.py +0 -821
  543. jaclang/vendor/mypy/test/helpers.py +0 -476
  544. jaclang/vendor/mypy/test/meta/_pytest.py +0 -72
  545. jaclang/vendor/mypy/test/meta/test_diff_helper.py +0 -47
  546. jaclang/vendor/mypy/test/meta/test_parse_data.py +0 -73
  547. jaclang/vendor/mypy/test/meta/test_update_data.py +0 -135
  548. jaclang/vendor/mypy/test/test_find_sources.py +0 -376
  549. jaclang/vendor/mypy/test/test_ref_info.py +0 -45
  550. jaclang/vendor/mypy/test/testapi.py +0 -45
  551. jaclang/vendor/mypy/test/testargs.py +0 -77
  552. jaclang/vendor/mypy/test/testcheck.py +0 -322
  553. jaclang/vendor/mypy/test/testcmdline.py +0 -152
  554. jaclang/vendor/mypy/test/testconstraints.py +0 -134
  555. jaclang/vendor/mypy/test/testdaemon.py +0 -132
  556. jaclang/vendor/mypy/test/testdeps.py +0 -77
  557. jaclang/vendor/mypy/test/testdiff.py +0 -67
  558. jaclang/vendor/mypy/test/testerrorstream.py +0 -46
  559. jaclang/vendor/mypy/test/testfinegrained.py +0 -438
  560. jaclang/vendor/mypy/test/testfinegrainedcache.py +0 -18
  561. jaclang/vendor/mypy/test/testformatter.py +0 -85
  562. jaclang/vendor/mypy/test/testfscache.py +0 -101
  563. jaclang/vendor/mypy/test/testgraph.py +0 -83
  564. jaclang/vendor/mypy/test/testinfer.py +0 -373
  565. jaclang/vendor/mypy/test/testipc.py +0 -119
  566. jaclang/vendor/mypy/test/testmerge.py +0 -238
  567. jaclang/vendor/mypy/test/testmodulefinder.py +0 -278
  568. jaclang/vendor/mypy/test/testmypyc.py +0 -14
  569. jaclang/vendor/mypy/test/testparse.py +0 -107
  570. jaclang/vendor/mypy/test/testpep561.py +0 -211
  571. jaclang/vendor/mypy/test/testpythoneval.py +0 -117
  572. jaclang/vendor/mypy/test/testreports.py +0 -55
  573. jaclang/vendor/mypy/test/testsemanal.py +0 -209
  574. jaclang/vendor/mypy/test/testsolve.py +0 -285
  575. jaclang/vendor/mypy/test/teststubgen.py +0 -1412
  576. jaclang/vendor/mypy/test/teststubinfo.py +0 -12
  577. jaclang/vendor/mypy/test/teststubtest.py +0 -2492
  578. jaclang/vendor/mypy/test/testsubtypes.py +0 -303
  579. jaclang/vendor/mypy/test/testtransform.py +0 -64
  580. jaclang/vendor/mypy/test/testtypegen.py +0 -83
  581. jaclang/vendor/mypy/test/testtypes.py +0 -1551
  582. jaclang/vendor/mypy/test/testutil.py +0 -111
  583. jaclang/vendor/mypy/test/typefixture.py +0 -415
  584. jaclang/vendor/mypy/test/update_data.py +0 -87
  585. jaclang/vendor/mypy/test/visitors.py +0 -63
  586. jaclang/vendor/mypy/traverser.py +0 -961
  587. jaclang/vendor/mypy/treetransform.py +0 -800
  588. jaclang/vendor/mypy/tvar_scope.py +0 -169
  589. jaclang/vendor/mypy/type_visitor.py +0 -564
  590. jaclang/vendor/mypy/typeanal.py +0 -2596
  591. jaclang/vendor/mypy/typeops.py +0 -1082
  592. jaclang/vendor/mypy/types.py +0 -3708
  593. jaclang/vendor/mypy/types_utils.py +0 -166
  594. jaclang/vendor/mypy/typeshed/LICENSE +0 -237
  595. jaclang/vendor/mypy/typeshed/stdlib/VERSIONS +0 -309
  596. jaclang/vendor/mypy/typeshed/stdlib/__future__.pyi +0 -36
  597. jaclang/vendor/mypy/typeshed/stdlib/__main__.pyi +0 -3
  598. jaclang/vendor/mypy/typeshed/stdlib/_ast.pyi +0 -591
  599. jaclang/vendor/mypy/typeshed/stdlib/_bisect.pyi +0 -84
  600. jaclang/vendor/mypy/typeshed/stdlib/_bootlocale.pyi +0 -1
  601. jaclang/vendor/mypy/typeshed/stdlib/_codecs.pyi +0 -133
  602. jaclang/vendor/mypy/typeshed/stdlib/_collections_abc.pyi +0 -94
  603. jaclang/vendor/mypy/typeshed/stdlib/_compat_pickle.pyi +0 -8
  604. jaclang/vendor/mypy/typeshed/stdlib/_compression.pyi +0 -25
  605. jaclang/vendor/mypy/typeshed/stdlib/_csv.pyi +0 -90
  606. jaclang/vendor/mypy/typeshed/stdlib/_ctypes.pyi +0 -207
  607. jaclang/vendor/mypy/typeshed/stdlib/_curses.pyi +0 -566
  608. jaclang/vendor/mypy/typeshed/stdlib/_decimal.pyi +0 -281
  609. jaclang/vendor/mypy/typeshed/stdlib/_dummy_thread.pyi +0 -33
  610. jaclang/vendor/mypy/typeshed/stdlib/_dummy_threading.pyi +0 -164
  611. jaclang/vendor/mypy/typeshed/stdlib/_heapq.pyi +0 -11
  612. jaclang/vendor/mypy/typeshed/stdlib/_imp.pyi +0 -28
  613. jaclang/vendor/mypy/typeshed/stdlib/_json.pyi +0 -49
  614. jaclang/vendor/mypy/typeshed/stdlib/_locale.pyi +0 -100
  615. jaclang/vendor/mypy/typeshed/stdlib/_lsprof.pyi +0 -35
  616. jaclang/vendor/mypy/typeshed/stdlib/_markupbase.pyi +0 -16
  617. jaclang/vendor/mypy/typeshed/stdlib/_msi.pyi +0 -92
  618. jaclang/vendor/mypy/typeshed/stdlib/_operator.pyi +0 -147
  619. jaclang/vendor/mypy/typeshed/stdlib/_osx_support.pyi +0 -34
  620. jaclang/vendor/mypy/typeshed/stdlib/_posixsubprocess.pyi +0 -33
  621. jaclang/vendor/mypy/typeshed/stdlib/_py_abc.pyi +0 -14
  622. jaclang/vendor/mypy/typeshed/stdlib/_pydecimal.pyi +0 -43
  623. jaclang/vendor/mypy/typeshed/stdlib/_random.pyi +0 -12
  624. jaclang/vendor/mypy/typeshed/stdlib/_sitebuiltins.pyi +0 -16
  625. jaclang/vendor/mypy/typeshed/stdlib/_socket.pyi +0 -803
  626. jaclang/vendor/mypy/typeshed/stdlib/_stat.pyi +0 -103
  627. jaclang/vendor/mypy/typeshed/stdlib/_thread.pyi +0 -59
  628. jaclang/vendor/mypy/typeshed/stdlib/_threading_local.pyi +0 -17
  629. jaclang/vendor/mypy/typeshed/stdlib/_tkinter.pyi +0 -121
  630. jaclang/vendor/mypy/typeshed/stdlib/_tracemalloc.pyi +0 -17
  631. jaclang/vendor/mypy/typeshed/stdlib/_typeshed/__init__.pyi +0 -347
  632. jaclang/vendor/mypy/typeshed/stdlib/_typeshed/dbapi.pyi +0 -37
  633. jaclang/vendor/mypy/typeshed/stdlib/_typeshed/wsgi.pyi +0 -44
  634. jaclang/vendor/mypy/typeshed/stdlib/_typeshed/xml.pyi +0 -9
  635. jaclang/vendor/mypy/typeshed/stdlib/_warnings.pyi +0 -55
  636. jaclang/vendor/mypy/typeshed/stdlib/_weakref.pyi +0 -41
  637. jaclang/vendor/mypy/typeshed/stdlib/_weakrefset.pyi +0 -51
  638. jaclang/vendor/mypy/typeshed/stdlib/_winapi.pyi +0 -255
  639. jaclang/vendor/mypy/typeshed/stdlib/abc.pyi +0 -51
  640. jaclang/vendor/mypy/typeshed/stdlib/aifc.pyi +0 -91
  641. jaclang/vendor/mypy/typeshed/stdlib/antigravity.pyi +0 -3
  642. jaclang/vendor/mypy/typeshed/stdlib/argparse.pyi +0 -595
  643. jaclang/vendor/mypy/typeshed/stdlib/array.pyi +0 -92
  644. jaclang/vendor/mypy/typeshed/stdlib/ast.pyi +0 -277
  645. jaclang/vendor/mypy/typeshed/stdlib/asynchat.pyi +0 -21
  646. jaclang/vendor/mypy/typeshed/stdlib/asyncio/__init__.pyi +0 -41
  647. jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_events.pyi +0 -440
  648. jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_futures.pyi +0 -19
  649. jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_subprocess.pyi +0 -63
  650. jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_tasks.pyi +0 -9
  651. jaclang/vendor/mypy/typeshed/stdlib/asyncio/constants.pyi +0 -20
  652. jaclang/vendor/mypy/typeshed/stdlib/asyncio/coroutines.pyi +0 -26
  653. jaclang/vendor/mypy/typeshed/stdlib/asyncio/events.pyi +0 -580
  654. jaclang/vendor/mypy/typeshed/stdlib/asyncio/exceptions.pyi +0 -43
  655. jaclang/vendor/mypy/typeshed/stdlib/asyncio/format_helpers.pyi +0 -20
  656. jaclang/vendor/mypy/typeshed/stdlib/asyncio/futures.pyi +0 -57
  657. jaclang/vendor/mypy/typeshed/stdlib/asyncio/locks.pyi +0 -121
  658. jaclang/vendor/mypy/typeshed/stdlib/asyncio/log.pyi +0 -3
  659. jaclang/vendor/mypy/typeshed/stdlib/asyncio/mixins.pyi +0 -9
  660. jaclang/vendor/mypy/typeshed/stdlib/asyncio/proactor_events.pyi +0 -64
  661. jaclang/vendor/mypy/typeshed/stdlib/asyncio/protocols.pyi +0 -34
  662. jaclang/vendor/mypy/typeshed/stdlib/asyncio/queues.pyi +0 -47
  663. jaclang/vendor/mypy/typeshed/stdlib/asyncio/runners.pyi +0 -32
  664. jaclang/vendor/mypy/typeshed/stdlib/asyncio/selector_events.pyi +0 -8
  665. jaclang/vendor/mypy/typeshed/stdlib/asyncio/sslproto.pyi +0 -165
  666. jaclang/vendor/mypy/typeshed/stdlib/asyncio/staggered.pyi +0 -10
  667. jaclang/vendor/mypy/typeshed/stdlib/asyncio/streams.pyi +0 -153
  668. jaclang/vendor/mypy/typeshed/stdlib/asyncio/subprocess.pyi +0 -229
  669. jaclang/vendor/mypy/typeshed/stdlib/asyncio/taskgroups.pyi +0 -25
  670. jaclang/vendor/mypy/typeshed/stdlib/asyncio/tasks.pyi +0 -497
  671. jaclang/vendor/mypy/typeshed/stdlib/asyncio/threads.pyi +0 -9
  672. jaclang/vendor/mypy/typeshed/stdlib/asyncio/timeouts.pyi +0 -19
  673. jaclang/vendor/mypy/typeshed/stdlib/asyncio/transports.pyi +0 -47
  674. jaclang/vendor/mypy/typeshed/stdlib/asyncio/trsock.pyi +0 -94
  675. jaclang/vendor/mypy/typeshed/stdlib/asyncio/unix_events.pyi +0 -196
  676. jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_events.pyi +0 -85
  677. jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_utils.pyi +0 -49
  678. jaclang/vendor/mypy/typeshed/stdlib/asyncore.pyi +0 -90
  679. jaclang/vendor/mypy/typeshed/stdlib/atexit.pyi +0 -12
  680. jaclang/vendor/mypy/typeshed/stdlib/audioop.pyi +0 -43
  681. jaclang/vendor/mypy/typeshed/stdlib/base64.pyi +0 -59
  682. jaclang/vendor/mypy/typeshed/stdlib/bdb.pyi +0 -102
  683. jaclang/vendor/mypy/typeshed/stdlib/binascii.pyi +0 -36
  684. jaclang/vendor/mypy/typeshed/stdlib/binhex.pyi +0 -45
  685. jaclang/vendor/mypy/typeshed/stdlib/bisect.pyi +0 -4
  686. jaclang/vendor/mypy/typeshed/stdlib/builtins.pyi +0 -1936
  687. jaclang/vendor/mypy/typeshed/stdlib/bz2.pyi +0 -146
  688. jaclang/vendor/mypy/typeshed/stdlib/cProfile.pyi +0 -31
  689. jaclang/vendor/mypy/typeshed/stdlib/calendar.pyi +0 -208
  690. jaclang/vendor/mypy/typeshed/stdlib/cgi.pyi +0 -118
  691. jaclang/vendor/mypy/typeshed/stdlib/cgitb.pyi +0 -32
  692. jaclang/vendor/mypy/typeshed/stdlib/chunk.pyi +0 -20
  693. jaclang/vendor/mypy/typeshed/stdlib/cmath.pyi +0 -36
  694. jaclang/vendor/mypy/typeshed/stdlib/cmd.pyi +0 -45
  695. jaclang/vendor/mypy/typeshed/stdlib/code.pyi +0 -33
  696. jaclang/vendor/mypy/typeshed/stdlib/codecs.pyi +0 -285
  697. jaclang/vendor/mypy/typeshed/stdlib/codeop.pyi +0 -13
  698. jaclang/vendor/mypy/typeshed/stdlib/collections/__init__.pyi +0 -485
  699. jaclang/vendor/mypy/typeshed/stdlib/collections/abc.pyi +0 -2
  700. jaclang/vendor/mypy/typeshed/stdlib/colorsys.pyi +0 -13
  701. jaclang/vendor/mypy/typeshed/stdlib/compileall.pyi +0 -111
  702. jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/__init__.pyi +0 -32
  703. jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/_base.pyi +0 -126
  704. jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/process.pyi +0 -233
  705. jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/thread.pyi +0 -80
  706. jaclang/vendor/mypy/typeshed/stdlib/configparser.pyi +0 -313
  707. jaclang/vendor/mypy/typeshed/stdlib/contextlib.pyi +0 -208
  708. jaclang/vendor/mypy/typeshed/stdlib/contextvars.pyi +0 -63
  709. jaclang/vendor/mypy/typeshed/stdlib/copy.pyi +0 -16
  710. jaclang/vendor/mypy/typeshed/stdlib/copyreg.pyi +0 -21
  711. jaclang/vendor/mypy/typeshed/stdlib/crypt.pyi +0 -12
  712. jaclang/vendor/mypy/typeshed/stdlib/csv.pyi +0 -147
  713. jaclang/vendor/mypy/typeshed/stdlib/ctypes/__init__.pyi +0 -187
  714. jaclang/vendor/mypy/typeshed/stdlib/ctypes/_endian.pyi +0 -19
  715. jaclang/vendor/mypy/typeshed/stdlib/ctypes/util.pyi +0 -6
  716. jaclang/vendor/mypy/typeshed/stdlib/ctypes/wintypes.pyi +0 -298
  717. jaclang/vendor/mypy/typeshed/stdlib/curses/__init__.pyi +0 -22
  718. jaclang/vendor/mypy/typeshed/stdlib/curses/ascii.pyi +0 -62
  719. jaclang/vendor/mypy/typeshed/stdlib/curses/has_key.pyi +0 -1
  720. jaclang/vendor/mypy/typeshed/stdlib/curses/panel.pyi +0 -22
  721. jaclang/vendor/mypy/typeshed/stdlib/curses/textpad.pyi +0 -11
  722. jaclang/vendor/mypy/typeshed/stdlib/dataclasses.pyi +0 -315
  723. jaclang/vendor/mypy/typeshed/stdlib/datetime.pyi +0 -295
  724. jaclang/vendor/mypy/typeshed/stdlib/dbm/__init__.pyi +0 -95
  725. jaclang/vendor/mypy/typeshed/stdlib/dbm/dumb.pyi +0 -31
  726. jaclang/vendor/mypy/typeshed/stdlib/dbm/gnu.pyi +0 -41
  727. jaclang/vendor/mypy/typeshed/stdlib/dbm/ndbm.pyi +0 -37
  728. jaclang/vendor/mypy/typeshed/stdlib/decimal.pyi +0 -2
  729. jaclang/vendor/mypy/typeshed/stdlib/difflib.pyi +0 -140
  730. jaclang/vendor/mypy/typeshed/stdlib/dis.pyi +0 -144
  731. jaclang/vendor/mypy/typeshed/stdlib/distutils/__init__.pyi +0 -5
  732. jaclang/vendor/mypy/typeshed/stdlib/distutils/archive_util.pyi +0 -20
  733. jaclang/vendor/mypy/typeshed/stdlib/distutils/bcppcompiler.pyi +0 -3
  734. jaclang/vendor/mypy/typeshed/stdlib/distutils/ccompiler.pyi +0 -152
  735. jaclang/vendor/mypy/typeshed/stdlib/distutils/cmd.pyi +0 -66
  736. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist.pyi +0 -25
  737. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_dumb.pyi +0 -21
  738. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_msi.pyi +0 -45
  739. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_rpm.pyi +0 -52
  740. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_wininst.pyi +0 -16
  741. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build.pyi +0 -31
  742. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_clib.pyi +0 -27
  743. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_ext.pyi +0 -50
  744. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_py.pyi +0 -44
  745. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_scripts.pyi +0 -24
  746. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/check.pyi +0 -39
  747. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/clean.pyi +0 -17
  748. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/config.pyi +0 -83
  749. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install.pyi +0 -63
  750. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_data.pyi +0 -19
  751. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_egg_info.pyi +0 -18
  752. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_headers.pyi +0 -16
  753. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_lib.pyi +0 -25
  754. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_scripts.pyi +0 -18
  755. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/register.pyi +0 -18
  756. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/sdist.pyi +0 -42
  757. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/upload.pyi +0 -17
  758. jaclang/vendor/mypy/typeshed/stdlib/distutils/config.pyi +0 -17
  759. jaclang/vendor/mypy/typeshed/stdlib/distutils/core.pyi +0 -57
  760. jaclang/vendor/mypy/typeshed/stdlib/distutils/cygwinccompiler.pyi +0 -20
  761. jaclang/vendor/mypy/typeshed/stdlib/distutils/debug.pyi +0 -1
  762. jaclang/vendor/mypy/typeshed/stdlib/distutils/dep_util.pyi +0 -3
  763. jaclang/vendor/mypy/typeshed/stdlib/distutils/dir_util.pyi +0 -13
  764. jaclang/vendor/mypy/typeshed/stdlib/distutils/dist.pyi +0 -146
  765. jaclang/vendor/mypy/typeshed/stdlib/distutils/errors.pyi +0 -19
  766. jaclang/vendor/mypy/typeshed/stdlib/distutils/extension.pyi +0 -36
  767. jaclang/vendor/mypy/typeshed/stdlib/distutils/fancy_getopt.pyi +0 -34
  768. jaclang/vendor/mypy/typeshed/stdlib/distutils/file_util.pyi +0 -14
  769. jaclang/vendor/mypy/typeshed/stdlib/distutils/filelist.pyi +0 -50
  770. jaclang/vendor/mypy/typeshed/stdlib/distutils/log.pyi +0 -25
  771. jaclang/vendor/mypy/typeshed/stdlib/distutils/msvccompiler.pyi +0 -3
  772. jaclang/vendor/mypy/typeshed/stdlib/distutils/spawn.pyi +0 -2
  773. jaclang/vendor/mypy/typeshed/stdlib/distutils/sysconfig.pyi +0 -31
  774. jaclang/vendor/mypy/typeshed/stdlib/distutils/text_file.pyi +0 -21
  775. jaclang/vendor/mypy/typeshed/stdlib/distutils/unixccompiler.pyi +0 -3
  776. jaclang/vendor/mypy/typeshed/stdlib/distutils/util.pyi +0 -46
  777. jaclang/vendor/mypy/typeshed/stdlib/distutils/version.pyi +0 -36
  778. jaclang/vendor/mypy/typeshed/stdlib/doctest.pyi +0 -248
  779. jaclang/vendor/mypy/typeshed/stdlib/dummy_threading.pyi +0 -2
  780. jaclang/vendor/mypy/typeshed/stdlib/email/__init__.pyi +0 -29
  781. jaclang/vendor/mypy/typeshed/stdlib/email/_header_value_parser.pyi +0 -392
  782. jaclang/vendor/mypy/typeshed/stdlib/email/_policybase.pyi +0 -51
  783. jaclang/vendor/mypy/typeshed/stdlib/email/base64mime.pyi +0 -13
  784. jaclang/vendor/mypy/typeshed/stdlib/email/charset.pyi +0 -34
  785. jaclang/vendor/mypy/typeshed/stdlib/email/contentmanager.pyi +0 -11
  786. jaclang/vendor/mypy/typeshed/stdlib/email/encoders.pyi +0 -8
  787. jaclang/vendor/mypy/typeshed/stdlib/email/errors.pyi +0 -39
  788. jaclang/vendor/mypy/typeshed/stdlib/email/feedparser.pyi +0 -23
  789. jaclang/vendor/mypy/typeshed/stdlib/email/generator.pyi +0 -40
  790. jaclang/vendor/mypy/typeshed/stdlib/email/header.pyi +0 -31
  791. jaclang/vendor/mypy/typeshed/stdlib/email/headerregistry.pyi +0 -178
  792. jaclang/vendor/mypy/typeshed/stdlib/email/iterators.pyi +0 -12
  793. jaclang/vendor/mypy/typeshed/stdlib/email/message.pyi +0 -165
  794. jaclang/vendor/mypy/typeshed/stdlib/email/mime/application.pyi +0 -17
  795. jaclang/vendor/mypy/typeshed/stdlib/email/mime/audio.pyi +0 -17
  796. jaclang/vendor/mypy/typeshed/stdlib/email/mime/base.pyi +0 -8
  797. jaclang/vendor/mypy/typeshed/stdlib/email/mime/image.pyi +0 -17
  798. jaclang/vendor/mypy/typeshed/stdlib/email/mime/message.pyi +0 -8
  799. jaclang/vendor/mypy/typeshed/stdlib/email/mime/multipart.pyi +0 -18
  800. jaclang/vendor/mypy/typeshed/stdlib/email/mime/nonmultipart.pyi +0 -5
  801. jaclang/vendor/mypy/typeshed/stdlib/email/mime/text.pyi +0 -9
  802. jaclang/vendor/mypy/typeshed/stdlib/email/parser.pyi +0 -26
  803. jaclang/vendor/mypy/typeshed/stdlib/email/policy.pyi +0 -38
  804. jaclang/vendor/mypy/typeshed/stdlib/email/quoprimime.pyi +0 -28
  805. jaclang/vendor/mypy/typeshed/stdlib/email/utils.pyi +0 -70
  806. jaclang/vendor/mypy/typeshed/stdlib/encodings/__init__.pyi +0 -10
  807. jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8.pyi +0 -21
  808. jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8_sig.pyi +0 -22
  809. jaclang/vendor/mypy/typeshed/stdlib/ensurepip/__init__.pyi +0 -12
  810. jaclang/vendor/mypy/typeshed/stdlib/enum.pyi +0 -320
  811. jaclang/vendor/mypy/typeshed/stdlib/errno.pyi +0 -222
  812. jaclang/vendor/mypy/typeshed/stdlib/faulthandler.pyi +0 -13
  813. jaclang/vendor/mypy/typeshed/stdlib/fcntl.pyi +0 -127
  814. jaclang/vendor/mypy/typeshed/stdlib/filecmp.pyi +0 -57
  815. jaclang/vendor/mypy/typeshed/stdlib/fileinput.pyi +0 -213
  816. jaclang/vendor/mypy/typeshed/stdlib/fnmatch.pyi +0 -9
  817. jaclang/vendor/mypy/typeshed/stdlib/formatter.pyi +0 -88
  818. jaclang/vendor/mypy/typeshed/stdlib/fractions.pyi +0 -150
  819. jaclang/vendor/mypy/typeshed/stdlib/ftplib.pyi +0 -178
  820. jaclang/vendor/mypy/typeshed/stdlib/functools.pyi +0 -213
  821. jaclang/vendor/mypy/typeshed/stdlib/gc.pyi +0 -37
  822. jaclang/vendor/mypy/typeshed/stdlib/genericpath.pyi +0 -52
  823. jaclang/vendor/mypy/typeshed/stdlib/getopt.pyi +0 -11
  824. jaclang/vendor/mypy/typeshed/stdlib/getpass.pyi +0 -8
  825. jaclang/vendor/mypy/typeshed/stdlib/gettext.pyi +0 -169
  826. jaclang/vendor/mypy/typeshed/stdlib/glob.pyi +0 -42
  827. jaclang/vendor/mypy/typeshed/stdlib/graphlib.pyi +0 -28
  828. jaclang/vendor/mypy/typeshed/stdlib/grp.pyi +0 -22
  829. jaclang/vendor/mypy/typeshed/stdlib/gzip.pyi +0 -160
  830. jaclang/vendor/mypy/typeshed/stdlib/hashlib.pyi +0 -167
  831. jaclang/vendor/mypy/typeshed/stdlib/heapq.pyi +0 -17
  832. jaclang/vendor/mypy/typeshed/stdlib/hmac.pyi +0 -38
  833. jaclang/vendor/mypy/typeshed/stdlib/html/__init__.pyi +0 -6
  834. jaclang/vendor/mypy/typeshed/stdlib/html/entities.pyi +0 -6
  835. jaclang/vendor/mypy/typeshed/stdlib/html/parser.pyi +0 -34
  836. jaclang/vendor/mypy/typeshed/stdlib/http/__init__.pyi +0 -105
  837. jaclang/vendor/mypy/typeshed/stdlib/http/client.pyi +0 -259
  838. jaclang/vendor/mypy/typeshed/stdlib/http/cookiejar.pyi +0 -159
  839. jaclang/vendor/mypy/typeshed/stdlib/http/cookies.pyi +0 -60
  840. jaclang/vendor/mypy/typeshed/stdlib/http/server.pyi +0 -83
  841. jaclang/vendor/mypy/typeshed/stdlib/imaplib.pyi +0 -168
  842. jaclang/vendor/mypy/typeshed/stdlib/imghdr.pyi +0 -17
  843. jaclang/vendor/mypy/typeshed/stdlib/imp.pyi +0 -62
  844. jaclang/vendor/mypy/typeshed/stdlib/importlib/__init__.pyi +0 -24
  845. jaclang/vendor/mypy/typeshed/stdlib/importlib/_abc.pyi +0 -15
  846. jaclang/vendor/mypy/typeshed/stdlib/importlib/abc.pyi +0 -172
  847. jaclang/vendor/mypy/typeshed/stdlib/importlib/machinery.pyi +0 -179
  848. jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/__init__.pyi +0 -285
  849. jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/_meta.pyi +0 -49
  850. jaclang/vendor/mypy/typeshed/stdlib/importlib/readers.pyi +0 -68
  851. jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/__init__.pyi +0 -46
  852. jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/abc.pyi +0 -12
  853. jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/readers.pyi +0 -14
  854. jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/simple.pyi +0 -56
  855. jaclang/vendor/mypy/typeshed/stdlib/importlib/simple.pyi +0 -11
  856. jaclang/vendor/mypy/typeshed/stdlib/importlib/util.pyi +0 -43
  857. jaclang/vendor/mypy/typeshed/stdlib/inspect.pyi +0 -632
  858. jaclang/vendor/mypy/typeshed/stdlib/io.pyi +0 -238
  859. jaclang/vendor/mypy/typeshed/stdlib/ipaddress.pyi +0 -208
  860. jaclang/vendor/mypy/typeshed/stdlib/itertools.pyi +0 -273
  861. jaclang/vendor/mypy/typeshed/stdlib/json/__init__.pyi +0 -61
  862. jaclang/vendor/mypy/typeshed/stdlib/json/decoder.pyi +0 -32
  863. jaclang/vendor/mypy/typeshed/stdlib/json/encoder.pyi +0 -40
  864. jaclang/vendor/mypy/typeshed/stdlib/json/tool.pyi +0 -1
  865. jaclang/vendor/mypy/typeshed/stdlib/keyword.pyi +0 -21
  866. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/btm_matcher.pyi +0 -28
  867. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixer_base.pyi +0 -42
  868. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_apply.pyi +0 -8
  869. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_asserts.pyi +0 -10
  870. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_basestring.pyi +0 -8
  871. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_buffer.pyi +0 -8
  872. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_dict.pyi +0 -16
  873. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_except.pyi +0 -14
  874. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exec.pyi +0 -8
  875. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_execfile.pyi +0 -8
  876. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exitfunc.pyi +0 -13
  877. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_filter.pyi +0 -9
  878. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_funcattrs.pyi +0 -8
  879. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_future.pyi +0 -8
  880. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_getcwdu.pyi +0 -8
  881. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_has_key.pyi +0 -8
  882. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_idioms.pyi +0 -15
  883. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_import.pyi +0 -16
  884. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports.pyi +0 -21
  885. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports2.pyi +0 -6
  886. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_input.pyi +0 -11
  887. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_intern.pyi +0 -9
  888. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_isinstance.pyi +0 -8
  889. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools.pyi +0 -9
  890. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools_imports.pyi +0 -7
  891. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_long.pyi +0 -7
  892. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_map.pyi +0 -9
  893. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_metaclass.pyi +0 -17
  894. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_methodattrs.pyi +0 -10
  895. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ne.pyi +0 -8
  896. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_next.pyi +0 -19
  897. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_nonzero.pyi +0 -8
  898. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_numliterals.pyi +0 -8
  899. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_operator.pyi +0 -12
  900. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_paren.pyi +0 -8
  901. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_print.pyi +0 -12
  902. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raise.pyi +0 -8
  903. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raw_input.pyi +0 -8
  904. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reduce.pyi +0 -8
  905. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reload.pyi +0 -9
  906. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_renames.pyi +0 -17
  907. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_repr.pyi +0 -8
  908. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_set_literal.pyi +0 -7
  909. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_standarderror.pyi +0 -8
  910. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_sys_exc.pyi +0 -9
  911. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_throw.pyi +0 -8
  912. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_tuple_params.pyi +0 -17
  913. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_types.pyi +0 -8
  914. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_unicode.pyi +0 -12
  915. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_urllib.pyi +0 -15
  916. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ws_comma.pyi +0 -12
  917. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xrange.pyi +0 -20
  918. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xreadlines.pyi +0 -8
  919. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_zip.pyi +0 -9
  920. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/main.pyi +0 -42
  921. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/__init__.pyi +0 -9
  922. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/driver.pyi +0 -27
  923. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/grammar.pyi +0 -24
  924. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/literals.pyi +0 -7
  925. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/parse.pyi +0 -30
  926. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/pgen.pyi +0 -50
  927. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/token.pyi +0 -67
  928. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/tokenize.pyi +0 -96
  929. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pygram.pyi +0 -114
  930. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pytree.pyi +0 -117
  931. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/refactor.pyi +0 -82
  932. jaclang/vendor/mypy/typeshed/stdlib/linecache.pyi +0 -23
  933. jaclang/vendor/mypy/typeshed/stdlib/locale.pyi +0 -152
  934. jaclang/vendor/mypy/typeshed/stdlib/logging/__init__.pyi +0 -658
  935. jaclang/vendor/mypy/typeshed/stdlib/logging/config.pyi +0 -134
  936. jaclang/vendor/mypy/typeshed/stdlib/logging/handlers.pyi +0 -275
  937. jaclang/vendor/mypy/typeshed/stdlib/lzma.pyi +0 -197
  938. jaclang/vendor/mypy/typeshed/stdlib/mailbox.pyi +0 -256
  939. jaclang/vendor/mypy/typeshed/stdlib/mailcap.pyi +0 -11
  940. jaclang/vendor/mypy/typeshed/stdlib/marshal.pyi +0 -33
  941. jaclang/vendor/mypy/typeshed/stdlib/math.pyi +0 -125
  942. jaclang/vendor/mypy/typeshed/stdlib/mimetypes.pyi +0 -46
  943. jaclang/vendor/mypy/typeshed/stdlib/mmap.pyi +0 -113
  944. jaclang/vendor/mypy/typeshed/stdlib/modulefinder.pyi +0 -66
  945. jaclang/vendor/mypy/typeshed/stdlib/msilib/__init__.pyi +0 -177
  946. jaclang/vendor/mypy/typeshed/stdlib/msilib/schema.pyi +0 -94
  947. jaclang/vendor/mypy/typeshed/stdlib/msilib/sequence.pyi +0 -13
  948. jaclang/vendor/mypy/typeshed/stdlib/msilib/text.pyi +0 -7
  949. jaclang/vendor/mypy/typeshed/stdlib/msvcrt.pyi +0 -32
  950. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/__init__.pyi +0 -90
  951. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/connection.pyi +0 -75
  952. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/context.pyi +0 -189
  953. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/__init__.pyi +0 -77
  954. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/connection.pyi +0 -39
  955. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/forkserver.pyi +0 -31
  956. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/heap.pyi +0 -36
  957. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/managers.pyi +0 -212
  958. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/pool.pyi +0 -103
  959. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_fork.pyi +0 -23
  960. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_forkserver.pyi +0 -16
  961. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_posix.pyi +0 -20
  962. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_win32.pyi +0 -30
  963. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/process.pyi +0 -39
  964. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/queues.pyi +0 -41
  965. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/reduction.pyi +0 -90
  966. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_sharer.pyi +0 -20
  967. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_tracker.pyi +0 -18
  968. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/shared_memory.pyi +0 -40
  969. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/sharedctypes.pyi +0 -107
  970. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/spawn.pyi +0 -32
  971. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/synchronize.pyi +0 -54
  972. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/util.pyi +0 -98
  973. jaclang/vendor/mypy/typeshed/stdlib/netrc.pyi +0 -23
  974. jaclang/vendor/mypy/typeshed/stdlib/nis.pyi +0 -9
  975. jaclang/vendor/mypy/typeshed/stdlib/nntplib.pyi +0 -125
  976. jaclang/vendor/mypy/typeshed/stdlib/nt.pyi +0 -111
  977. jaclang/vendor/mypy/typeshed/stdlib/ntpath.pyi +0 -119
  978. jaclang/vendor/mypy/typeshed/stdlib/nturl2path.pyi +0 -2
  979. jaclang/vendor/mypy/typeshed/stdlib/numbers.pyi +0 -209
  980. jaclang/vendor/mypy/typeshed/stdlib/opcode.pyi +0 -59
  981. jaclang/vendor/mypy/typeshed/stdlib/operator.pyi +0 -110
  982. jaclang/vendor/mypy/typeshed/stdlib/optparse.pyi +0 -255
  983. jaclang/vendor/mypy/typeshed/stdlib/os/__init__.pyi +0 -1157
  984. jaclang/vendor/mypy/typeshed/stdlib/os/path.pyi +0 -8
  985. jaclang/vendor/mypy/typeshed/stdlib/ossaudiodev.pyi +0 -131
  986. jaclang/vendor/mypy/typeshed/stdlib/parser.pyi +0 -24
  987. jaclang/vendor/mypy/typeshed/stdlib/pathlib.pyi +0 -232
  988. jaclang/vendor/mypy/typeshed/stdlib/pdb.pyi +0 -181
  989. jaclang/vendor/mypy/typeshed/stdlib/pickle.pyi +0 -271
  990. jaclang/vendor/mypy/typeshed/stdlib/pickletools.pyi +0 -167
  991. jaclang/vendor/mypy/typeshed/stdlib/pipes.pyi +0 -16
  992. jaclang/vendor/mypy/typeshed/stdlib/pkgutil.pyi +0 -53
  993. jaclang/vendor/mypy/typeshed/stdlib/platform.pyi +0 -42
  994. jaclang/vendor/mypy/typeshed/stdlib/plistlib.pyi +0 -113
  995. jaclang/vendor/mypy/typeshed/stdlib/poplib.pyi +0 -71
  996. jaclang/vendor/mypy/typeshed/stdlib/posix.pyi +0 -361
  997. jaclang/vendor/mypy/typeshed/stdlib/posixpath.pyi +0 -161
  998. jaclang/vendor/mypy/typeshed/stdlib/pprint.pyi +0 -112
  999. jaclang/vendor/mypy/typeshed/stdlib/profile.pyi +0 -31
  1000. jaclang/vendor/mypy/typeshed/stdlib/pstats.pyi +0 -80
  1001. jaclang/vendor/mypy/typeshed/stdlib/pty.pyi +0 -19
  1002. jaclang/vendor/mypy/typeshed/stdlib/pwd.pyi +0 -28
  1003. jaclang/vendor/mypy/typeshed/stdlib/py_compile.pyi +0 -34
  1004. jaclang/vendor/mypy/typeshed/stdlib/pyclbr.pyi +0 -74
  1005. jaclang/vendor/mypy/typeshed/stdlib/pydoc.pyi +0 -261
  1006. jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/__init__.pyi +0 -0
  1007. jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/topics.pyi +0 -1
  1008. jaclang/vendor/mypy/typeshed/stdlib/pyexpat/__init__.pyi +0 -85
  1009. jaclang/vendor/mypy/typeshed/stdlib/pyexpat/errors.pyi +0 -49
  1010. jaclang/vendor/mypy/typeshed/stdlib/pyexpat/model.pyi +0 -11
  1011. jaclang/vendor/mypy/typeshed/stdlib/queue.pyi +0 -66
  1012. jaclang/vendor/mypy/typeshed/stdlib/quopri.pyi +0 -11
  1013. jaclang/vendor/mypy/typeshed/stdlib/random.pyi +0 -138
  1014. jaclang/vendor/mypy/typeshed/stdlib/re.pyi +0 -290
  1015. jaclang/vendor/mypy/typeshed/stdlib/readline.pyi +0 -36
  1016. jaclang/vendor/mypy/typeshed/stdlib/reprlib.pyi +0 -65
  1017. jaclang/vendor/mypy/typeshed/stdlib/resource.pyi +0 -94
  1018. jaclang/vendor/mypy/typeshed/stdlib/rlcompleter.pyi +0 -9
  1019. jaclang/vendor/mypy/typeshed/stdlib/runpy.pyi +0 -24
  1020. jaclang/vendor/mypy/typeshed/stdlib/sched.pyi +0 -42
  1021. jaclang/vendor/mypy/typeshed/stdlib/secrets.pyi +0 -15
  1022. jaclang/vendor/mypy/typeshed/stdlib/select.pyi +0 -155
  1023. jaclang/vendor/mypy/typeshed/stdlib/selectors.pyi +0 -67
  1024. jaclang/vendor/mypy/typeshed/stdlib/shelve.pyi +0 -46
  1025. jaclang/vendor/mypy/typeshed/stdlib/shlex.pyi +0 -63
  1026. jaclang/vendor/mypy/typeshed/stdlib/shutil.pyi +0 -185
  1027. jaclang/vendor/mypy/typeshed/stdlib/signal.pyi +0 -188
  1028. jaclang/vendor/mypy/typeshed/stdlib/site.pyi +0 -27
  1029. jaclang/vendor/mypy/typeshed/stdlib/smtpd.pyi +0 -91
  1030. jaclang/vendor/mypy/typeshed/stdlib/smtplib.pyi +0 -204
  1031. jaclang/vendor/mypy/typeshed/stdlib/sndhdr.pyi +0 -14
  1032. jaclang/vendor/mypy/typeshed/stdlib/socket.pyi +0 -825
  1033. jaclang/vendor/mypy/typeshed/stdlib/socketserver.pyi +0 -168
  1034. jaclang/vendor/mypy/typeshed/stdlib/spwd.pyi +0 -41
  1035. jaclang/vendor/mypy/typeshed/stdlib/sqlite3/__init__.pyi +0 -1
  1036. jaclang/vendor/mypy/typeshed/stdlib/sqlite3/dbapi2.pyi +0 -551
  1037. jaclang/vendor/mypy/typeshed/stdlib/sre_compile.pyi +0 -11
  1038. jaclang/vendor/mypy/typeshed/stdlib/sre_constants.pyi +0 -130
  1039. jaclang/vendor/mypy/typeshed/stdlib/sre_parse.pyi +0 -104
  1040. jaclang/vendor/mypy/typeshed/stdlib/ssl.pyi +0 -537
  1041. jaclang/vendor/mypy/typeshed/stdlib/stat.pyi +0 -1
  1042. jaclang/vendor/mypy/typeshed/stdlib/statistics.pyi +0 -132
  1043. jaclang/vendor/mypy/typeshed/stdlib/string.pyi +0 -83
  1044. jaclang/vendor/mypy/typeshed/stdlib/stringprep.pyi +0 -27
  1045. jaclang/vendor/mypy/typeshed/stdlib/struct.pyi +0 -26
  1046. jaclang/vendor/mypy/typeshed/stdlib/subprocess.pyi +0 -2615
  1047. jaclang/vendor/mypy/typeshed/stdlib/sunau.pyi +0 -86
  1048. jaclang/vendor/mypy/typeshed/stdlib/symbol.pyi +0 -93
  1049. jaclang/vendor/mypy/typeshed/stdlib/symtable.pyi +0 -58
  1050. jaclang/vendor/mypy/typeshed/stdlib/sys/__init__.pyi +0 -373
  1051. jaclang/vendor/mypy/typeshed/stdlib/sys/_monitoring.pyi +0 -52
  1052. jaclang/vendor/mypy/typeshed/stdlib/sysconfig.pyi +0 -48
  1053. jaclang/vendor/mypy/typeshed/stdlib/syslog.pyi +0 -46
  1054. jaclang/vendor/mypy/typeshed/stdlib/tabnanny.pyi +0 -16
  1055. jaclang/vendor/mypy/typeshed/stdlib/tarfile.pyi +0 -441
  1056. jaclang/vendor/mypy/typeshed/stdlib/telnetlib.pyi +0 -122
  1057. jaclang/vendor/mypy/typeshed/stdlib/tempfile.pyi +0 -477
  1058. jaclang/vendor/mypy/typeshed/stdlib/termios.pyi +0 -267
  1059. jaclang/vendor/mypy/typeshed/stdlib/textwrap.pyi +0 -103
  1060. jaclang/vendor/mypy/typeshed/stdlib/this.pyi +0 -2
  1061. jaclang/vendor/mypy/typeshed/stdlib/threading.pyi +0 -187
  1062. jaclang/vendor/mypy/typeshed/stdlib/time.pyi +0 -108
  1063. jaclang/vendor/mypy/typeshed/stdlib/timeit.pyi +0 -32
  1064. jaclang/vendor/mypy/typeshed/stdlib/tkinter/__init__.pyi +0 -3654
  1065. jaclang/vendor/mypy/typeshed/stdlib/tkinter/colorchooser.pyi +0 -20
  1066. jaclang/vendor/mypy/typeshed/stdlib/tkinter/commondialog.pyi +0 -14
  1067. jaclang/vendor/mypy/typeshed/stdlib/tkinter/constants.pyi +0 -80
  1068. jaclang/vendor/mypy/typeshed/stdlib/tkinter/dialog.pyi +0 -16
  1069. jaclang/vendor/mypy/typeshed/stdlib/tkinter/dnd.pyi +0 -20
  1070. jaclang/vendor/mypy/typeshed/stdlib/tkinter/filedialog.pyi +0 -151
  1071. jaclang/vendor/mypy/typeshed/stdlib/tkinter/font.pyi +0 -116
  1072. jaclang/vendor/mypy/typeshed/stdlib/tkinter/messagebox.pyi +0 -44
  1073. jaclang/vendor/mypy/typeshed/stdlib/tkinter/scrolledtext.pyi +0 -9
  1074. jaclang/vendor/mypy/typeshed/stdlib/tkinter/simpledialog.pyi +0 -54
  1075. jaclang/vendor/mypy/typeshed/stdlib/tkinter/tix.pyi +0 -299
  1076. jaclang/vendor/mypy/typeshed/stdlib/tkinter/ttk.pyi +0 -1204
  1077. jaclang/vendor/mypy/typeshed/stdlib/token.pyi +0 -159
  1078. jaclang/vendor/mypy/typeshed/stdlib/tokenize.pyi +0 -177
  1079. jaclang/vendor/mypy/typeshed/stdlib/tomllib.pyi +0 -10
  1080. jaclang/vendor/mypy/typeshed/stdlib/trace.pyi +0 -79
  1081. jaclang/vendor/mypy/typeshed/stdlib/traceback.pyi +0 -262
  1082. jaclang/vendor/mypy/typeshed/stdlib/tracemalloc.pyi +0 -124
  1083. jaclang/vendor/mypy/typeshed/stdlib/tty.pyi +0 -30
  1084. jaclang/vendor/mypy/typeshed/stdlib/turtle.pyi +0 -713
  1085. jaclang/vendor/mypy/typeshed/stdlib/types.pyi +0 -614
  1086. jaclang/vendor/mypy/typeshed/stdlib/typing.pyi +0 -976
  1087. jaclang/vendor/mypy/typeshed/stdlib/typing_extensions.pyi +0 -509
  1088. jaclang/vendor/mypy/typeshed/stdlib/unicodedata.pyi +0 -73
  1089. jaclang/vendor/mypy/typeshed/stdlib/unittest/__init__.pyi +0 -67
  1090. jaclang/vendor/mypy/typeshed/stdlib/unittest/_log.pyi +0 -27
  1091. jaclang/vendor/mypy/typeshed/stdlib/unittest/async_case.pyi +0 -21
  1092. jaclang/vendor/mypy/typeshed/stdlib/unittest/case.pyi +0 -342
  1093. jaclang/vendor/mypy/typeshed/stdlib/unittest/loader.pyi +0 -51
  1094. jaclang/vendor/mypy/typeshed/stdlib/unittest/main.pyi +0 -69
  1095. jaclang/vendor/mypy/typeshed/stdlib/unittest/mock.pyi +0 -430
  1096. jaclang/vendor/mypy/typeshed/stdlib/unittest/result.pyi +0 -47
  1097. jaclang/vendor/mypy/typeshed/stdlib/unittest/runner.pyi +0 -72
  1098. jaclang/vendor/mypy/typeshed/stdlib/unittest/signals.pyi +0 -15
  1099. jaclang/vendor/mypy/typeshed/stdlib/unittest/suite.pyi +0 -22
  1100. jaclang/vendor/mypy/typeshed/stdlib/unittest/util.pyi +0 -23
  1101. jaclang/vendor/mypy/typeshed/stdlib/urllib/__init__.pyi +0 -0
  1102. jaclang/vendor/mypy/typeshed/stdlib/urllib/error.pyi +0 -23
  1103. jaclang/vendor/mypy/typeshed/stdlib/urllib/parse.pyi +0 -210
  1104. jaclang/vendor/mypy/typeshed/stdlib/urllib/request.pyi +0 -400
  1105. jaclang/vendor/mypy/typeshed/stdlib/urllib/response.pyi +0 -43
  1106. jaclang/vendor/mypy/typeshed/stdlib/urllib/robotparser.pyi +0 -20
  1107. jaclang/vendor/mypy/typeshed/stdlib/uu.pyi +0 -13
  1108. jaclang/vendor/mypy/typeshed/stdlib/uuid.pyi +0 -100
  1109. jaclang/vendor/mypy/typeshed/stdlib/warnings.pyi +0 -112
  1110. jaclang/vendor/mypy/typeshed/stdlib/wave.pyi +0 -85
  1111. jaclang/vendor/mypy/typeshed/stdlib/weakref.pyi +0 -149
  1112. jaclang/vendor/mypy/typeshed/stdlib/webbrowser.pyi +0 -74
  1113. jaclang/vendor/mypy/typeshed/stdlib/winreg.pyi +0 -132
  1114. jaclang/vendor/mypy/typeshed/stdlib/winsound.pyi +0 -28
  1115. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/__init__.pyi +0 -0
  1116. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/handlers.pyi +0 -91
  1117. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/headers.pyi +0 -26
  1118. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/simple_server.pyi +0 -37
  1119. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/types.pyi +0 -32
  1120. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/util.pyi +0 -24
  1121. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/validate.pyi +0 -50
  1122. jaclang/vendor/mypy/typeshed/stdlib/xdrlib.pyi +0 -57
  1123. jaclang/vendor/mypy/typeshed/stdlib/xml/__init__.pyi +0 -1
  1124. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/NodeFilter.pyi +0 -19
  1125. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/__init__.pyi +0 -69
  1126. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/domreg.pyi +0 -8
  1127. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/expatbuilder.pyi +0 -100
  1128. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minicompat.pyi +0 -22
  1129. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minidom.pyi +0 -404
  1130. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/pulldom.pyi +0 -94
  1131. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/xmlbuilder.pyi +0 -108
  1132. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementInclude.pyi +0 -28
  1133. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementPath.pyi +0 -34
  1134. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementTree.pyi +0 -327
  1135. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/__init__.pyi +0 -0
  1136. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/cElementTree.pyi +0 -1
  1137. jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/__init__.pyi +0 -1
  1138. jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/__init__.pyi +0 -1
  1139. jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/errors.pyi +0 -1
  1140. jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/model.pyi +0 -1
  1141. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/__init__.pyi +0 -25
  1142. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/_exceptions.pyi +0 -19
  1143. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/handler.pyi +0 -55
  1144. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/saxutils.pyi +0 -60
  1145. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/xmlreader.pyi +0 -87
  1146. jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/__init__.pyi +0 -0
  1147. jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/client.pyi +0 -296
  1148. jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/server.pyi +0 -143
  1149. jaclang/vendor/mypy/typeshed/stdlib/xxlimited.pyi +0 -22
  1150. jaclang/vendor/mypy/typeshed/stdlib/zipapp.pyi +0 -20
  1151. jaclang/vendor/mypy/typeshed/stdlib/zipfile/__init__.pyi +0 -306
  1152. jaclang/vendor/mypy/typeshed/stdlib/zipfile/_path.pyi +0 -95
  1153. jaclang/vendor/mypy/typeshed/stdlib/zipimport.pyi +0 -32
  1154. jaclang/vendor/mypy/typeshed/stdlib/zlib.pyi +0 -56
  1155. jaclang/vendor/mypy/typeshed/stdlib/zoneinfo/__init__.pyi +0 -38
  1156. jaclang/vendor/mypy/typeshed/stubs/mypy-extensions/mypy_extensions.pyi +0 -218
  1157. jaclang/vendor/mypy/typestate.py +0 -323
  1158. jaclang/vendor/mypy/typetraverser.py +0 -148
  1159. jaclang/vendor/mypy/typevars.py +0 -93
  1160. jaclang/vendor/mypy/typevartuples.py +0 -32
  1161. jaclang/vendor/mypy/util.py +0 -869
  1162. jaclang/vendor/mypy/version.py +0 -1
  1163. jaclang/vendor/mypy/visitor.py +0 -621
  1164. jaclang/vendor/mypy/xml/mypy-html.css +0 -104
  1165. jaclang/vendor/mypy/xml/mypy-html.xslt +0 -81
  1166. jaclang/vendor/mypy/xml/mypy-txt.xslt +0 -100
  1167. jaclang/vendor/mypy/xml/mypy.xsd +0 -50
  1168. jaclang/vendor/mypy-1.10.0.dist-info/LICENSE +0 -229
  1169. jaclang/vendor/mypy-1.10.0.dist-info/METADATA +0 -48
  1170. jaclang/vendor/mypy-1.10.0.dist-info/RECORD +0 -1241
  1171. jaclang/vendor/mypy-1.10.0.dist-info/WHEEL +0 -6
  1172. jaclang/vendor/mypy-1.10.0.dist-info/entry_points.txt +0 -6
  1173. jaclang/vendor/mypy-1.10.0.dist-info/top_level.txt +0 -3
  1174. jaclang/vendor/mypy_extensions-1.0.0.dist-info/LICENSE +0 -27
  1175. jaclang/vendor/mypy_extensions-1.0.0.dist-info/METADATA +0 -29
  1176. jaclang/vendor/mypy_extensions-1.0.0.dist-info/RECORD +0 -6
  1177. jaclang/vendor/mypy_extensions-1.0.0.dist-info/top_level.txt +0 -1
  1178. jaclang/vendor/mypy_extensions.py +0 -213
  1179. jaclang/vendor/mypyc/README.md +0 -133
  1180. jaclang/vendor/mypyc/__init__.py +0 -0
  1181. jaclang/vendor/mypyc/__main__.py +0 -57
  1182. jaclang/vendor/mypyc/analysis/__init__.py +0 -0
  1183. jaclang/vendor/mypyc/analysis/attrdefined.py +0 -436
  1184. jaclang/vendor/mypyc/analysis/blockfreq.py +0 -32
  1185. jaclang/vendor/mypyc/analysis/dataflow.py +0 -628
  1186. jaclang/vendor/mypyc/analysis/ircheck.py +0 -433
  1187. jaclang/vendor/mypyc/analysis/selfleaks.py +0 -211
  1188. jaclang/vendor/mypyc/build.py +0 -616
  1189. jaclang/vendor/mypyc/codegen/__init__.py +0 -0
  1190. jaclang/vendor/mypyc/codegen/cstring.py +0 -54
  1191. jaclang/vendor/mypyc/codegen/emit.py +0 -1193
  1192. jaclang/vendor/mypyc/codegen/emitclass.py +0 -1060
  1193. jaclang/vendor/mypyc/codegen/emitfunc.py +0 -852
  1194. jaclang/vendor/mypyc/codegen/emitmodule.py +0 -1136
  1195. jaclang/vendor/mypyc/codegen/emitwrapper.py +0 -979
  1196. jaclang/vendor/mypyc/codegen/literals.py +0 -302
  1197. jaclang/vendor/mypyc/common.py +0 -136
  1198. jaclang/vendor/mypyc/crash.py +0 -31
  1199. jaclang/vendor/mypyc/doc/Makefile +0 -20
  1200. jaclang/vendor/mypyc/doc/bool_operations.rst +0 -27
  1201. jaclang/vendor/mypyc/doc/compilation_units.rst +0 -20
  1202. jaclang/vendor/mypyc/doc/conf.py +0 -59
  1203. jaclang/vendor/mypyc/doc/cpython-timings.md +0 -25
  1204. jaclang/vendor/mypyc/doc/dev-intro.md +0 -548
  1205. jaclang/vendor/mypyc/doc/dict_operations.rst +0 -59
  1206. jaclang/vendor/mypyc/doc/differences_from_python.rst +0 -332
  1207. jaclang/vendor/mypyc/doc/float_operations.rst +0 -50
  1208. jaclang/vendor/mypyc/doc/future.md +0 -42
  1209. jaclang/vendor/mypyc/doc/getting_started.rst +0 -240
  1210. jaclang/vendor/mypyc/doc/index.rst +0 -61
  1211. jaclang/vendor/mypyc/doc/int_operations.rst +0 -162
  1212. jaclang/vendor/mypyc/doc/introduction.rst +0 -150
  1213. jaclang/vendor/mypyc/doc/list_operations.rst +0 -65
  1214. jaclang/vendor/mypyc/doc/make.bat +0 -35
  1215. jaclang/vendor/mypyc/doc/native_classes.rst +0 -206
  1216. jaclang/vendor/mypyc/doc/native_operations.rst +0 -55
  1217. jaclang/vendor/mypyc/doc/performance_tips_and_tricks.rst +0 -244
  1218. jaclang/vendor/mypyc/doc/set_operations.rst +0 -47
  1219. jaclang/vendor/mypyc/doc/str_operations.rst +0 -35
  1220. jaclang/vendor/mypyc/doc/tuple_operations.rst +0 -33
  1221. jaclang/vendor/mypyc/doc/using_type_annotations.rst +0 -398
  1222. jaclang/vendor/mypyc/errors.py +0 -29
  1223. jaclang/vendor/mypyc/external/googletest/LICENSE +0 -28
  1224. jaclang/vendor/mypyc/external/googletest/README.md +0 -280
  1225. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-death-test.h +0 -294
  1226. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-message.h +0 -250
  1227. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h +0 -1444
  1228. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h.pump +0 -510
  1229. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-printers.h +0 -993
  1230. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-spi.h +0 -232
  1231. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-test-part.h +0 -179
  1232. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-typed-test.h +0 -263
  1233. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest.h +0 -2236
  1234. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_pred_impl.h +0 -358
  1235. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_prod.h +0 -58
  1236. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-port.h +0 -69
  1237. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-printers.h +0 -42
  1238. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest.h +0 -41
  1239. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-death-test-internal.h +0 -319
  1240. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-filepath.h +0 -206
  1241. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-internal.h +0 -1238
  1242. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-linked_ptr.h +0 -243
  1243. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h +0 -5146
  1244. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +0 -286
  1245. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util.h +0 -731
  1246. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port-arch.h +0 -93
  1247. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port.h +0 -2560
  1248. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-string.h +0 -167
  1249. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h +0 -1020
  1250. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h.pump +0 -347
  1251. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h +0 -3331
  1252. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h.pump +0 -297
  1253. jaclang/vendor/mypyc/external/googletest/make/Makefile +0 -61
  1254. jaclang/vendor/mypyc/external/googletest/src/gtest-all.cc +0 -48
  1255. jaclang/vendor/mypyc/external/googletest/src/gtest-death-test.cc +0 -1342
  1256. jaclang/vendor/mypyc/external/googletest/src/gtest-filepath.cc +0 -387
  1257. jaclang/vendor/mypyc/external/googletest/src/gtest-internal-inl.h +0 -1183
  1258. jaclang/vendor/mypyc/external/googletest/src/gtest-port.cc +0 -1259
  1259. jaclang/vendor/mypyc/external/googletest/src/gtest-printers.cc +0 -373
  1260. jaclang/vendor/mypyc/external/googletest/src/gtest-test-part.cc +0 -110
  1261. jaclang/vendor/mypyc/external/googletest/src/gtest-typed-test.cc +0 -118
  1262. jaclang/vendor/mypyc/external/googletest/src/gtest.cc +0 -5388
  1263. jaclang/vendor/mypyc/external/googletest/src/gtest_main.cc +0 -38
  1264. jaclang/vendor/mypyc/ir/__init__.py +0 -0
  1265. jaclang/vendor/mypyc/ir/class_ir.py +0 -499
  1266. jaclang/vendor/mypyc/ir/func_ir.py +0 -370
  1267. jaclang/vendor/mypyc/ir/module_ir.py +0 -88
  1268. jaclang/vendor/mypyc/ir/ops.py +0 -1727
  1269. jaclang/vendor/mypyc/ir/pprint.py +0 -516
  1270. jaclang/vendor/mypyc/ir/rtypes.py +0 -1038
  1271. jaclang/vendor/mypyc/irbuild/__init__.py +0 -0
  1272. jaclang/vendor/mypyc/irbuild/ast_helpers.py +0 -123
  1273. jaclang/vendor/mypyc/irbuild/builder.py +0 -1394
  1274. jaclang/vendor/mypyc/irbuild/callable_class.py +0 -173
  1275. jaclang/vendor/mypyc/irbuild/classdef.py +0 -850
  1276. jaclang/vendor/mypyc/irbuild/constant_fold.py +0 -95
  1277. jaclang/vendor/mypyc/irbuild/context.py +0 -186
  1278. jaclang/vendor/mypyc/irbuild/env_class.py +0 -223
  1279. jaclang/vendor/mypyc/irbuild/expression.py +0 -1070
  1280. jaclang/vendor/mypyc/irbuild/for_helpers.py +0 -1075
  1281. jaclang/vendor/mypyc/irbuild/format_str_tokenizer.py +0 -250
  1282. jaclang/vendor/mypyc/irbuild/function.py +0 -1088
  1283. jaclang/vendor/mypyc/irbuild/generator.py +0 -346
  1284. jaclang/vendor/mypyc/irbuild/ll_builder.py +0 -2389
  1285. jaclang/vendor/mypyc/irbuild/main.py +0 -153
  1286. jaclang/vendor/mypyc/irbuild/mapper.py +0 -221
  1287. jaclang/vendor/mypyc/irbuild/match.py +0 -355
  1288. jaclang/vendor/mypyc/irbuild/nonlocalcontrol.py +0 -197
  1289. jaclang/vendor/mypyc/irbuild/prebuildvisitor.py +0 -203
  1290. jaclang/vendor/mypyc/irbuild/prepare.py +0 -609
  1291. jaclang/vendor/mypyc/irbuild/specialize.py +0 -822
  1292. jaclang/vendor/mypyc/irbuild/statement.py +0 -1017
  1293. jaclang/vendor/mypyc/irbuild/targets.py +0 -57
  1294. jaclang/vendor/mypyc/irbuild/util.py +0 -189
  1295. jaclang/vendor/mypyc/irbuild/visitor.py +0 -401
  1296. jaclang/vendor/mypyc/irbuild/vtable.py +0 -82
  1297. jaclang/vendor/mypyc/lib-rt/CPy.h +0 -638
  1298. jaclang/vendor/mypyc/lib-rt/bytes_ops.c +0 -143
  1299. jaclang/vendor/mypyc/lib-rt/dict_ops.c +0 -446
  1300. jaclang/vendor/mypyc/lib-rt/exc_ops.c +0 -259
  1301. jaclang/vendor/mypyc/lib-rt/float_ops.c +0 -192
  1302. jaclang/vendor/mypyc/lib-rt/generic_ops.c +0 -64
  1303. jaclang/vendor/mypyc/lib-rt/getargs.c +0 -450
  1304. jaclang/vendor/mypyc/lib-rt/getargsfast.c +0 -569
  1305. jaclang/vendor/mypyc/lib-rt/init.c +0 -13
  1306. jaclang/vendor/mypyc/lib-rt/int_ops.c +0 -803
  1307. jaclang/vendor/mypyc/lib-rt/list_ops.c +0 -335
  1308. jaclang/vendor/mypyc/lib-rt/misc_ops.c +0 -942
  1309. jaclang/vendor/mypyc/lib-rt/module_shim.tmpl +0 -18
  1310. jaclang/vendor/mypyc/lib-rt/mypyc_util.h +0 -118
  1311. jaclang/vendor/mypyc/lib-rt/pythoncapi_compat.h +0 -497
  1312. jaclang/vendor/mypyc/lib-rt/pythonsupport.h +0 -533
  1313. jaclang/vendor/mypyc/lib-rt/set_ops.c +0 -17
  1314. jaclang/vendor/mypyc/lib-rt/setup.py +0 -70
  1315. jaclang/vendor/mypyc/lib-rt/str_ops.c +0 -241
  1316. jaclang/vendor/mypyc/lib-rt/test_capi.cc +0 -585
  1317. jaclang/vendor/mypyc/lib-rt/tuple_ops.c +0 -61
  1318. jaclang/vendor/mypyc/lower/__init__.py +0 -0
  1319. jaclang/vendor/mypyc/lower/int_ops.py +0 -113
  1320. jaclang/vendor/mypyc/lower/list_ops.py +0 -45
  1321. jaclang/vendor/mypyc/lower/misc_ops.py +0 -12
  1322. jaclang/vendor/mypyc/lower/registry.py +0 -26
  1323. jaclang/vendor/mypyc/namegen.py +0 -115
  1324. jaclang/vendor/mypyc/options.py +0 -32
  1325. jaclang/vendor/mypyc/primitives/__init__.py +0 -0
  1326. jaclang/vendor/mypyc/primitives/bytes_ops.py +0 -101
  1327. jaclang/vendor/mypyc/primitives/dict_ops.py +0 -325
  1328. jaclang/vendor/mypyc/primitives/exc_ops.py +0 -101
  1329. jaclang/vendor/mypyc/primitives/float_ops.py +0 -168
  1330. jaclang/vendor/mypyc/primitives/generic_ops.py +0 -384
  1331. jaclang/vendor/mypyc/primitives/int_ops.py +0 -303
  1332. jaclang/vendor/mypyc/primitives/list_ops.py +0 -310
  1333. jaclang/vendor/mypyc/primitives/misc_ops.py +0 -267
  1334. jaclang/vendor/mypyc/primitives/registry.py +0 -360
  1335. jaclang/vendor/mypyc/primitives/set_ops.py +0 -121
  1336. jaclang/vendor/mypyc/primitives/str_ops.py +0 -229
  1337. jaclang/vendor/mypyc/primitives/tuple_ops.py +0 -83
  1338. jaclang/vendor/mypyc/rt_subtype.py +0 -77
  1339. jaclang/vendor/mypyc/sametype.py +0 -83
  1340. jaclang/vendor/mypyc/subtype.py +0 -88
  1341. jaclang/vendor/mypyc/test/__init__.py +0 -0
  1342. jaclang/vendor/mypyc/test/config.py +0 -13
  1343. jaclang/vendor/mypyc/test/test_alwaysdefined.py +0 -46
  1344. jaclang/vendor/mypyc/test/test_analysis.py +0 -77
  1345. jaclang/vendor/mypyc/test/test_cheader.py +0 -53
  1346. jaclang/vendor/mypyc/test/test_commandline.py +0 -82
  1347. jaclang/vendor/mypyc/test/test_emit.py +0 -69
  1348. jaclang/vendor/mypyc/test/test_emitclass.py +0 -35
  1349. jaclang/vendor/mypyc/test/test_emitfunc.py +0 -928
  1350. jaclang/vendor/mypyc/test/test_emitwrapper.py +0 -60
  1351. jaclang/vendor/mypyc/test/test_exceptions.py +0 -56
  1352. jaclang/vendor/mypyc/test/test_external.py +0 -49
  1353. jaclang/vendor/mypyc/test/test_irbuild.py +0 -87
  1354. jaclang/vendor/mypyc/test/test_ircheck.py +0 -199
  1355. jaclang/vendor/mypyc/test/test_literals.py +0 -90
  1356. jaclang/vendor/mypyc/test/test_lowering.py +0 -56
  1357. jaclang/vendor/mypyc/test/test_namegen.py +0 -48
  1358. jaclang/vendor/mypyc/test/test_optimizations.py +0 -68
  1359. jaclang/vendor/mypyc/test/test_pprint.py +0 -42
  1360. jaclang/vendor/mypyc/test/test_rarray.py +0 -48
  1361. jaclang/vendor/mypyc/test/test_refcount.py +0 -59
  1362. jaclang/vendor/mypyc/test/test_run.py +0 -426
  1363. jaclang/vendor/mypyc/test/test_serialization.py +0 -108
  1364. jaclang/vendor/mypyc/test/test_struct.py +0 -112
  1365. jaclang/vendor/mypyc/test/test_tuplename.py +0 -33
  1366. jaclang/vendor/mypyc/test/test_typeops.py +0 -97
  1367. jaclang/vendor/mypyc/test/testutil.py +0 -283
  1368. jaclang/vendor/mypyc/test-data/alwaysdefined.test +0 -732
  1369. jaclang/vendor/mypyc/test-data/analysis.test +0 -470
  1370. jaclang/vendor/mypyc/test-data/commandline.test +0 -245
  1371. jaclang/vendor/mypyc/test-data/driver/driver.py +0 -48
  1372. jaclang/vendor/mypyc/test-data/exceptions-freq.test +0 -125
  1373. jaclang/vendor/mypyc/test-data/exceptions.test +0 -699
  1374. jaclang/vendor/mypyc/test-data/fixtures/ir.py +0 -373
  1375. jaclang/vendor/mypyc/test-data/fixtures/testutil.py +0 -103
  1376. jaclang/vendor/mypyc/test-data/fixtures/typing-full.pyi +0 -169
  1377. jaclang/vendor/mypyc/test-data/irbuild-any.test +0 -236
  1378. jaclang/vendor/mypyc/test-data/irbuild-basic.test +0 -3399
  1379. jaclang/vendor/mypyc/test-data/irbuild-bool.test +0 -424
  1380. jaclang/vendor/mypyc/test-data/irbuild-bytes.test +0 -181
  1381. jaclang/vendor/mypyc/test-data/irbuild-classes.test +0 -1302
  1382. jaclang/vendor/mypyc/test-data/irbuild-constant-fold.test +0 -480
  1383. jaclang/vendor/mypyc/test-data/irbuild-dict.test +0 -584
  1384. jaclang/vendor/mypyc/test-data/irbuild-dunders.test +0 -215
  1385. jaclang/vendor/mypyc/test-data/irbuild-float.test +0 -497
  1386. jaclang/vendor/mypyc/test-data/irbuild-generics.test +0 -150
  1387. jaclang/vendor/mypyc/test-data/irbuild-glue-methods.test +0 -437
  1388. jaclang/vendor/mypyc/test-data/irbuild-i16.test +0 -526
  1389. jaclang/vendor/mypyc/test-data/irbuild-i32.test +0 -598
  1390. jaclang/vendor/mypyc/test-data/irbuild-i64.test +0 -2144
  1391. jaclang/vendor/mypyc/test-data/irbuild-int.test +0 -194
  1392. jaclang/vendor/mypyc/test-data/irbuild-isinstance.test +0 -109
  1393. jaclang/vendor/mypyc/test-data/irbuild-lists.test +0 -513
  1394. jaclang/vendor/mypyc/test-data/irbuild-match.test +0 -1717
  1395. jaclang/vendor/mypyc/test-data/irbuild-math.test +0 -64
  1396. jaclang/vendor/mypyc/test-data/irbuild-nested.test +0 -807
  1397. jaclang/vendor/mypyc/test-data/irbuild-optional.test +0 -536
  1398. jaclang/vendor/mypyc/test-data/irbuild-set.test +0 -806
  1399. jaclang/vendor/mypyc/test-data/irbuild-singledispatch.test +0 -257
  1400. jaclang/vendor/mypyc/test-data/irbuild-statements.test +0 -1060
  1401. jaclang/vendor/mypyc/test-data/irbuild-str.test +0 -312
  1402. jaclang/vendor/mypyc/test-data/irbuild-strip-asserts.test +0 -12
  1403. jaclang/vendor/mypyc/test-data/irbuild-try.test +0 -523
  1404. jaclang/vendor/mypyc/test-data/irbuild-tuple.test +0 -386
  1405. jaclang/vendor/mypyc/test-data/irbuild-u8.test +0 -543
  1406. jaclang/vendor/mypyc/test-data/irbuild-unreachable.test +0 -241
  1407. jaclang/vendor/mypyc/test-data/irbuild-vectorcall.test +0 -153
  1408. jaclang/vendor/mypyc/test-data/lowering-int.test +0 -377
  1409. jaclang/vendor/mypyc/test-data/lowering-list.test +0 -33
  1410. jaclang/vendor/mypyc/test-data/opt-copy-propagation.test +0 -400
  1411. jaclang/vendor/mypyc/test-data/opt-flag-elimination.test +0 -296
  1412. jaclang/vendor/mypyc/test-data/refcount.test +0 -1482
  1413. jaclang/vendor/mypyc/test-data/run-async.test +0 -173
  1414. jaclang/vendor/mypyc/test-data/run-attrs.test +0 -318
  1415. jaclang/vendor/mypyc/test-data/run-bench.test +0 -196
  1416. jaclang/vendor/mypyc/test-data/run-bools.test +0 -229
  1417. jaclang/vendor/mypyc/test-data/run-bytes.test +0 -302
  1418. jaclang/vendor/mypyc/test-data/run-classes.test +0 -2505
  1419. jaclang/vendor/mypyc/test-data/run-dicts.test +0 -334
  1420. jaclang/vendor/mypyc/test-data/run-dunders.test +0 -945
  1421. jaclang/vendor/mypyc/test-data/run-exceptions.test +0 -448
  1422. jaclang/vendor/mypyc/test-data/run-floats.test +0 -516
  1423. jaclang/vendor/mypyc/test-data/run-functions.test +0 -1310
  1424. jaclang/vendor/mypyc/test-data/run-generators.test +0 -682
  1425. jaclang/vendor/mypyc/test-data/run-i16.test +0 -338
  1426. jaclang/vendor/mypyc/test-data/run-i32.test +0 -336
  1427. jaclang/vendor/mypyc/test-data/run-i64.test +0 -1519
  1428. jaclang/vendor/mypyc/test-data/run-imports.test +0 -265
  1429. jaclang/vendor/mypyc/test-data/run-integers.test +0 -540
  1430. jaclang/vendor/mypyc/test-data/run-lists.test +0 -411
  1431. jaclang/vendor/mypyc/test-data/run-loops.test +0 -485
  1432. jaclang/vendor/mypyc/test-data/run-match.test +0 -283
  1433. jaclang/vendor/mypyc/test-data/run-math.test +0 -106
  1434. jaclang/vendor/mypyc/test-data/run-misc.test +0 -1170
  1435. jaclang/vendor/mypyc/test-data/run-multimodule.test +0 -887
  1436. jaclang/vendor/mypyc/test-data/run-mypy-sim.test +0 -138
  1437. jaclang/vendor/mypyc/test-data/run-primitives.test +0 -375
  1438. jaclang/vendor/mypyc/test-data/run-python37.test +0 -159
  1439. jaclang/vendor/mypyc/test-data/run-python38.test +0 -88
  1440. jaclang/vendor/mypyc/test-data/run-sets.test +0 -150
  1441. jaclang/vendor/mypyc/test-data/run-singledispatch.test +0 -698
  1442. jaclang/vendor/mypyc/test-data/run-strings.test +0 -641
  1443. jaclang/vendor/mypyc/test-data/run-traits.test +0 -411
  1444. jaclang/vendor/mypyc/test-data/run-tuples.test +0 -258
  1445. jaclang/vendor/mypyc/test-data/run-u8.test +0 -303
  1446. jaclang/vendor/mypyc/transform/__init__.py +0 -0
  1447. jaclang/vendor/mypyc/transform/copy_propagation.py +0 -94
  1448. jaclang/vendor/mypyc/transform/exceptions.py +0 -182
  1449. jaclang/vendor/mypyc/transform/flag_elimination.py +0 -108
  1450. jaclang/vendor/mypyc/transform/ir_transform.py +0 -368
  1451. jaclang/vendor/mypyc/transform/lower.py +0 -33
  1452. jaclang/vendor/mypyc/transform/refcount.py +0 -294
  1453. jaclang/vendor/mypyc/transform/uninit.py +0 -190
  1454. jaclang/vendor/typing_extensions-4.12.2.dist-info/LICENSE +0 -279
  1455. jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA +0 -67
  1456. jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD +0 -5
  1457. jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL +0 -4
  1458. jaclang/vendor/typing_extensions.py +0 -3641
  1459. jaclang-0.7.33.dist-info/RECORD +0 -1562
  1460. /jaclang/{vendor/mypy/dmypy → compiler/larkparse}/__init__.py +0 -0
  1461. /jaclang/{tests → compiler/passes/main/tests}/fixtures/access_checker.jac +0 -0
  1462. /jaclang/{vendor/mypy/plugins/__init__.py → langserve/tests/fixtures/deep_check_crash.jac} +0 -0
  1463. /jaclang/{vendor/mypy/server/__init__.py → langserve/tests/server_test/code_test.py} +0 -0
  1464. /jaclang/{plugin → runtimelib}/tests/__init__.py +0 -0
  1465. /jaclang/{plugin → runtimelib}/tests/fixtures/traversing_save.jac +0 -0
  1466. /jaclang/{vendor/mypy/test → tests}/__init__.py +0 -0
  1467. /jaclang/{vendor/mypy/test/meta → tests/fixtures}/__init__.py +0 -0
  1468. /jaclang/tests/fixtures/{architype_def_bug.jac → archetype_def_bug.jac} +0 -0
  1469. /jaclang/vendor/{mypy/typeshed/stdlib/concurrent/__init__.pyi → attrs-25.3.0.dist-info/REQUESTED} +0 -0
  1470. /jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/licenses/LICENSE +0 -0
  1471. /jaclang/vendor/{mypy/typeshed/stdlib/distutils/command/__init__.pyi → cattrs-24.1.3.dist-info/REQUESTED} +0 -0
  1472. /jaclang/vendor/{cattrs-23.2.3.dist-info → cattrs-24.1.3.dist-info}/licenses/LICENSE +0 -0
  1473. /jaclang/vendor/{mypy/typeshed/stdlib/distutils/command/bdist_packager.pyi → lark-1.2.2.dist-info/REQUESTED} +0 -0
  1474. /jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/entry_points.txt +0 -0
  1475. /jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/top_level.txt +0 -0
  1476. /jaclang/vendor/{mypy/typeshed/stdlib/email/mime/__init__.pyi → lsprotocol-2023.0.1.dist-info/REQUESTED} +0 -0
  1477. /jaclang/vendor/lsprotocol-2023.0.1.dist-info/{LICENSE → licenses/LICENSE} +0 -0
  1478. /jaclang/vendor/{mypy/typeshed/stdlib/lib2to3/__init__.pyi → pluggy-1.5.0.dist-info/REQUESTED} +0 -0
  1479. /jaclang/vendor/pluggy-1.5.0.dist-info/{LICENSE → licenses/LICENSE} +0 -0
  1480. /jaclang/vendor/{mypy/typeshed/stdlib/lib2to3/fixes/__init__.pyi → pygls-1.3.1.dist-info/REQUESTED} +0 -0
  1481. {jaclang-0.7.33.dist-info → jaclang-0.8.0.dist-info}/entry_points.txt +0 -0
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import ast as ast3
6
6
  import builtins
7
7
  import os
8
+ from copy import copy
8
9
  from dataclasses import dataclass
9
10
  from hashlib import md5
10
11
  from types import EllipsisType
@@ -14,14 +15,13 @@ from typing import (
14
15
  Generic,
15
16
  Optional,
16
17
  Sequence,
17
- TYPE_CHECKING,
18
18
  Type,
19
19
  TypeVar,
20
20
  )
21
21
 
22
22
 
23
23
  from jaclang.compiler import TOKEN_MAP
24
- from jaclang.compiler.codeloc import CodeGenTarget, CodeLocInfo
24
+ from jaclang.compiler.codeinfo import CodeGenTarget, CodeLocInfo
25
25
  from jaclang.compiler.constant import (
26
26
  Constants as Con,
27
27
  EdgeDir,
@@ -30,70 +30,89 @@ from jaclang.compiler.constant import (
30
30
  SymbolType,
31
31
  )
32
32
  from jaclang.compiler.constant import DELIM_MAP, SymbolAccess, Tokens as Tok
33
- from jaclang.compiler.py_info import PyInfo
34
- from jaclang.compiler.semtable import SemRegistry
35
- from jaclang.utils.treeprinter import dotgen_ast_tree, print_ast_tree
36
-
37
- if TYPE_CHECKING:
38
- from jaclang.compiler.symtable import Symbol, SymbolTable
33
+ from jaclang.utils import resolve_relative_path
34
+ from jaclang.utils.treeprinter import (
35
+ dotgen_ast_tree,
36
+ dotgen_symtab_tree,
37
+ print_ast_tree,
38
+ print_symtab_tree,
39
+ )
39
40
 
40
41
 
41
- class AstNode:
42
+ class UniNode:
42
43
  """Abstract syntax tree node for Jac."""
43
44
 
44
- def __init__(self, kid: Sequence[AstNode]) -> None:
45
+ def __init__(self, kid: Sequence[UniNode]) -> None:
45
46
  """Initialize ast."""
46
- self.parent: Optional[AstNode] = None
47
- self.kid: list[AstNode] = [x.set_parent(self) for x in kid]
48
- self._sym_tab: Optional[SymbolTable] = None
49
- self._sub_node_tab: dict[type, list[AstNode]] = {}
50
- self._in_mod_nodes: list[AstNode] = []
47
+ self.parent: Optional[UniNode] = None
48
+ self.kid: list[UniNode] = [x.set_parent(self) for x in kid]
49
+ self._sub_node_tab: dict[type, list[UniNode]] = {}
50
+ self.construct_sub_node_tab()
51
+ self._in_mod_nodes: list[UniNode] = []
51
52
  self.gen: CodeGenTarget = CodeGenTarget()
52
- self.meta: dict[str, str] = {}
53
53
  self.loc: CodeLocInfo = CodeLocInfo(*self.resolve_tok_range())
54
54
 
55
+ def construct_sub_node_tab(self) -> None:
56
+ """Construct sub node table."""
57
+ for i in self.kid:
58
+ if not i:
59
+ continue
60
+ for k, v in i._sub_node_tab.items():
61
+ if k in self._sub_node_tab:
62
+ self._sub_node_tab[k].extend(v)
63
+ else:
64
+ self._sub_node_tab[k] = copy(v)
65
+ if type(i) in self._sub_node_tab:
66
+ self._sub_node_tab[type(i)].append(i)
67
+ else:
68
+ self._sub_node_tab[type(i)] = [i]
69
+
55
70
  @property
56
- def sym_tab(self) -> SymbolTable:
71
+ def sym_tab(self) -> UniScopeNode:
57
72
  """Get symbol table."""
58
- # sym_tab should never be accessed without being set in codebase
59
- if not self._sym_tab:
60
- raise ValueError(
61
- f"Symbol table not set for {type(self).__name__}. Impossible.\n"
62
- f"Node: {self.pp()}\n"
63
- f"Parent: {self.parent.pp() if self.parent else None}\n"
64
- )
65
- return self._sym_tab
66
-
67
- @sym_tab.setter
68
- def sym_tab(self, sym_tab: SymbolTable) -> None:
69
- """Set symbol table."""
70
- self._sym_tab = sym_tab
73
+ return (
74
+ self
75
+ if isinstance(self, UniScopeNode)
76
+ else self.parent_of_type(UniScopeNode)
77
+ )
71
78
 
72
79
  def add_kids_left(
73
- self, nodes: Sequence[AstNode], pos_update: bool = True
74
- ) -> AstNode:
80
+ self,
81
+ nodes: Sequence[UniNode],
82
+ pos_update: bool = True,
83
+ parent_update: bool = False,
84
+ ) -> UniNode:
75
85
  """Add kid left."""
76
86
  self.kid = [*nodes, *self.kid]
77
87
  if pos_update:
78
88
  for i in nodes:
79
89
  i.parent = self
80
90
  self.loc.update_first_token(self.kid[0].loc.first_tok)
91
+ elif parent_update:
92
+ for i in nodes:
93
+ i.parent = self
81
94
  return self
82
95
 
83
96
  def add_kids_right(
84
- self, nodes: Sequence[AstNode], pos_update: bool = True
85
- ) -> AstNode:
97
+ self,
98
+ nodes: Sequence[UniNode],
99
+ pos_update: bool = True,
100
+ parent_update: bool = False,
101
+ ) -> UniNode:
86
102
  """Add kid right."""
87
103
  self.kid = [*self.kid, *nodes]
88
104
  if pos_update:
89
105
  for i in nodes:
90
106
  i.parent = self
91
107
  self.loc.update_last_token(self.kid[-1].loc.last_tok)
108
+ elif parent_update:
109
+ for i in nodes:
110
+ i.parent = self
92
111
  return self
93
112
 
94
113
  def insert_kids_at_pos(
95
- self, nodes: Sequence[AstNode], pos: int, pos_update: bool = True
96
- ) -> AstNode:
114
+ self, nodes: Sequence[UniNode], pos: int, pos_update: bool = True
115
+ ) -> UniNode:
97
116
  """Insert kids at position."""
98
117
  self.kid = [*self.kid[:pos], *nodes, *self.kid[pos:]]
99
118
  if pos_update:
@@ -102,7 +121,7 @@ class AstNode:
102
121
  self.loc.update_token_range(*self.resolve_tok_range())
103
122
  return self
104
123
 
105
- def set_kids(self, nodes: Sequence[AstNode]) -> AstNode:
124
+ def set_kids(self, nodes: Sequence[UniNode]) -> UniNode:
106
125
  """Set kids."""
107
126
  self.kid = [*nodes]
108
127
  for i in nodes:
@@ -110,13 +129,12 @@ class AstNode:
110
129
  self.loc.update_token_range(*self.resolve_tok_range())
111
130
  return self
112
131
 
113
- def set_parent(self, parent: AstNode) -> AstNode:
132
+ def set_parent(self, parent: UniNode) -> UniNode:
114
133
  """Set parent."""
115
134
  self.parent = parent
116
135
  return self
117
136
 
118
137
  def resolve_tok_range(self) -> tuple[Token, Token]:
119
- """Get token range."""
120
138
  if len(self.kid):
121
139
  return (
122
140
  self.kid[0].loc.first_tok,
@@ -128,7 +146,6 @@ class AstNode:
128
146
  raise ValueError(f"Empty kid for Token {type(self).__name__}")
129
147
 
130
148
  def gen_token(self, name: Tok, value: Optional[str] = None) -> Token:
131
- """Generate token."""
132
149
  value = (
133
150
  value
134
151
  if value
@@ -152,29 +169,22 @@ class AstNode:
152
169
 
153
170
  def get_all_sub_nodes(self, typ: Type[T], brute_force: bool = True) -> list[T]:
154
171
  """Get all sub nodes of type."""
155
- from jaclang.compiler.passes import Pass
172
+ from jaclang.compiler.passes import UniPass
156
173
 
157
- return Pass.get_all_sub_nodes(node=self, typ=typ, brute_force=brute_force)
174
+ return UniPass.get_all_sub_nodes(node=self, typ=typ, brute_force=brute_force)
158
175
 
159
176
  def find_parent_of_type(self, typ: Type[T]) -> Optional[T]:
160
177
  """Get parent of type."""
161
- from jaclang.compiler.passes import Pass
178
+ from jaclang.compiler.passes import UniPass
162
179
 
163
- return Pass.find_parent_of_type(node=self, typ=typ)
180
+ return UniPass.find_parent_of_type(node=self, typ=typ)
164
181
 
165
182
  def parent_of_type(self, typ: Type[T]) -> T:
166
- """Get parent of type."""
167
183
  ret = self.find_parent_of_type(typ)
168
184
  if isinstance(ret, typ):
169
185
  return ret
170
186
  else:
171
- raise ValueError(f"Parent of type {typ} not found.")
172
-
173
- def format(self) -> str:
174
- """Get all sub nodes of type."""
175
- from jaclang.compiler.passes.tool import JacFormatPass
176
-
177
- return JacFormatPass(self, None).ir.gen.jac
187
+ raise ValueError(f"Parent of type {typ} not found from {type(self)}.")
178
188
 
179
189
  def to_dict(self) -> dict[str, str]:
180
190
  """Return dict representation of node."""
@@ -197,7 +207,7 @@ class AstNode:
197
207
  """Print ast."""
198
208
  return dotgen_ast_tree(self)
199
209
 
200
- def flatten(self) -> list[AstNode]:
210
+ def flatten(self) -> list[UniNode]:
201
211
  """Flatten ast."""
202
212
  ret = [self]
203
213
  for k in self.kid:
@@ -205,11 +215,9 @@ class AstNode:
205
215
  return ret
206
216
 
207
217
  def normalize(self, deep: bool = False) -> bool:
208
- """Normalize ast node."""
209
218
  return False
210
219
 
211
220
  def unparse(self) -> str:
212
- """Unparse ast node."""
213
221
  valid = self.normalize()
214
222
  res = " ".join([i.unparse() for i in self.kid])
215
223
  if not valid:
@@ -217,13 +225,325 @@ class AstNode:
217
225
  return res
218
226
 
219
227
 
220
- class AstSymbolNode(AstNode):
228
+ # Symbols can have mulitple definitions but resolves decl to be the
229
+ # first such definition in a given scope.
230
+ class Symbol:
231
+ """Symbol."""
232
+
233
+ def __init__(
234
+ self,
235
+ defn: NameAtom,
236
+ access: SymbolAccess,
237
+ parent_tab: UniScopeNode,
238
+ ) -> None:
239
+ """Initialize."""
240
+ self.defn: list[NameAtom] = [defn]
241
+ self.uses: list[NameAtom] = []
242
+ defn.sym = self
243
+ self.access: SymbolAccess = access
244
+ self.parent_tab = parent_tab
245
+
246
+ @property
247
+ def decl(self) -> NameAtom:
248
+ """Get decl."""
249
+ return self.defn[0]
250
+
251
+ @property
252
+ def sym_name(self) -> str:
253
+ """Get name."""
254
+ return self.decl.sym_name
255
+
256
+ @property
257
+ def sym_type(self) -> SymbolType:
258
+ """Get sym_type."""
259
+ return self.decl.sym_category
260
+
261
+ @property
262
+ def sym_dotted_name(self) -> str:
263
+ """Return a full path of the symbol."""
264
+ out = [self.defn[0].sym_name]
265
+ current_tab: UniScopeNode | None = self.parent_tab
266
+ while current_tab is not None:
267
+ out.append(current_tab.scope_name)
268
+ current_tab = current_tab.parent_scope
269
+ out.reverse()
270
+ return ".".join(out)
271
+
272
+ @property
273
+ def fetch_sym_tab(self) -> Optional[UniScopeNode]:
274
+ """Get symbol table."""
275
+ return self.parent_tab.find_scope(self.sym_name)
276
+
277
+ def add_defn(self, node: NameAtom) -> None:
278
+ """Add defn."""
279
+ self.defn.append(node)
280
+ node.sym = self
281
+
282
+ def add_use(self, node: NameAtom) -> None:
283
+ """Add use."""
284
+ self.uses.append(node)
285
+ node.sym = self
286
+
287
+ def __repr__(self) -> str:
288
+ """Repr."""
289
+ return f"Symbol({self.sym_name}, {self.sym_type}, {self.access}, {self.defn})"
290
+
291
+
292
+ class UniScopeNode(UniNode):
293
+ """Symbol Table."""
294
+
295
+ def __init__(
296
+ self,
297
+ name: str,
298
+ parent_scope: Optional[UniScopeNode] = None,
299
+ ) -> None:
300
+ """Initialize."""
301
+ self.scope_name = name
302
+ self.parent_scope = parent_scope
303
+ self.kid_scope: list[UniScopeNode] = []
304
+ self.names_in_scope: dict[str, Symbol] = {}
305
+ self.inherited_scope: list[InheritedSymbolTable] = []
306
+
307
+ def get_type(self) -> SymbolType:
308
+ """Get type."""
309
+ if isinstance(self, AstSymbolNode):
310
+ return self.sym_category
311
+ return SymbolType.VAR
312
+
313
+ def get_parent(self) -> Optional[UniScopeNode]:
314
+ """Get parent."""
315
+ return self.parent_scope
316
+
317
+ def lookup(self, name: str, deep: bool = True) -> Optional[Symbol]:
318
+ """Lookup a variable in the symbol table."""
319
+ if name in self.names_in_scope:
320
+ return self.names_in_scope[name]
321
+ for i in self.inherited_scope:
322
+ found = i.lookup(name, deep=False)
323
+ if found:
324
+ return found
325
+ if deep and self.parent_scope:
326
+ return self.parent_scope.lookup(name, deep)
327
+ return None
328
+
329
+ def insert(
330
+ self,
331
+ node: AstSymbolNode,
332
+ access_spec: Optional[AstAccessNode] | SymbolAccess = None,
333
+ single: bool = False,
334
+ force_overwrite: bool = False,
335
+ ) -> Optional[UniNode]:
336
+ """Set a variable in the symbol table.
337
+
338
+ Returns original symbol as collision if single check fails, none otherwise.
339
+ Also updates node.sym to create pointer to symbol.
340
+ """
341
+ collision = (
342
+ self.names_in_scope[node.sym_name].defn[-1]
343
+ if single and node.sym_name in self.names_in_scope
344
+ else None
345
+ )
346
+ if force_overwrite or node.sym_name not in self.names_in_scope:
347
+ self.names_in_scope[node.sym_name] = Symbol(
348
+ defn=node.name_spec,
349
+ access=(
350
+ access_spec
351
+ if isinstance(access_spec, SymbolAccess)
352
+ else access_spec.access_type if access_spec else SymbolAccess.PUBLIC
353
+ ),
354
+ parent_tab=self,
355
+ )
356
+ else:
357
+ self.names_in_scope[node.sym_name].add_defn(node.name_spec)
358
+ node.name_spec.sym = self.names_in_scope[node.sym_name]
359
+ return collision
360
+
361
+ def find_scope(self, name: str) -> Optional[UniScopeNode]:
362
+ """Find a scope in the symbol table."""
363
+ for k in self.kid_scope:
364
+ if k.scope_name == name:
365
+ return k
366
+ for k2 in self.inherited_scope:
367
+ if k2.base_symbol_table.scope_name == name:
368
+ return k2.base_symbol_table
369
+ return None
370
+
371
+ def link_kid_scope(self, key_node: UniScopeNode) -> UniScopeNode:
372
+ """Push a new scope onto the symbol table."""
373
+ key_node.parent_scope = self
374
+ self.kid_scope.append(key_node)
375
+ return self.kid_scope[-1]
376
+
377
+ def inherit_sym_tab(self, target_sym_tab: UniScopeNode) -> None:
378
+ """Inherit symbol table."""
379
+ for i in target_sym_tab.names_in_scope.values():
380
+ self.def_insert(i.decl, access_spec=i.access)
381
+
382
+ def def_insert(
383
+ self,
384
+ node: AstSymbolNode,
385
+ access_spec: Optional[AstAccessNode] | SymbolAccess = None,
386
+ single_decl: Optional[str] = None,
387
+ force_overwrite: bool = False,
388
+ ) -> Optional[Symbol]:
389
+ """Insert into symbol table."""
390
+ if node.sym and self == node.sym.parent_tab:
391
+ return node.sym
392
+ self.insert(
393
+ node=node,
394
+ single=single_decl is not None,
395
+ access_spec=access_spec,
396
+ force_overwrite=force_overwrite,
397
+ )
398
+ self.update_py_ctx_for_def(node)
399
+ return node.sym
400
+
401
+ def chain_def_insert(self, node_list: list[AstSymbolNode]) -> None:
402
+ """Link chain of containing names to symbol."""
403
+ if not node_list:
404
+ return
405
+ cur_sym_tab: UniScopeNode | None = node_list[0].sym_tab
406
+ node_list[-1].name_spec.py_ctx_func = ast3.Store
407
+ if isinstance(node_list[-1].name_spec, AstSymbolNode):
408
+ node_list[-1].name_spec.py_ctx_func = ast3.Store
409
+
410
+ node_list = node_list[:-1] # Just performs lookup mappings of pre assign chain
411
+ for i in node_list:
412
+ cur_sym_tab = (
413
+ lookup.decl.sym_tab
414
+ if (
415
+ lookup := self.use_lookup(
416
+ i,
417
+ sym_table=cur_sym_tab,
418
+ )
419
+ )
420
+ else None
421
+ )
422
+
423
+ def use_lookup(
424
+ self,
425
+ node: AstSymbolNode,
426
+ sym_table: Optional[UniScopeNode] = None,
427
+ ) -> Optional[Symbol]:
428
+ """Link to symbol."""
429
+ if node.sym:
430
+ return node.sym
431
+ if not sym_table:
432
+ sym_table = node.sym_tab
433
+ if sym_table:
434
+ lookup = sym_table.lookup(name=node.sym_name, deep=True)
435
+ lookup.add_use(node.name_spec) if lookup else None
436
+ return node.sym
437
+
438
+ def chain_use_lookup(self, node_list: Sequence[AstSymbolNode]) -> None:
439
+ """Link chain of containing names to symbol."""
440
+ if not node_list:
441
+ return
442
+ cur_sym_tab: UniScopeNode | None = node_list[0].sym_tab
443
+ for i in node_list:
444
+ if cur_sym_tab is None:
445
+ break
446
+ lookup = self.use_lookup(i, sym_table=cur_sym_tab)
447
+ if lookup:
448
+ cur_sym_tab = lookup.decl.sym_tab
449
+
450
+ # check if the symbol table name is not the same as symbol name
451
+ # then try to find a child scope with the same name
452
+ # This is used to get the scope in case of
453
+ # import math;
454
+ # b = math.floor(1.7);
455
+ if cur_sym_tab.scope_name != i.sym_name:
456
+ t = cur_sym_tab.find_scope(i.sym_name)
457
+ if t:
458
+ cur_sym_tab = t
459
+ else:
460
+ cur_sym_tab = None
461
+
462
+ def update_py_ctx_for_def(self, node: AstSymbolNode) -> None:
463
+ """Update python context for definition."""
464
+ node.name_spec.py_ctx_func = ast3.Store
465
+ if isinstance(node, (TupleVal, ListVal)) and node.values:
466
+ # Handling of UnaryExpr case for item is only necessary for
467
+ # the generation of Starred nodes in the AST for examples
468
+ # like `(a, *b) = (1, 2, 3, 4)`.
469
+ def fix(item: TupleVal | ListVal | UnaryExpr) -> None:
470
+ if isinstance(item, UnaryExpr):
471
+ if isinstance(item.operand, AstSymbolNode):
472
+ item.operand.name_spec.py_ctx_func = ast3.Store
473
+ elif isinstance(item, (TupleVal, ListVal)):
474
+ for i in item.values.items if item.values else []:
475
+ if isinstance(i, AstSymbolNode):
476
+ i.name_spec.py_ctx_func = ast3.Store
477
+ elif isinstance(i, AtomTrailer):
478
+ self.chain_def_insert(i.as_attr_list)
479
+ if isinstance(i, (TupleVal, ListVal, UnaryExpr)):
480
+ fix(i)
481
+
482
+ fix(node)
483
+
484
+ def inherit_baseclasses_sym(self, node: Archetype | Enum) -> None:
485
+ """Inherit base classes symbol tables."""
486
+ if node.base_classes:
487
+ for base_cls in node.base_classes.items:
488
+ if (
489
+ isinstance(base_cls, AstSymbolNode)
490
+ and (found := self.use_lookup(base_cls))
491
+ and found
492
+ ):
493
+ found_tab = found.decl.sym_tab
494
+ inher_sym_tab = InheritedSymbolTable(
495
+ base_symbol_table=found_tab, load_all_symbols=True, symbols=[]
496
+ )
497
+ self.inherited_scope.append(inher_sym_tab)
498
+ base_cls.name_spec.name_of = found.decl.name_of
499
+
500
+ def sym_pp(self, depth: Optional[int] = None) -> str:
501
+ """Pretty print."""
502
+ return print_symtab_tree(root=self, depth=depth)
503
+
504
+ def sym_dotgen(self) -> str:
505
+ """Generate dot graph for sym table."""
506
+ return dotgen_symtab_tree(self)
507
+
508
+ def __repr__(self) -> str:
509
+ """Repr."""
510
+ out = f"{self.scope_name} {super().__repr__()}:\n"
511
+ for k, v in self.names_in_scope.items():
512
+ out += f" {k}: {v}\n"
513
+ return out
514
+
515
+
516
+ class InheritedSymbolTable:
517
+ """Inherited symbol table."""
518
+
519
+ def __init__(
520
+ self,
521
+ base_symbol_table: UniScopeNode,
522
+ load_all_symbols: bool = False, # This is needed for python imports
523
+ symbols: Optional[list[str]] = None,
524
+ ) -> None:
525
+ """Initialize."""
526
+ self.base_symbol_table: UniScopeNode = base_symbol_table
527
+ self.load_all_symbols: bool = load_all_symbols
528
+ self.symbols: list[str] = symbols if symbols else []
529
+
530
+ def lookup(self, name: str, deep: bool = False) -> Optional[Symbol]:
531
+ """Lookup a variable in the symbol table."""
532
+ if self.load_all_symbols:
533
+ return self.base_symbol_table.lookup(name, deep)
534
+ else:
535
+ if name in self.symbols:
536
+ return self.base_symbol_table.lookup(name, deep)
537
+ else:
538
+ return None
539
+
540
+
541
+ class AstSymbolNode(UniNode):
221
542
  """Nodes that have link to a symbol in symbol table."""
222
543
 
223
544
  def __init__(
224
545
  self, sym_name: str, name_spec: NameAtom, sym_category: SymbolType
225
546
  ) -> None:
226
- """Initialize ast."""
227
547
  self.name_spec = name_spec
228
548
  self.name_spec.name_of = self
229
549
  self.name_spec._sym_name = sym_name
@@ -231,31 +551,26 @@ class AstSymbolNode(AstNode):
231
551
 
232
552
  @property
233
553
  def sym(self) -> Optional[Symbol]:
234
- """Get symbol."""
235
554
  return self.name_spec.sym
236
555
 
237
556
  @property
238
557
  def sym_name(self) -> str:
239
- """Get symbol name."""
240
558
  return self.name_spec.sym_name
241
559
 
242
560
  @property
243
561
  def sym_category(self) -> SymbolType:
244
- """Get symbol category."""
245
562
  return self.name_spec.sym_category
246
563
 
247
564
  @property
248
565
  def py_ctx_func(self) -> Type[ast3.AST]:
249
- """Get python context function."""
250
566
  return self.name_spec.py_ctx_func
251
567
 
252
568
  @property
253
569
  def expr_type(self) -> str:
254
- """Get symbol type."""
255
570
  return self.name_spec.expr_type
256
571
 
257
572
  @property
258
- def type_sym_tab(self) -> Optional[SymbolTable]:
573
+ def type_sym_tab(self) -> Optional[UniScopeNode]:
259
574
  """Get type symbol table."""
260
575
  return self.name_spec.type_sym_tab
261
576
 
@@ -264,7 +579,6 @@ class AstSymbolStubNode(AstSymbolNode):
264
579
  """Nodes that have link to a symbol in symbol table."""
265
580
 
266
581
  def __init__(self, sym_type: SymbolType) -> None:
267
- """Initialize ast."""
268
582
  AstSymbolNode.__init__(
269
583
  self,
270
584
  sym_name=f"[{self.__class__.__name__}]",
@@ -273,16 +587,14 @@ class AstSymbolStubNode(AstSymbolNode):
273
587
  )
274
588
 
275
589
 
276
- class AstAccessNode(AstNode):
590
+ class AstAccessNode(UniNode):
277
591
  """Nodes that have access."""
278
592
 
279
593
  def __init__(self, access: Optional[SubTag[Token]]) -> None:
280
- """Initialize ast."""
281
594
  self.access: Optional[SubTag[Token]] = access
282
595
 
283
596
  @property
284
597
  def access_type(self) -> SymbolAccess:
285
- """Get access spec."""
286
598
  return (
287
599
  SymbolAccess.PRIVATE
288
600
  if self.access and self.access.tag.name == Tok.KW_PRIV
@@ -294,85 +606,130 @@ class AstAccessNode(AstNode):
294
606
  )
295
607
 
296
608
 
297
- T = TypeVar("T", bound=AstNode)
609
+ T = TypeVar("T", bound=UniNode)
298
610
 
299
611
 
300
- class AstDocNode(AstNode):
612
+ class AstDocNode(UniNode):
301
613
  """Nodes that have access."""
302
614
 
303
615
  def __init__(self, doc: Optional[String]) -> None:
304
- """Initialize ast."""
305
616
  self.doc: Optional[String] = doc
306
617
 
307
618
 
308
- class AstSemStrNode(AstNode):
309
- """Nodes that have access."""
310
-
311
- def __init__(self, semstr: Optional[String]) -> None:
312
- """Initialize ast."""
313
- self.semstr: Optional[String] = semstr
314
-
315
-
316
- class AstAsyncNode(AstNode):
619
+ class AstAsyncNode(UniNode):
317
620
  """Nodes that have access."""
318
621
 
319
622
  def __init__(self, is_async: bool) -> None:
320
- """Initialize ast."""
321
623
  self.is_async: bool = is_async
322
624
 
323
625
 
324
- class AstElseBodyNode(AstNode):
626
+ class AstElseBodyNode(UniNode):
325
627
  """Nodes that have access."""
326
628
 
327
629
  def __init__(self, else_body: Optional[ElseStmt | ElseIf]) -> None:
328
- """Initialize ast."""
329
630
  self.else_body: Optional[ElseStmt | ElseIf] = else_body
330
631
 
331
632
 
332
- class AstTypedVarNode(AstNode):
633
+ class AstTypedVarNode(UniNode):
333
634
  """Nodes that have access."""
334
635
 
335
636
  def __init__(self, type_tag: Optional[SubTag[Expr]]) -> None:
336
- """Initialize ast."""
337
637
  self.type_tag: Optional[SubTag[Expr]] = type_tag
338
638
 
339
639
 
340
- class WalkerStmtOnlyNode(AstNode):
640
+ class WalkerStmtOnlyNode(UniNode):
341
641
  """WalkerStmtOnlyNode node type for Jac Ast."""
342
642
 
343
643
  def __init__(self) -> None:
344
- """Initialize walker statement only node."""
345
644
  self.from_walker: bool = False
346
645
 
347
646
 
348
- class Expr(AstNode):
349
- """Expr node type for Jac Ast."""
647
+ class UniCFGNode(UniNode):
648
+ """BasicBlockStmt node type for Jac Uniir."""
649
+
650
+ def __init__(self) -> None:
651
+ """Initialize basic block statement node."""
652
+ self.bb_in: list[UniCFGNode] = []
653
+ self.bb_out: list[UniCFGNode] = []
654
+
655
+ def get_head(self) -> UniCFGNode:
656
+ """Get head by walking up the CFG iteratively."""
657
+ node = self
658
+ while (
659
+ node.bb_in
660
+ and len(node.bb_in) == 1
661
+ and not isinstance(node.bb_in[0], (InForStmt, IterForStmt, WhileStmt))
662
+ and node.bb_in[0].bb_out
663
+ and len(node.bb_in[0].bb_out) == 1
664
+ ):
665
+ node = node.bb_in[0]
666
+ return node
667
+
668
+ def get_tail(self) -> UniCFGNode:
669
+ """Get tail by walking down the CFG iteratively."""
670
+ node = self
671
+ while (
672
+ node.bb_out
673
+ and len(node.bb_out) == 1
674
+ and not isinstance(node.bb_out[0], (InForStmt, IterForStmt, WhileStmt))
675
+ and node.bb_out[0].bb_in
676
+ and len(node.bb_out[0].bb_in) == 1
677
+ ):
678
+ node = node.bb_out[0]
679
+ return node
680
+
681
+
682
+ class Expr(UniNode):
683
+ """Expression is a combination of values, variables operators and fuctions that are evaluated to produce a value.
684
+
685
+ 1. Literal Expressions.
686
+ 2. Binary Operations.
687
+ 3. Unary Operations.
688
+ 4. Ternary Operations.
689
+ 5. Attribute Access.
690
+ 6. Subscript.
691
+ 7. Call Expression.
692
+ 8. List Value.
693
+ 9. Dictionary Value.
694
+ 10. Set Value.
695
+ 11. Generator Expression.
696
+ 12. Lambda Expression.
697
+ 13. Conditional Expression.
698
+ 14. Yield Expression.
699
+ etc.
700
+
701
+ An expression can be assigned to a variable, passed to a function, or
702
+ retuurend from a function.
703
+
704
+ Examples:
705
+ "hello world" # literal.
706
+ <expr>(<expr>, ...); # call.
707
+ <expr>.NAME # attribute.
708
+ <expr>[<expr>] # subscript.
709
+ <expr> if <expr> else <expr> # ternary.
710
+ """
350
711
 
351
- def __init__(self, type_src: Optional[Expr] = None) -> None:
352
- """Initialize expression node."""
353
- self.type_src = type_src or self # Only used for ArchRef
712
+ def __init__(self) -> None:
354
713
  self._sym_type: str = "NoType"
355
- self._type_sym_tab: Optional[SymbolTable] = None
714
+ self._type_sym_tab: Optional[UniScopeNode] = None
356
715
 
357
716
  @property
358
717
  def expr_type(self) -> str:
359
- """Get symbol type."""
360
- return self.type_src._sym_type
718
+ return self._sym_type
361
719
 
362
720
  @expr_type.setter
363
721
  def expr_type(self, sym_type: str) -> None:
364
- """Set symbol type."""
365
- self.type_src._sym_type = sym_type
722
+ self._sym_type = sym_type
366
723
 
367
724
  @property
368
- def type_sym_tab(self) -> Optional[SymbolTable]:
725
+ def type_sym_tab(self) -> Optional[UniScopeNode]:
369
726
  """Get type symbol table."""
370
- return self.type_src._type_sym_tab
727
+ return self._type_sym_tab
371
728
 
372
729
  @type_sym_tab.setter
373
- def type_sym_tab(self, type_sym_tab: SymbolTable) -> None:
730
+ def type_sym_tab(self, type_sym_tab: UniScopeNode) -> None:
374
731
  """Set type symbol table."""
375
- self.type_src._type_sym_tab = type_sym_tab
732
+ self._type_sym_tab = type_sym_tab
376
733
 
377
734
 
378
735
  class AtomExpr(Expr, AstSymbolStubNode):
@@ -383,81 +740,37 @@ class ElementStmt(AstDocNode):
383
740
  """ElementStmt node type for Jac Ast."""
384
741
 
385
742
 
386
- class ArchBlockStmt(AstNode):
743
+ class ArchBlockStmt(UniNode):
387
744
  """ArchBlockStmt node type for Jac Ast."""
388
745
 
389
746
 
390
- class EnumBlockStmt(AstNode):
747
+ class EnumBlockStmt(UniNode):
391
748
  """EnumBlockStmt node type for Jac Ast."""
392
749
 
393
750
 
394
- class CodeBlockStmt(AstNode):
751
+ class CodeBlockStmt(UniCFGNode):
395
752
  """CodeBlockStmt node type for Jac Ast."""
396
753
 
397
-
398
- class AstImplOnlyNode(CodeBlockStmt, ElementStmt, AstSymbolNode):
399
- """ImplOnly node type for Jac Ast."""
400
-
401
- def __init__(
402
- self, target: ArchRefChain, body: SubNodeList, decl_link: Optional[AstNode]
403
- ) -> None:
404
- """Initialize impl only node."""
405
- self.target = target
406
- self.body = body
407
- self.decl_link = decl_link
408
- AstSymbolNode.__init__(
409
- self,
410
- sym_name=self.target.py_resolve_name(),
411
- name_spec=self.create_impl_name_node(),
412
- sym_category=SymbolType.IMPL,
413
- )
414
-
415
- @property
416
- def sym_tab(self) -> SymbolTable:
417
- """Get symbol table."""
418
- return super().sym_tab
419
-
420
- @sym_tab.setter
421
- def sym_tab(self, sym_tab: SymbolTable) -> None:
422
- """Set symbol table."""
423
- self._sym_tab = sym_tab
424
- self.name_spec._sym_tab = sym_tab
425
-
426
- def create_impl_name_node(self) -> Name:
427
- """Create impl name."""
428
- ret = Name(
429
- orig_src=self.target.archs[-1].loc.orig_src,
430
- name=Tok.NAME.value,
431
- value=self.target.py_resolve_name(),
432
- col_start=self.target.archs[0].loc.col_start,
433
- col_end=self.target.archs[-1].loc.col_end,
434
- line=self.target.archs[0].loc.first_line,
435
- end_line=self.target.archs[-1].loc.last_line,
436
- pos_start=self.target.archs[0].loc.pos_start,
437
- pos_end=self.target.archs[-1].loc.pos_end,
438
- )
439
- ret.name_of = self
440
- return ret
754
+ def __init__(self) -> None:
755
+ """Initialize code block statement node."""
756
+ UniCFGNode.__init__(self)
441
757
 
442
758
 
443
759
  class AstImplNeedingNode(AstSymbolNode, Generic[T]):
444
- """Impl needing node type for Jac Ast."""
760
+ """AstImplNeedingNode node type for Jac Ast."""
445
761
 
446
762
  def __init__(self, body: Optional[T]) -> None:
447
- """Initialize impl needing node."""
448
763
  self.body = body
449
764
 
450
765
  @property
451
766
  def needs_impl(self) -> bool:
452
- """Need impl."""
453
767
  return self.body is None
454
768
 
455
769
 
456
770
  class NameAtom(AtomExpr, EnumBlockStmt):
457
- """NameSpec node type for Jac Ast."""
771
+ """NameAtom node type for Jac Ast."""
458
772
 
459
773
  def __init__(self) -> None:
460
- """Initialize name spec node."""
461
774
  self.name_of: AstSymbolNode = self
462
775
  self._sym: Optional[Symbol] = None
463
776
  self._sym_name: str = ""
@@ -467,27 +780,22 @@ class NameAtom(AtomExpr, EnumBlockStmt):
467
780
 
468
781
  @property
469
782
  def sym(self) -> Optional[Symbol]:
470
- """Get symbol."""
471
783
  return self._sym
472
784
 
473
785
  @sym.setter
474
786
  def sym(self, sym: Symbol) -> None:
475
- """Set symbol."""
476
787
  self._sym = sym
477
788
 
478
789
  @property
479
790
  def sym_name(self) -> str:
480
- """Get symbol name."""
481
791
  return self._sym_name
482
792
 
483
793
  @property
484
794
  def sym_category(self) -> SymbolType:
485
- """Get symbol category."""
486
795
  return self._sym_category
487
796
 
488
797
  @property
489
798
  def clean_type(self) -> str:
490
- """Get clean type."""
491
799
  ret_type = self.expr_type.replace("builtins.", "").replace("NoType", "")
492
800
  return ret_type
493
801
 
@@ -513,7 +821,7 @@ class NameAtom(AtomExpr, EnumBlockStmt):
513
821
  )
514
822
  if isinstance(name_of, ModulePath):
515
823
  return SemTokType.NAMESPACE, SemTokMod.DEFINITION
516
- if isinstance(name_of, Architype):
824
+ if isinstance(name_of, Archetype):
517
825
  return SemTokType.CLASS, SemTokMod.DECLARATION
518
826
  if isinstance(name_of, Enum):
519
827
  return SemTokType.ENUM, SemTokMod.DECLARATION
@@ -537,32 +845,33 @@ class NameAtom(AtomExpr, EnumBlockStmt):
537
845
  return None
538
846
 
539
847
 
540
- class ArchSpec(ElementStmt, CodeBlockStmt, AstSymbolNode, AstDocNode, AstSemStrNode):
848
+ class ArchSpec(ElementStmt, CodeBlockStmt, AstSymbolNode, AstDocNode):
541
849
  """ArchSpec node type for Jac Ast."""
542
850
 
543
- def __init__(self, decorators: Optional[SubNodeList[Expr]] = None) -> None:
544
- """Initialize walker statement only node."""
851
+ def __init__(
852
+ self, decorators: Optional[SubNodeList[Expr]] = None, is_async: bool = False
853
+ ) -> None:
545
854
  self.decorators = decorators
855
+ self.is_async = is_async
856
+ CodeBlockStmt.__init__(self)
546
857
 
547
858
 
548
- class MatchPattern(AstNode):
859
+ class MatchPattern(UniNode):
549
860
  """MatchPattern node type for Jac Ast."""
550
861
 
551
862
 
552
- class SubTag(AstNode, Generic[T]):
863
+ class SubTag(UniNode, Generic[T]):
553
864
  """SubTag node type for Jac Ast."""
554
865
 
555
866
  def __init__(
556
867
  self,
557
868
  tag: T,
558
- kid: Sequence[AstNode],
869
+ kid: Sequence[UniNode],
559
870
  ) -> None:
560
- """Initialize tag node."""
561
- self.tag = tag
562
- AstNode.__init__(self, kid=kid)
871
+ self.tag: T = tag
872
+ UniNode.__init__(self, kid=kid)
563
873
 
564
874
  def normalize(self, deep: bool = False) -> bool:
565
- """Normalize sub tag node."""
566
875
  res = self.tag.normalize() if deep else True
567
876
  self.set_kids(nodes=[self.gen_token(Tok.COLON), self.tag])
568
877
  return res
@@ -572,31 +881,29 @@ class SubTag(AstNode, Generic[T]):
572
881
  # parser's implementation. We basically need to maintain tokens
573
882
  # of mixed type in the kid list of the subnodelist as well as
574
883
  # separating out typed items of interest in the ast node class body.
575
- class SubNodeList(AstNode, Generic[T]):
884
+ class SubNodeList(UniNode, Generic[T]):
576
885
  """SubNodeList node type for Jac Ast."""
577
886
 
578
887
  def __init__(
579
888
  self,
580
889
  items: list[T],
581
890
  delim: Optional[Tok],
582
- kid: Sequence[AstNode],
891
+ kid: Sequence[UniNode],
583
892
  left_enc: Optional[Token] = None,
584
893
  right_enc: Optional[Token] = None,
585
894
  ) -> None:
586
- """Initialize sub node list node."""
587
- self.items = items
895
+ self.items: list[T] = items
588
896
  self.delim = delim
589
897
  self.left_enc = left_enc
590
898
  self.right_enc = right_enc
591
- AstNode.__init__(self, kid=kid)
899
+ UniNode.__init__(self, kid=kid)
592
900
 
593
901
  def normalize(self, deep: bool = False) -> bool:
594
- """Normalize sub node list node."""
595
902
  res = True
596
903
  if deep:
597
904
  for i in self.items:
598
905
  res = res and i.normalize()
599
- new_kid: list[AstNode] = []
906
+ new_kid: list[UniNode] = []
600
907
  if self.left_enc:
601
908
  new_kid.append(self.left_enc)
602
909
  for i in self.items:
@@ -613,36 +920,31 @@ class SubNodeList(AstNode, Generic[T]):
613
920
 
614
921
  # AST Mid Level Node Types
615
922
  # --------------------------
616
- class Module(AstDocNode):
923
+ class Module(AstDocNode, UniScopeNode):
617
924
  """Whole Program node type for Jac Ast."""
618
925
 
619
926
  def __init__(
620
927
  self,
621
928
  name: str,
622
- source: JacSource,
929
+ source: Source,
623
930
  doc: Optional[String],
624
931
  body: Sequence[ElementStmt | String | EmptyToken],
625
- is_imported: bool,
626
932
  terminals: list[Token],
627
- kid: Sequence[AstNode],
933
+ kid: Sequence[UniNode],
628
934
  stub_only: bool = False,
629
- registry: Optional[SemRegistry] = None,
630
935
  ) -> None:
631
- """Initialize whole program node."""
632
936
  self.name = name
633
937
  self.source = source
634
938
  self.body = body
635
- self.is_imported = is_imported
636
939
  self.stub_only = stub_only
637
940
  self.impl_mod: list[Module] = []
638
941
  self.test_mod: list[Module] = []
639
- self.mod_deps: dict[str, Module] = {}
640
- self.registry = registry
641
- self.terminals: list[Token] = terminals
642
- self.py_info: PyInfo = PyInfo()
942
+ self.src_terminals: list[Token] = terminals
943
+ self.is_raised_from_py: bool = False
643
944
 
644
- AstNode.__init__(self, kid=kid)
945
+ UniNode.__init__(self, kid=kid)
645
946
  AstDocNode.__init__(self, doc=doc)
947
+ UniScopeNode.__init__(self, name=self.name)
646
948
 
647
949
  @property
648
950
  def annexable_by(self) -> Optional[str]:
@@ -675,30 +977,56 @@ class Module(AstDocNode):
675
977
  return None
676
978
 
677
979
  def normalize(self, deep: bool = False) -> bool:
678
- """Normalize module node."""
679
980
  res = True
680
981
  if deep:
681
982
  res = self.doc.normalize() if self.doc else True
682
983
  for i in self.body:
683
984
  res = res and i.normalize()
684
- new_kid: list[AstNode] = []
985
+ new_kid: list[UniNode] = []
685
986
  if self.doc:
686
987
  new_kid.append(self.doc)
687
988
  new_kid.extend(self.body)
688
989
  self.set_kids(nodes=new_kid if len(new_kid) else [EmptyToken()])
689
990
  return res
690
991
 
992
+ def format(self) -> str:
993
+ """Get all sub nodes of type."""
994
+ from jaclang.compiler.passes.tool import DocIRGenPass, JacFormatPass
995
+ from jaclang.compiler.program import JacProgram
996
+
997
+ return JacFormatPass(
998
+ ir_in=DocIRGenPass(
999
+ ir_in=self,
1000
+ prog=JacProgram(),
1001
+ ).ir_out,
1002
+ prog=JacProgram(),
1003
+ ).ir_out.gen.jac
1004
+
691
1005
  def unparse(self) -> str:
692
- """Unparse module node."""
693
1006
  super().unparse()
694
1007
  return self.format()
695
1008
 
696
1009
  @staticmethod
697
- def get_href_path(node: AstNode) -> str:
1010
+ def make_stub(
1011
+ inject_name: Optional[str] = None, inject_src: Optional[Source] = None
1012
+ ) -> Module:
1013
+ """Create a stub module."""
1014
+ return Module(
1015
+ name=inject_name or "",
1016
+ source=inject_src or Source("", ""),
1017
+ doc=None,
1018
+ body=[],
1019
+ terminals=[],
1020
+ stub_only=True,
1021
+ kid=[EmptyToken()],
1022
+ )
1023
+
1024
+ @staticmethod
1025
+ def get_href_path(node: UniNode) -> str:
698
1026
  """Return the full path of the module that contains this node."""
699
1027
  parent = node.find_parent_of_type(Module)
700
- mod_list: list[Module | Architype] = []
701
- if isinstance(node, (Module, Architype)):
1028
+ mod_list: list[Module | Archetype] = []
1029
+ if isinstance(node, (Module, Archetype)):
702
1030
  mod_list.append(node)
703
1031
  while parent is not None:
704
1032
  mod_list.append(parent)
@@ -709,6 +1037,16 @@ class Module(AstDocNode):
709
1037
  )
710
1038
 
711
1039
 
1040
+ class ProgramModule(UniNode):
1041
+ """Whole Program node type for Jac Ast."""
1042
+
1043
+ def __init__(self, main_mod: Optional[Module] = None) -> None:
1044
+ """Initialize whole program node."""
1045
+ self.main = main_mod if main_mod else Module.make_stub()
1046
+ UniNode.__init__(self, kid=[self.main])
1047
+ self.hub: dict[str, Module] = {self.loc.mod_path: main_mod} if main_mod else {}
1048
+
1049
+
712
1050
  class GlobalVars(ElementStmt, AstAccessNode):
713
1051
  """GlobalVars node type for Jac Ast."""
714
1052
 
@@ -717,24 +1055,22 @@ class GlobalVars(ElementStmt, AstAccessNode):
717
1055
  access: Optional[SubTag[Token]],
718
1056
  assignments: SubNodeList[Assignment],
719
1057
  is_frozen: bool,
720
- kid: Sequence[AstNode],
1058
+ kid: Sequence[UniNode],
721
1059
  doc: Optional[String] = None,
722
1060
  ) -> None:
723
- """Initialize global var node."""
724
1061
  self.assignments = assignments
725
1062
  self.is_frozen = is_frozen
726
- AstNode.__init__(self, kid=kid)
1063
+ UniNode.__init__(self, kid=kid)
727
1064
  AstAccessNode.__init__(self, access=access)
728
1065
  AstDocNode.__init__(self, doc=doc)
729
1066
 
730
1067
  def normalize(self, deep: bool = False) -> bool:
731
- """Normalize global var node."""
732
1068
  res = True
733
1069
  if deep:
734
1070
  res = self.access.normalize(deep) if self.access else True
735
1071
  res = res and self.assignments.normalize(deep)
736
1072
  res = res and self.doc.normalize(deep) if self.doc else res
737
- new_kid: list[AstNode] = []
1073
+ new_kid: list[UniNode] = []
738
1074
  if self.doc:
739
1075
  new_kid.append(self.doc)
740
1076
  if self.is_frozen:
@@ -748,7 +1084,7 @@ class GlobalVars(ElementStmt, AstAccessNode):
748
1084
  return res
749
1085
 
750
1086
 
751
- class Test(AstSymbolNode, ElementStmt):
1087
+ class Test(AstSymbolNode, ElementStmt, UniScopeNode):
752
1088
  """Test node type for Jac Ast."""
753
1089
 
754
1090
  TEST_COUNT = 0
@@ -757,10 +1093,9 @@ class Test(AstSymbolNode, ElementStmt):
757
1093
  self,
758
1094
  name: Name | Token,
759
1095
  body: SubNodeList[CodeBlockStmt],
760
- kid: Sequence[AstNode],
1096
+ kid: Sequence[UniNode],
761
1097
  doc: Optional[String] = None,
762
1098
  ) -> None:
763
- """Initialize test node."""
764
1099
  Test.TEST_COUNT += 1 if isinstance(name, Token) else 0
765
1100
  self.name: Name = ( # for auto generated test names
766
1101
  name
@@ -784,7 +1119,7 @@ class Test(AstSymbolNode, ElementStmt):
784
1119
  else self.name.value
785
1120
  )
786
1121
  self.body = body
787
- AstNode.__init__(self, kid=kid)
1122
+ UniNode.__init__(self, kid=kid)
788
1123
  if self.name not in self.kid:
789
1124
  self.insert_kids_at_pos([self.name], pos=1, pos_update=False)
790
1125
  AstSymbolNode.__init__(
@@ -794,15 +1129,15 @@ class Test(AstSymbolNode, ElementStmt):
794
1129
  sym_category=SymbolType.TEST,
795
1130
  )
796
1131
  AstDocNode.__init__(self, doc=doc)
1132
+ UniScopeNode.__init__(self, name=self.sym_name)
797
1133
 
798
1134
  def normalize(self, deep: bool = False) -> bool:
799
- """Normalize test node."""
800
1135
  res = True
801
1136
  if deep:
802
1137
  res = self.name.normalize(deep)
803
1138
  res = res and self.body.normalize(deep)
804
1139
  res = res and self.doc.normalize(deep) if self.doc else res
805
- new_kid: list[AstNode] = []
1140
+ new_kid: list[UniNode] = []
806
1141
  if self.doc:
807
1142
  new_kid.append(self.doc)
808
1143
  new_kid.append(self.gen_token(Tok.KW_TEST))
@@ -813,34 +1148,33 @@ class Test(AstSymbolNode, ElementStmt):
813
1148
 
814
1149
 
815
1150
  class ModuleCode(ElementStmt, ArchBlockStmt, EnumBlockStmt):
816
- """Free mod code for Jac Ast."""
1151
+ """ModuleCode node type for Jac Ast."""
817
1152
 
818
1153
  def __init__(
819
1154
  self,
820
- name: Optional[SubTag[Name]],
1155
+ name: Optional[Name],
821
1156
  body: SubNodeList[CodeBlockStmt],
822
- kid: Sequence[AstNode],
1157
+ kid: Sequence[UniNode],
823
1158
  doc: Optional[String] = None,
824
1159
  ) -> None:
825
- """Initialize test node."""
826
1160
  self.name = name
827
1161
  self.body = body
828
- AstNode.__init__(self, kid=kid)
1162
+ UniNode.__init__(self, kid=kid)
829
1163
  AstDocNode.__init__(self, doc=doc)
830
1164
 
831
1165
  def normalize(self, deep: bool = False) -> bool:
832
- """Normalize module code node."""
833
1166
  res = True
834
1167
  if deep:
835
1168
  res = self.name.normalize(deep) if self.name else res
836
1169
  res = res and self.body.normalize(deep)
837
1170
  res = res and self.doc.normalize(deep) if self.doc else res
838
- new_kid: list[AstNode] = []
1171
+ new_kid: list[UniNode] = []
839
1172
  if self.doc:
840
1173
  new_kid.append(self.doc)
841
1174
  new_kid.append(self.gen_token(Tok.KW_WITH))
842
1175
  new_kid.append(self.gen_token(Tok.KW_ENTRY))
843
1176
  if self.name:
1177
+ new_kid.append(self.gen_token(Tok.COLON))
844
1178
  new_kid.append(self.name)
845
1179
  new_kid.append(self.body)
846
1180
  self.set_kids(nodes=new_kid)
@@ -848,31 +1182,28 @@ class ModuleCode(ElementStmt, ArchBlockStmt, EnumBlockStmt):
848
1182
 
849
1183
 
850
1184
  class PyInlineCode(ElementStmt, ArchBlockStmt, EnumBlockStmt, CodeBlockStmt):
851
- """Inline Python code node type for Jac Ast."""
1185
+ """PyInlineCode node type for Jac Ast."""
852
1186
 
853
1187
  def __init__(
854
1188
  self,
855
1189
  code: Token,
856
- kid: Sequence[AstNode],
1190
+ kid: Sequence[UniNode],
857
1191
  doc: Optional[String] = None,
858
1192
  ) -> None:
859
- """Initialize inline python code node."""
860
1193
  self.code = code
861
- AstNode.__init__(self, kid=kid)
1194
+ UniNode.__init__(self, kid=kid)
862
1195
  AstDocNode.__init__(self, doc=doc)
1196
+ CodeBlockStmt.__init__(self)
863
1197
 
864
1198
  def normalize(self, deep: bool = False) -> bool:
865
- """Normalize inline python code node."""
866
1199
  res = True
867
1200
  if deep:
868
1201
  res = self.code.normalize(deep)
869
1202
  res = res and self.doc.normalize(deep) if self.doc else res
870
- new_kid: list[AstNode] = []
1203
+ new_kid: list[UniNode] = []
871
1204
  if self.doc:
872
1205
  new_kid.append(self.doc)
873
- new_kid.append(self.gen_token(Tok.PYNLINE))
874
1206
  new_kid.append(self.code)
875
- new_kid.append(self.gen_token(Tok.PYNLINE))
876
1207
  self.set_kids(nodes=new_kid)
877
1208
  return res
878
1209
 
@@ -882,20 +1213,19 @@ class Import(ElementStmt, CodeBlockStmt):
882
1213
 
883
1214
  def __init__(
884
1215
  self,
885
- hint: Optional[SubTag[Name]],
886
1216
  from_loc: Optional[ModulePath],
887
1217
  items: SubNodeList[ModuleItem] | SubNodeList[ModulePath],
888
1218
  is_absorb: bool, # For includes
889
- kid: Sequence[AstNode],
1219
+ kid: Sequence[UniNode],
890
1220
  doc: Optional[String] = None,
891
1221
  ) -> None:
892
- """Initialize import node."""
893
- self.hint = hint
1222
+ self.hint = None
894
1223
  self.from_loc = from_loc
895
1224
  self.items = items
896
1225
  self.is_absorb = is_absorb
897
- AstNode.__init__(self, kid=kid)
1226
+ UniNode.__init__(self, kid=kid)
898
1227
  AstDocNode.__init__(self, doc=doc)
1228
+ CodeBlockStmt.__init__(self)
899
1229
 
900
1230
  @property
901
1231
  def is_py(self) -> bool:
@@ -939,28 +1269,28 @@ class Import(ElementStmt, CodeBlockStmt):
939
1269
  )
940
1270
 
941
1271
  def normalize(self, deep: bool = False) -> bool:
942
- """Normalize import node."""
943
1272
  res = True
944
1273
  if deep:
945
1274
  res = self.hint.normalize(deep) if self.hint else res
946
1275
  res = res and self.from_loc.normalize(deep) if self.from_loc else res
947
1276
  res = res and self.items.normalize(deep)
948
1277
  res = res and self.doc.normalize(deep) if self.doc else res
949
- new_kid: list[AstNode] = []
1278
+ new_kid: list[UniNode] = []
950
1279
  if self.doc:
951
1280
  new_kid.append(self.doc)
952
1281
  if self.is_absorb:
953
1282
  new_kid.append(self.gen_token(Tok.KW_INCLUDE))
954
1283
  else:
955
1284
  new_kid.append(self.gen_token(Tok.KW_IMPORT))
956
- if self.hint:
957
- new_kid.append(self.hint)
958
1285
  if self.from_loc:
959
1286
  new_kid.append(self.gen_token(Tok.KW_FROM))
960
1287
  new_kid.append(self.from_loc)
961
- new_kid.append(self.gen_token(Tok.COMMA))
1288
+ new_kid.append(self.gen_token(Tok.LBRACE))
962
1289
  new_kid.append(self.items)
963
- new_kid.append(self.gen_token(Tok.SEMI))
1290
+ if self.from_loc:
1291
+ new_kid.append(self.gen_token(Tok.RBRACE))
1292
+ else:
1293
+ new_kid.append(self.gen_token(Tok.SEMI))
964
1294
  self.set_kids(nodes=new_kid)
965
1295
  return res
966
1296
 
@@ -970,21 +1300,19 @@ class ModulePath(AstSymbolNode):
970
1300
 
971
1301
  def __init__(
972
1302
  self,
973
- path: Optional[list[Name]],
1303
+ path: Optional[SubNodeList[Name]],
974
1304
  level: int,
975
1305
  alias: Optional[Name],
976
- kid: Sequence[AstNode],
1306
+ kid: Sequence[UniNode],
977
1307
  ) -> None:
978
- """Initialize module path node."""
979
1308
  self.path = path
980
1309
  self.level = level
981
1310
  self.alias = alias
982
- self.sub_module: Optional[Module] = None
983
1311
  self.abs_path: Optional[str] = None
984
1312
 
985
- name_spec = alias if alias else path[0] if path else None
1313
+ name_spec = alias if alias else path.items[0] if path else None
986
1314
 
987
- AstNode.__init__(self, kid=kid)
1315
+ UniNode.__init__(self, kid=kid)
988
1316
  if not name_spec:
989
1317
  pkg_name = self.loc.mod_path
990
1318
  for _ in range(self.level):
@@ -1005,63 +1333,32 @@ class ModulePath(AstSymbolNode):
1005
1333
  def dot_path_str(self) -> str:
1006
1334
  """Get path string."""
1007
1335
  return ("." * self.level) + ".".join(
1008
- [p.value for p in self.path] if self.path else [self.name_spec.sym_name]
1009
- )
1010
-
1011
- def resolve_relative_path(self, target_item: Optional[str] = None) -> str:
1012
- """Convert an import target string into a relative file path."""
1013
- target = self.dot_path_str
1014
- if target_item:
1015
- target += f".{target_item}"
1016
- base_path = (
1017
- os.getenv("JACPATH") or os.path.dirname(self.loc.mod_path) or os.getcwd()
1018
- )
1019
- parts = target.split(".")
1020
- traversal_levels = self.level - 1 if self.level > 0 else 0
1021
- actual_parts = parts[traversal_levels:]
1022
- for _ in range(traversal_levels):
1023
- base_path = os.path.dirname(base_path)
1024
- relative_path = os.path.join(base_path, *actual_parts)
1025
- relative_path = (
1026
- relative_path + ".jac"
1027
- if os.path.exists(relative_path + ".jac")
1028
- else relative_path
1336
+ [p.value for p in self.path.items]
1337
+ if self.path
1338
+ else [self.name_spec.sym_name]
1029
1339
  )
1030
- jacpath = os.getenv("JACPATH")
1031
- if not os.path.exists(relative_path) and jacpath:
1032
- name_to_find = actual_parts[-1] + ".jac"
1033
-
1034
- # Walk through the single path in JACPATH
1035
- for root, _, files in os.walk(jacpath):
1036
- if name_to_find in files:
1037
- relative_path = os.path.join(root, name_to_find)
1038
- break
1039
- return relative_path
1040
1340
 
1041
1341
  def normalize(self, deep: bool = False) -> bool:
1042
- """Normalize module path node."""
1043
1342
  res = True
1044
1343
  if deep:
1045
- if self.path:
1046
- for p in self.path:
1047
- res = res and p.normalize(deep)
1344
+ res = self.path.normalize(deep) if self.path else res
1048
1345
  res = res and self.alias.normalize(deep) if self.alias else res
1049
- new_kid: list[AstNode] = []
1346
+ new_kid: list[UniNode] = []
1050
1347
  for _ in range(self.level):
1051
1348
  new_kid.append(self.gen_token(Tok.DOT))
1052
1349
  if self.path:
1053
- for p in self.path:
1054
- res = res and p.normalize(deep)
1055
- new_kid.append(p)
1056
- new_kid.append(self.gen_token(Tok.DOT))
1057
- new_kid.pop()
1350
+ new_kid.append(self.path)
1058
1351
  if self.alias:
1059
- res = res and self.alias.normalize(deep)
1060
1352
  new_kid.append(self.gen_token(Tok.KW_AS))
1061
1353
  new_kid.append(self.alias)
1062
1354
  self.set_kids(nodes=new_kid)
1063
1355
  return res
1064
1356
 
1357
+ def resolve_relative_path(self, target_item: Optional[str] = None) -> str:
1358
+ """Convert an import target string into a relative file path."""
1359
+ target = self.dot_path_str + (f".{target_item}" if target_item else "")
1360
+ return resolve_relative_path(target, self.loc.mod_path)
1361
+
1065
1362
 
1066
1363
  class ModuleItem(AstSymbolNode):
1067
1364
  """ModuleItem node type for Jac Ast."""
@@ -1070,13 +1367,11 @@ class ModuleItem(AstSymbolNode):
1070
1367
  self,
1071
1368
  name: Name,
1072
1369
  alias: Optional[Name],
1073
- kid: Sequence[AstNode],
1370
+ kid: Sequence[UniNode],
1074
1371
  ) -> None:
1075
- """Initialize module item node."""
1076
1372
  self.name = name
1077
1373
  self.alias = alias
1078
- self.sub_module: Optional[Module] = None
1079
- AstNode.__init__(self, kid=kid)
1374
+ UniNode.__init__(self, kid=kid)
1080
1375
  AstSymbolNode.__init__(
1081
1376
  self,
1082
1377
  sym_name=alias.sym_name if alias else name.sym_name,
@@ -1104,12 +1399,11 @@ class ModuleItem(AstSymbolNode):
1104
1399
  return self.from_parent.from_loc
1105
1400
 
1106
1401
  def normalize(self, deep: bool = False) -> bool:
1107
- """Normalize module item node."""
1108
1402
  res = True
1109
1403
  if deep:
1110
1404
  res = res and self.name.normalize(deep)
1111
1405
  res = res and self.alias.normalize(deep) if self.alias else res
1112
- new_kid: list[AstNode] = [self.name]
1406
+ new_kid: list[UniNode] = [self.name]
1113
1407
  if self.alias:
1114
1408
  new_kid.append(self.gen_token(Tok.KW_AS))
1115
1409
  new_kid.append(self.alias)
@@ -1117,7 +1411,14 @@ class ModuleItem(AstSymbolNode):
1117
1411
  return res
1118
1412
 
1119
1413
 
1120
- class Architype(ArchSpec, AstAccessNode, ArchBlockStmt, AstImplNeedingNode):
1414
+ class Archetype(
1415
+ ArchSpec,
1416
+ AstAccessNode,
1417
+ ArchBlockStmt,
1418
+ AstImplNeedingNode,
1419
+ UniScopeNode,
1420
+ UniCFGNode,
1421
+ ):
1121
1422
  """ObjectArch node type for Jac Ast."""
1122
1423
 
1123
1424
  def __init__(
@@ -1126,17 +1427,15 @@ class Architype(ArchSpec, AstAccessNode, ArchBlockStmt, AstImplNeedingNode):
1126
1427
  arch_type: Token,
1127
1428
  access: Optional[SubTag[Token]],
1128
1429
  base_classes: Optional[SubNodeList[Expr]],
1129
- body: Optional[SubNodeList[ArchBlockStmt] | ArchDef],
1130
- kid: Sequence[AstNode],
1430
+ body: Optional[SubNodeList[ArchBlockStmt] | ImplDef],
1431
+ kid: Sequence[UniNode],
1131
1432
  doc: Optional[String] = None,
1132
- semstr: Optional[String] = None,
1133
1433
  decorators: Optional[SubNodeList[Expr]] = None,
1134
1434
  ) -> None:
1135
- """Initialize object arch node."""
1136
1435
  self.name = name
1137
1436
  self.arch_type = arch_type
1138
1437
  self.base_classes = base_classes
1139
- AstNode.__init__(self, kid=kid)
1438
+ UniNode.__init__(self, kid=kid)
1140
1439
  AstSymbolNode.__init__(
1141
1440
  self,
1142
1441
  sym_name=name.value,
@@ -1162,21 +1461,25 @@ class Architype(ArchSpec, AstAccessNode, ArchBlockStmt, AstImplNeedingNode):
1162
1461
  AstImplNeedingNode.__init__(self, body=body)
1163
1462
  AstAccessNode.__init__(self, access=access)
1164
1463
  AstDocNode.__init__(self, doc=doc)
1165
- AstSemStrNode.__init__(self, semstr=semstr)
1166
1464
  ArchSpec.__init__(self, decorators=decorators)
1465
+ UniScopeNode.__init__(self, name=self.sym_name)
1466
+ CodeBlockStmt.__init__(self)
1167
1467
 
1168
1468
  @property
1169
1469
  def is_abstract(self) -> bool:
1170
- """Check if has an abstract method."""
1171
1470
  body = (
1172
1471
  self.body.items
1173
1472
  if isinstance(self.body, SubNodeList)
1174
- else self.body.body.items if isinstance(self.body, ArchDef) else []
1473
+ else (
1474
+ self.body.body.items
1475
+ if isinstance(self.body, ImplDef)
1476
+ and isinstance(self.body.body, SubNodeList)
1477
+ else []
1478
+ )
1175
1479
  )
1176
1480
  return any(isinstance(i, Ability) and i.is_abstract for i in body)
1177
1481
 
1178
1482
  def normalize(self, deep: bool = False) -> bool:
1179
- """Normalize architype node."""
1180
1483
  res = True
1181
1484
  if deep:
1182
1485
  res = self.name.normalize(deep)
@@ -1187,26 +1490,25 @@ class Architype(ArchSpec, AstAccessNode, ArchBlockStmt, AstImplNeedingNode):
1187
1490
  )
1188
1491
  res = res and self.body.normalize(deep) if self.body else res
1189
1492
  res = res and self.doc.normalize(deep) if self.doc else res
1190
- res = res and self.semstr.normalize(deep) if self.semstr else res
1191
1493
  res = res and self.decorators.normalize(deep) if self.decorators else res
1192
- new_kid: list[AstNode] = []
1494
+ new_kid: list[UniNode] = []
1193
1495
  if self.doc:
1194
1496
  new_kid.append(self.doc)
1195
1497
  if self.decorators:
1196
1498
  new_kid.append(self.gen_token(Tok.DECOR_OP))
1197
1499
  new_kid.append(self.decorators)
1500
+ if self.is_async:
1501
+ new_kid.append(self.gen_token(Tok.KW_ASYNC))
1198
1502
  new_kid.append(self.arch_type)
1199
1503
  if self.access:
1200
1504
  new_kid.append(self.access)
1201
- if self.semstr:
1202
- new_kid.append(self.semstr)
1203
1505
  new_kid.append(self.name)
1204
1506
  if self.base_classes:
1205
- new_kid.append(self.gen_token(Tok.COLON))
1507
+ new_kid.append(self.gen_token(Tok.LPAREN))
1206
1508
  new_kid.append(self.base_classes)
1207
- new_kid.append(self.gen_token(Tok.COLON))
1509
+ new_kid.append(self.gen_token(Tok.RPAREN))
1208
1510
  if self.body:
1209
- if isinstance(self.body, AstImplOnlyNode):
1511
+ if isinstance(self.body, ImplDef):
1210
1512
  new_kid.append(self.gen_token(Tok.SEMI))
1211
1513
  else:
1212
1514
  new_kid.append(self.body)
@@ -1216,39 +1518,74 @@ class Architype(ArchSpec, AstAccessNode, ArchBlockStmt, AstImplNeedingNode):
1216
1518
  return res
1217
1519
 
1218
1520
 
1219
- class ArchDef(AstImplOnlyNode):
1220
- """ArchDef node type for Jac Ast."""
1521
+ class ImplDef(CodeBlockStmt, ElementStmt, ArchBlockStmt, AstSymbolNode, UniScopeNode):
1522
+ """AstImplOnlyNode node type for Jac Ast."""
1221
1523
 
1222
1524
  def __init__(
1223
1525
  self,
1224
- target: ArchRefChain,
1225
- body: SubNodeList[ArchBlockStmt],
1226
- kid: Sequence[AstNode],
1526
+ decorators: Optional[SubNodeList[Expr]],
1527
+ target: SubNodeList[NameAtom],
1528
+ spec: SubNodeList[Expr] | FuncSignature | EventSignature | None,
1529
+ body: SubNodeList[CodeBlockStmt] | FuncCall,
1530
+ kid: Sequence[UniNode],
1227
1531
  doc: Optional[String] = None,
1228
- decl_link: Optional[Architype] = None,
1532
+ decl_link: Optional[UniNode] = None,
1229
1533
  ) -> None:
1230
- """Initialize arch def node."""
1231
- AstNode.__init__(self, kid=kid)
1232
- AstDocNode.__init__(self, doc=doc)
1233
- AstImplOnlyNode.__init__(self, target=target, body=body, decl_link=decl_link)
1534
+ self.decorators = decorators
1535
+ self.target = target
1536
+ self.spec = spec
1537
+ self.body = body
1538
+ self.doc = doc
1539
+ self.decl_link = decl_link
1540
+ UniNode.__init__(self, kid=kid)
1541
+ AstSymbolNode.__init__(
1542
+ self,
1543
+ sym_name="impl." + ".".join([x.sym_name for x in self.target.items]),
1544
+ name_spec=self.create_impl_name_node(),
1545
+ sym_category=SymbolType.IMPL,
1546
+ )
1547
+ CodeBlockStmt.__init__(self)
1548
+ UniScopeNode.__init__(self, name=self.sym_name)
1549
+
1550
+ def create_impl_name_node(self) -> Name:
1551
+ ret = Name(
1552
+ orig_src=self.target.items[-1].loc.orig_src,
1553
+ name=Tok.NAME.value,
1554
+ value="impl." + ".".join([x.sym_name for x in self.target.items]),
1555
+ col_start=self.target.items[0].loc.col_start,
1556
+ col_end=self.target.items[-1].loc.col_end,
1557
+ line=self.target.items[0].loc.first_line,
1558
+ end_line=self.target.items[-1].loc.last_line,
1559
+ pos_start=self.target.items[0].loc.pos_start,
1560
+ pos_end=self.target.items[-1].loc.pos_end,
1561
+ )
1562
+ ret.parent = self
1563
+ return ret
1234
1564
 
1235
1565
  def normalize(self, deep: bool = False) -> bool:
1236
- """Normalize arch def node."""
1237
1566
  res = True
1238
1567
  if deep:
1239
1568
  res = self.target.normalize(deep)
1569
+ res = res and self.spec.normalize(deep) if self.spec else res
1240
1570
  res = res and self.body.normalize(deep)
1241
1571
  res = res and self.doc.normalize(deep) if self.doc else res
1242
- new_kid: list[AstNode] = []
1572
+ res = res and self.decorators.normalize(deep) if self.decorators else res
1573
+ new_kid: list[UniNode] = []
1243
1574
  if self.doc:
1244
1575
  new_kid.append(self.doc)
1576
+ if self.decorators:
1577
+ new_kid.append(self.gen_token(Tok.DECOR_OP))
1578
+ new_kid.append(self.decorators)
1579
+ new_kid.append(self.gen_token(Tok.KW_IMPL))
1245
1580
  new_kid.append(self.target)
1581
+ if self.spec:
1582
+ new_kid.append(self.spec)
1246
1583
  new_kid.append(self.body)
1247
1584
  self.set_kids(nodes=new_kid)
1248
1585
  return res
1249
1586
 
1250
1587
 
1251
- class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt):
1588
+ class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt, UniScopeNode):
1252
1589
  """Enum node type for Jac Ast."""
1253
1590
 
1254
1591
  def __init__(
@@ -1256,16 +1593,14 @@ class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt):
1256
1593
  name: Name,
1257
1594
  access: Optional[SubTag[Token]],
1258
1595
  base_classes: Optional[SubNodeList[Expr]],
1259
- body: Optional[SubNodeList[EnumBlockStmt] | EnumDef],
1260
- kid: Sequence[AstNode],
1596
+ body: Optional[SubNodeList[Assignment] | ImplDef],
1597
+ kid: Sequence[UniNode],
1261
1598
  doc: Optional[String] = None,
1262
- semstr: Optional[String] = None,
1263
1599
  decorators: Optional[SubNodeList[Expr]] = None,
1264
1600
  ) -> None:
1265
- """Initialize object arch node."""
1266
1601
  self.name = name
1267
1602
  self.base_classes = base_classes
1268
- AstNode.__init__(self, kid=kid)
1603
+ UniNode.__init__(self, kid=kid)
1269
1604
  AstSymbolNode.__init__(
1270
1605
  self,
1271
1606
  sym_name=name.value,
@@ -1275,11 +1610,10 @@ class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt):
1275
1610
  AstImplNeedingNode.__init__(self, body=body)
1276
1611
  AstAccessNode.__init__(self, access=access)
1277
1612
  AstDocNode.__init__(self, doc=doc)
1278
- AstSemStrNode.__init__(self, semstr=semstr)
1279
1613
  ArchSpec.__init__(self, decorators=decorators)
1614
+ UniScopeNode.__init__(self, name=self.sym_name)
1280
1615
 
1281
1616
  def normalize(self, deep: bool = False) -> bool:
1282
- """Normalize enum node."""
1283
1617
  res = True
1284
1618
  if deep:
1285
1619
  res = self.name.normalize(deep)
@@ -1289,9 +1623,8 @@ class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt):
1289
1623
  )
1290
1624
  res = res and self.body.normalize(deep) if self.body else res
1291
1625
  res = res and self.doc.normalize(deep) if self.doc else res
1292
- res = res and self.semstr.normalize(deep) if self.semstr else res
1293
1626
  res = res and self.decorators.normalize(deep) if self.decorators else res
1294
- new_kid: list[AstNode] = []
1627
+ new_kid: list[UniNode] = []
1295
1628
  if self.decorators:
1296
1629
  new_kid.append(self.gen_token(Tok.DECOR_OP))
1297
1630
  new_kid.append(self.decorators)
@@ -1300,70 +1633,30 @@ class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt):
1300
1633
  new_kid.append(self.gen_token(Tok.KW_ENUM))
1301
1634
  if self.access:
1302
1635
  new_kid.append(self.access)
1303
- if self.semstr:
1304
- new_kid.append(self.semstr)
1305
1636
  new_kid.append(self.name)
1306
1637
  if self.base_classes:
1307
1638
  new_kid.append(self.gen_token(Tok.COLON))
1308
1639
  new_kid.append(self.base_classes)
1309
1640
  new_kid.append(self.gen_token(Tok.COLON))
1310
1641
  if self.body:
1311
- if isinstance(self.body, AstImplOnlyNode):
1642
+ if isinstance(self.body, ImplDef):
1312
1643
  new_kid.append(self.gen_token(Tok.SEMI))
1313
1644
  else:
1314
- new_kid.append(self.gen_token(Tok.LBRACE))
1315
1645
  new_kid.append(self.body)
1316
- new_kid.append(self.gen_token(Tok.RBRACE))
1317
1646
  else:
1318
1647
  new_kid.append(self.gen_token(Tok.SEMI))
1319
1648
  self.set_kids(nodes=new_kid)
1320
1649
  return res
1321
1650
 
1322
1651
 
1323
- class EnumDef(AstImplOnlyNode):
1324
- """EnumDef node type for Jac Ast."""
1325
-
1326
- def __init__(
1327
- self,
1328
- target: ArchRefChain,
1329
- body: SubNodeList[EnumBlockStmt],
1330
- kid: Sequence[AstNode],
1331
- doc: Optional[String] = None,
1332
- decorators: Optional[SubNodeList[Expr]] = None,
1333
- decl_link: Optional[Enum] = None,
1334
- ) -> None:
1335
- """Initialize arch def node."""
1336
- AstNode.__init__(self, kid=kid)
1337
- AstDocNode.__init__(self, doc=doc)
1338
- AstImplOnlyNode.__init__(self, target=target, body=body, decl_link=decl_link)
1339
-
1340
- def normalize(self, deep: bool = False) -> bool:
1341
- """Normalize enum def node."""
1342
- res = True
1343
- if deep:
1344
- res = self.target.normalize(deep)
1345
- res = res and self.body.normalize(deep)
1346
- res = res and self.doc.normalize(deep) if self.doc else res
1347
- new_kid: list[AstNode] = []
1348
- if self.doc:
1349
- new_kid.append(self.doc)
1350
- new_kid.append(self.target)
1351
- new_kid.append(self.gen_token(Tok.LBRACE))
1352
- new_kid.append(self.body)
1353
- new_kid.append(self.gen_token(Tok.RBRACE))
1354
- self.set_kids(nodes=new_kid)
1355
- return res
1356
-
1357
-
1358
1652
  class Ability(
1359
1653
  AstAccessNode,
1360
1654
  ElementStmt,
1361
1655
  AstAsyncNode,
1362
1656
  ArchBlockStmt,
1363
- EnumBlockStmt,
1364
1657
  CodeBlockStmt,
1365
- AstSemStrNode,
1366
1658
  AstImplNeedingNode,
1659
+ UniScopeNode,
1367
1660
  ):
1368
1661
  """Ability node type for Jac Ast."""
1369
1662
 
@@ -1375,23 +1668,21 @@ class Ability(
1375
1668
  is_static: bool,
1376
1669
  is_abstract: bool,
1377
1670
  access: Optional[SubTag[Token]],
1378
- signature: FuncSignature | EventSignature,
1379
- body: Optional[SubNodeList[CodeBlockStmt] | AbilityDef | FuncCall],
1380
- kid: Sequence[AstNode],
1381
- semstr: Optional[String] = None,
1671
+ signature: FuncSignature | EventSignature | None,
1672
+ body: Optional[SubNodeList[CodeBlockStmt] | ImplDef | FuncCall],
1673
+ kid: Sequence[UniNode],
1382
1674
  doc: Optional[String] = None,
1383
1675
  decorators: Optional[SubNodeList[Expr]] = None,
1384
1676
  ) -> None:
1385
- """Initialize func arch node."""
1386
1677
  self.name_ref = name_ref
1387
1678
  self.is_override = is_override
1388
1679
  self.is_static = is_static
1389
1680
  self.is_abstract = is_abstract
1390
1681
  self.decorators = decorators
1391
1682
  self.signature = signature
1392
- AstNode.__init__(self, kid=kid)
1683
+
1684
+ UniNode.__init__(self, kid=kid)
1393
1685
  AstImplNeedingNode.__init__(self, body=body)
1394
- AstSemStrNode.__init__(self, semstr=semstr)
1395
1686
  AstSymbolNode.__init__(
1396
1687
  self,
1397
1688
  sym_name=self.py_resolve_name(),
@@ -1401,49 +1692,57 @@ class Ability(
1401
1692
  AstAccessNode.__init__(self, access=access)
1402
1693
  AstDocNode.__init__(self, doc=doc)
1403
1694
  AstAsyncNode.__init__(self, is_async=is_async)
1695
+ UniScopeNode.__init__(self, name=self.sym_name)
1696
+ CodeBlockStmt.__init__(self)
1404
1697
 
1405
1698
  @property
1406
1699
  def is_method(self) -> bool:
1407
- """Check if is func."""
1408
- return self.signature.is_method
1700
+ return self.method_owner is not None
1409
1701
 
1410
1702
  @property
1411
- def owner_method(self) -> Optional[Architype | Enum]:
1412
- """Check if is owner method."""
1413
- return (
1703
+ def is_def(self) -> bool:
1704
+ return not self.signature or isinstance(self.signature, FuncSignature)
1705
+
1706
+ @property
1707
+ def method_owner(self) -> Optional[Archetype | Enum]:
1708
+ found = (
1414
1709
  self.parent.parent
1415
1710
  if self.parent
1416
1711
  and self.parent.parent
1417
- and isinstance(self.parent.parent, (Architype, Enum))
1712
+ and isinstance(self.parent.parent, (Archetype, Enum))
1713
+ else None
1714
+ ) or (
1715
+ self.parent.parent.decl_link
1716
+ if self.parent
1717
+ and self.parent.parent
1718
+ and isinstance(self.parent.parent, ImplDef)
1719
+ and isinstance(self.parent.parent.decl_link, Archetype)
1418
1720
  else None
1419
1721
  )
1722
+ return found
1420
1723
 
1421
1724
  @property
1422
1725
  def is_genai_ability(self) -> bool:
1423
- """Check if is genai_ability."""
1424
1726
  return isinstance(self.body, FuncCall)
1425
1727
 
1426
1728
  def py_resolve_name(self) -> str:
1427
- """Resolve name."""
1428
1729
  if isinstance(self.name_ref, Name):
1429
1730
  return self.name_ref.value
1430
- elif isinstance(self.name_ref, (SpecialVarRef, ArchRef)):
1731
+ elif isinstance(self.name_ref, SpecialVarRef):
1431
1732
  return self.name_ref.py_resolve_name()
1432
1733
  else:
1433
1734
  raise NotImplementedError
1434
1735
 
1435
1736
  def normalize(self, deep: bool = False) -> bool:
1436
- """Normalize ast node."""
1437
1737
  res = True
1438
1738
  if deep:
1439
1739
  res = self.name_ref.normalize(deep)
1440
1740
  res = res and self.access.normalize(deep) if self.access else res
1441
1741
  res = res and self.signature.normalize(deep) if self.signature else res
1442
1742
  res = res and self.body.normalize(deep) if self.body else res
1443
- res = res and self.semstr.normalize(deep) if self.semstr else res
1444
1743
  res = res and self.decorators.normalize(deep) if self.decorators else res
1445
1744
  res = res and self.doc.normalize(deep) if self.doc else res
1446
- new_kid: list[AstNode] = []
1745
+ new_kid: list[UniNode] = []
1447
1746
  if self.doc:
1448
1747
  new_kid.append(self.doc)
1449
1748
  if self.decorators:
@@ -1456,11 +1755,13 @@ class Ability(
1456
1755
  new_kid.append(self.gen_token(Tok.KW_OVERRIDE))
1457
1756
  if self.is_static:
1458
1757
  new_kid.append(self.gen_token(Tok.KW_STATIC))
1459
- new_kid.append(self.gen_token(Tok.KW_CAN))
1758
+ new_kid.append(
1759
+ self.gen_token(Tok.KW_CAN)
1760
+ if not self.is_def
1761
+ else self.gen_token(Tok.KW_DEF)
1762
+ )
1460
1763
  if self.access:
1461
1764
  new_kid.append(self.access)
1462
- if self.semstr:
1463
- new_kid.append(self.semstr)
1464
1765
  new_kid.append(self.name_ref)
1465
1766
  if self.signature:
1466
1767
  new_kid.append(self.signature)
@@ -1469,7 +1770,7 @@ class Ability(
1469
1770
  if self.is_abstract:
1470
1771
  new_kid.append(self.gen_token(Tok.KW_ABSTRACT))
1471
1772
  if self.body:
1472
- if isinstance(self.body, AstImplOnlyNode):
1773
+ if isinstance(self.body, ImplDef):
1473
1774
  new_kid.append(self.gen_token(Tok.SEMI))
1474
1775
  else:
1475
1776
  new_kid.append(self.body)
@@ -1481,97 +1782,47 @@ class Ability(
1481
1782
  return res
1482
1783
 
1483
1784
 
1484
- class AbilityDef(AstImplOnlyNode):
1485
- """AbilityDef node type for Jac Ast."""
1486
-
1487
- def __init__(
1488
- self,
1489
- target: ArchRefChain,
1490
- signature: FuncSignature | EventSignature,
1491
- body: SubNodeList[CodeBlockStmt],
1492
- kid: Sequence[AstNode],
1493
- doc: Optional[String] = None,
1494
- decorators: Optional[SubNodeList[Expr]] = None,
1495
- decl_link: Optional[Ability] = None,
1496
- ) -> None:
1497
- """Initialize ability def node."""
1498
- self.signature = signature
1499
- self.decorators = decorators
1500
- AstNode.__init__(self, kid=kid)
1501
- AstDocNode.__init__(self, doc=doc)
1502
- AstImplOnlyNode.__init__(self, target=target, body=body, decl_link=decl_link)
1503
-
1504
- def normalize(self, deep: bool = False) -> bool:
1505
- """Normalize ability def node."""
1506
- res = True
1507
- if deep:
1508
- res = self.target.normalize(deep)
1509
- res = res and self.signature.normalize(deep)
1510
- res = res and self.body.normalize(deep)
1511
- res = res and self.doc.normalize(deep) if self.doc else res
1512
- res = res and self.decorators.normalize(deep) if self.decorators else res
1513
- new_kid: list[AstNode] = []
1514
- if self.doc:
1515
- new_kid.append(self.doc)
1516
- new_kid.append(self.target)
1517
- new_kid.append(self.signature)
1518
-
1519
- new_kid.append(self.body)
1520
-
1521
- self.set_kids(nodes=new_kid)
1522
- return res
1523
-
1524
-
1525
- class FuncSignature(AstSemStrNode):
1785
+ class FuncSignature(UniNode):
1526
1786
  """FuncSignature node type for Jac Ast."""
1527
1787
 
1528
1788
  def __init__(
1529
1789
  self,
1530
1790
  params: Optional[SubNodeList[ParamVar]],
1531
1791
  return_type: Optional[Expr],
1532
- kid: Sequence[AstNode],
1533
- semstr: Optional[String] = None,
1792
+ kid: Sequence[UniNode],
1534
1793
  ) -> None:
1535
- """Initialize method signature node."""
1536
1794
  self.params = params
1537
1795
  self.return_type = return_type
1538
- self.is_method = False
1539
- AstNode.__init__(self, kid=kid)
1540
- AstSemStrNode.__init__(self, semstr=semstr)
1796
+ UniNode.__init__(self, kid=kid)
1541
1797
 
1542
1798
  def normalize(self, deep: bool = False) -> bool:
1543
- """Normalize ast node."""
1544
1799
  res = True
1800
+ is_lambda = self.parent and isinstance(self.parent, LambdaExpr)
1545
1801
  if deep:
1546
1802
  res = self.params.normalize(deep) if self.params else res
1547
1803
  res = res and self.return_type.normalize(deep) if self.return_type else res
1548
- res = res and self.semstr.normalize(deep) if self.semstr else res
1549
- new_kid: list[AstNode] = [self.gen_token(Tok.LPAREN)]
1804
+ new_kid: list[UniNode] = [self.gen_token(Tok.LPAREN)] if not is_lambda else []
1550
1805
  if self.params:
1551
1806
  new_kid.append(self.params)
1552
- new_kid.append(self.gen_token(Tok.RPAREN))
1807
+ if not is_lambda:
1808
+ new_kid.append(self.gen_token(Tok.RPAREN))
1553
1809
  if self.return_type:
1554
1810
  new_kid.append(self.gen_token(Tok.RETURN_HINT))
1555
- if self.semstr:
1556
- new_kid.append(self.semstr)
1557
- new_kid.append(self.gen_token(Tok.COLON))
1558
1811
  new_kid.append(self.return_type)
1559
1812
  self.set_kids(nodes=new_kid)
1560
1813
  return res
1561
1814
 
1562
1815
  @property
1563
1816
  def is_static(self) -> bool:
1564
- """Check if is static."""
1565
1817
  return (isinstance(self.parent, Ability) and self.parent.is_static) or (
1566
- isinstance(self.parent, AbilityDef)
1818
+ isinstance(self.parent, ImplDef)
1567
1819
  and isinstance(self.parent.decl_link, Ability)
1568
1820
  and self.parent.decl_link.is_static
1569
1821
  )
1570
1822
 
1571
1823
  @property
1572
1824
  def is_in_py_class(self) -> bool:
1573
- """Check if the ability belongs to a class."""
1574
- is_archi = self.find_parent_of_type(Architype)
1825
+ is_archi = self.find_parent_of_type(Archetype)
1575
1826
  is_class = is_archi is not None and is_archi.arch_type.name == Tok.KW_CLASS
1576
1827
 
1577
1828
  return (
@@ -1579,14 +1830,14 @@ class FuncSignature(AstSemStrNode):
1579
1830
  and self.parent.is_method is not None
1580
1831
  and is_class
1581
1832
  ) or (
1582
- isinstance(self.parent, AbilityDef)
1833
+ isinstance(self.parent, ImplDef)
1583
1834
  and isinstance(self.parent.decl_link, Ability)
1584
1835
  and self.parent.decl_link.is_method
1585
1836
  and is_class
1586
1837
  )
1587
1838
 
1588
1839
 
1589
- class EventSignature(AstSemStrNode):
1840
+ class EventSignature(UniNode):
1590
1841
  """EventSignature node type for Jac Ast."""
1591
1842
 
1592
1843
  def __init__(
@@ -1594,19 +1845,14 @@ class EventSignature(AstSemStrNode):
1594
1845
  event: Token,
1595
1846
  arch_tag_info: Optional[Expr],
1596
1847
  return_type: Optional[Expr],
1597
- kid: Sequence[AstNode],
1598
- semstr: Optional[String] = None,
1848
+ kid: Sequence[UniNode],
1599
1849
  ) -> None:
1600
- """Initialize event signature node."""
1601
1850
  self.event = event
1602
1851
  self.arch_tag_info = arch_tag_info
1603
1852
  self.return_type = return_type
1604
- self.is_method = False
1605
- AstNode.__init__(self, kid=kid)
1606
- AstSemStrNode.__init__(self, semstr=semstr)
1853
+ UniNode.__init__(self, kid=kid)
1607
1854
 
1608
1855
  def normalize(self, deep: bool = False) -> bool:
1609
- """Normalize ast node."""
1610
1856
  res = True
1611
1857
  if deep:
1612
1858
  res = self.event.normalize(deep)
@@ -1616,64 +1862,18 @@ class EventSignature(AstSemStrNode):
1616
1862
  else res
1617
1863
  )
1618
1864
  res = res and self.return_type.normalize(deep) if self.return_type else res
1619
- res = res and self.semstr.normalize(deep) if self.semstr else res
1620
- new_kid: list[AstNode] = [self.gen_token(Tok.KW_WITH)]
1865
+ new_kid: list[UniNode] = [self.gen_token(Tok.KW_WITH)]
1621
1866
  if self.arch_tag_info:
1622
1867
  new_kid.append(self.arch_tag_info)
1623
1868
  new_kid.append(self.event)
1624
1869
  if self.return_type:
1625
- if self.semstr:
1626
- new_kid.append(self.semstr)
1627
1870
  new_kid.append(self.gen_token(Tok.RETURN_HINT))
1628
1871
  new_kid.append(self.return_type)
1629
1872
  self.set_kids(nodes=new_kid)
1630
1873
  return res
1631
1874
 
1632
1875
 
1633
- class ArchRefChain(AstNode):
1634
- """Arch ref list node type for Jac Ast."""
1635
-
1636
- def __init__(
1637
- self,
1638
- archs: list[ArchRef],
1639
- kid: Sequence[AstNode],
1640
- ) -> None:
1641
- """Initialize name list ."""
1642
- self.archs = archs
1643
- AstNode.__init__(self, kid=kid)
1644
-
1645
- def normalize(self, deep: bool = False) -> bool:
1646
- """Normalize ast node."""
1647
- res = True
1648
- if deep:
1649
- for a in self.archs:
1650
- res = res and a.normalize(deep)
1651
- new_kid: list[AstNode] = []
1652
- for a in self.archs:
1653
- new_kid.append(a)
1654
- self.set_kids(nodes=new_kid)
1655
- return res
1656
-
1657
- def py_resolve_name(self) -> str:
1658
- """Resolve name."""
1659
-
1660
- def get_tag(x: ArchRef) -> str:
1661
- return (
1662
- "en"
1663
- if x.arch_type.value == "enum"
1664
- else "cls" if x.arch_type.value == "class" else x.arch_type.value[1]
1665
- )
1666
-
1667
- return ".".join([f"({get_tag(x)}){x.sym_name}" for x in self.archs])
1668
-
1669
- def flat_name(self) -> str:
1670
- """Resolve name for python gen."""
1671
- return (
1672
- self.py_resolve_name().replace(".", "_").replace("(", "").replace(")", "_")
1673
- )
1674
-
1675
-
1676
- class ParamVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1876
+ class ParamVar(AstSymbolNode, AstTypedVarNode):
1677
1877
  """ParamVar node type for Jac Ast."""
1678
1878
 
1679
1879
  def __init__(
@@ -1682,14 +1882,12 @@ class ParamVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1682
1882
  unpack: Optional[Token],
1683
1883
  type_tag: SubTag[Expr],
1684
1884
  value: Optional[Expr],
1685
- kid: Sequence[AstNode],
1686
- semstr: Optional[String] = None,
1885
+ kid: Sequence[UniNode],
1687
1886
  ) -> None:
1688
- """Initialize param var node."""
1689
1887
  self.name = name
1690
1888
  self.unpack = unpack
1691
1889
  self.value = value
1692
- AstNode.__init__(self, kid=kid)
1890
+ UniNode.__init__(self, kid=kid)
1693
1891
  AstSymbolNode.__init__(
1694
1892
  self,
1695
1893
  sym_name=name.value,
@@ -1697,24 +1895,18 @@ class ParamVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1697
1895
  sym_category=SymbolType.VAR,
1698
1896
  )
1699
1897
  AstTypedVarNode.__init__(self, type_tag=type_tag)
1700
- AstSemStrNode.__init__(self, semstr=semstr)
1701
1898
 
1702
1899
  def normalize(self, deep: bool = True) -> bool:
1703
- """Normalize ast node."""
1704
1900
  res = True
1705
1901
  if deep:
1706
1902
  res = self.name.normalize(deep)
1707
1903
  res = res and self.unpack.normalize(deep) if self.unpack else res
1708
1904
  res = res and self.type_tag.normalize(deep) if self.type_tag else res
1709
1905
  res = res and self.value.normalize(deep) if self.value else res
1710
- res = res and self.semstr.normalize(deep) if self.semstr else res
1711
- new_kid: list[AstNode] = []
1906
+ new_kid: list[UniNode] = []
1712
1907
  if self.unpack:
1713
1908
  new_kid.append(self.unpack)
1714
1909
  new_kid.append(self.name)
1715
- if self.semstr:
1716
- new_kid.append(self.gen_token(Tok.COLON))
1717
- new_kid.append(self.semstr)
1718
1910
  if self.type_tag:
1719
1911
  new_kid.append(self.type_tag)
1720
1912
  if self.value:
@@ -1724,8 +1916,11 @@ class ParamVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1724
1916
  return res
1725
1917
 
1726
1918
 
1727
- class ArchHas(AstAccessNode, AstDocNode, ArchBlockStmt):
1728
- """HasStmt node type for Jac Ast."""
1919
+ # TODO: Must deal with codeblockstmt here, should only be in ArchBocks
1920
+ # but had to do this for impls to work, probably should do checks in the
1921
+ # static analysis phase
1922
+ class ArchHas(AstAccessNode, AstDocNode, ArchBlockStmt, CodeBlockStmt):
1923
+ """ArchHas node type for Jac Ast."""
1729
1924
 
1730
1925
  def __init__(
1731
1926
  self,
@@ -1733,25 +1928,24 @@ class ArchHas(AstAccessNode, AstDocNode, ArchBlockStmt):
1733
1928
  access: Optional[SubTag[Token]],
1734
1929
  vars: SubNodeList[HasVar],
1735
1930
  is_frozen: bool,
1736
- kid: Sequence[AstNode],
1931
+ kid: Sequence[UniNode],
1737
1932
  doc: Optional[String] = None,
1738
1933
  ) -> None:
1739
- """Initialize has statement node."""
1740
1934
  self.is_static = is_static
1741
1935
  self.vars = vars
1742
1936
  self.is_frozen = is_frozen
1743
- AstNode.__init__(self, kid=kid)
1937
+ UniNode.__init__(self, kid=kid)
1744
1938
  AstAccessNode.__init__(self, access=access)
1745
1939
  AstDocNode.__init__(self, doc=doc)
1940
+ CodeBlockStmt.__init__(self)
1746
1941
 
1747
1942
  def normalize(self, deep: bool = False) -> bool:
1748
- """Normalize has statement node."""
1749
1943
  res = True
1750
1944
  if deep:
1751
1945
  res = self.access.normalize(deep) if self.access else res
1752
1946
  res = res and self.vars.normalize(deep) if self.vars else res
1753
1947
  res = res and self.doc.normalize(deep) if self.doc else res
1754
- new_kid: list[AstNode] = []
1948
+ new_kid: list[UniNode] = []
1755
1949
  if self.doc:
1756
1950
  new_kid.append(self.doc)
1757
1951
  if self.is_static:
@@ -1769,7 +1963,7 @@ class ArchHas(AstAccessNode, AstDocNode, ArchBlockStmt):
1769
1963
  return res
1770
1964
 
1771
1965
 
1772
- class HasVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1966
+ class HasVar(AstSymbolNode, AstTypedVarNode):
1773
1967
  """HasVar node type for Jac Ast."""
1774
1968
 
1775
1969
  def __init__(
@@ -1778,14 +1972,12 @@ class HasVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1778
1972
  type_tag: SubTag[Expr],
1779
1973
  value: Optional[Expr],
1780
1974
  defer: bool,
1781
- kid: Sequence[AstNode],
1782
- semstr: Optional[String] = None,
1975
+ kid: Sequence[UniNode],
1783
1976
  ) -> None:
1784
- """Initialize has var node."""
1785
1977
  self.name = name
1786
1978
  self.value = value
1787
1979
  self.defer = defer
1788
- AstNode.__init__(self, kid=kid)
1980
+ UniNode.__init__(self, kid=kid)
1789
1981
  AstSymbolNode.__init__(
1790
1982
  self,
1791
1983
  sym_name=name.value,
@@ -1793,20 +1985,14 @@ class HasVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1793
1985
  sym_category=SymbolType.HAS_VAR,
1794
1986
  )
1795
1987
  AstTypedVarNode.__init__(self, type_tag=type_tag)
1796
- AstSemStrNode.__init__(self, semstr=semstr)
1797
1988
 
1798
1989
  def normalize(self, deep: bool = False) -> bool:
1799
- """Normalize has var node."""
1800
1990
  res = True
1801
1991
  if deep:
1802
1992
  res = self.name.normalize(deep)
1803
1993
  res = res and self.type_tag.normalize(deep) if self.type_tag else res
1804
1994
  res = res and self.value.normalize(deep) if self.value else res
1805
- res = res and self.semstr.normalize(deep) if self.semstr else res
1806
- new_kid: list[AstNode] = [self.name]
1807
- if self.semstr:
1808
- new_kid.append(self.gen_token(Tok.COLON))
1809
- new_kid.append(self.semstr)
1995
+ new_kid: list[UniNode] = [self.name]
1810
1996
  if self.type_tag:
1811
1997
  new_kid.append(self.type_tag)
1812
1998
  if self.value:
@@ -1819,27 +2005,27 @@ class HasVar(AstSymbolNode, AstTypedVarNode, AstSemStrNode):
1819
2005
  return res
1820
2006
 
1821
2007
 
1822
- class TypedCtxBlock(CodeBlockStmt):
2008
+ class TypedCtxBlock(CodeBlockStmt, UniScopeNode):
1823
2009
  """TypedCtxBlock node type for Jac Ast."""
1824
2010
 
1825
2011
  def __init__(
1826
2012
  self,
1827
2013
  type_ctx: Expr,
1828
2014
  body: SubNodeList[CodeBlockStmt],
1829
- kid: Sequence[AstNode],
2015
+ kid: Sequence[UniNode],
1830
2016
  ) -> None:
1831
- """Initialize typed context block node."""
1832
2017
  self.type_ctx = type_ctx
1833
2018
  self.body = body
1834
- AstNode.__init__(self, kid=kid)
2019
+ UniNode.__init__(self, kid=kid)
2020
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2021
+ CodeBlockStmt.__init__(self)
1835
2022
 
1836
2023
  def normalize(self, deep: bool = False) -> bool:
1837
- """Normalize typed context block node."""
1838
2024
  res = True
1839
2025
  if deep:
1840
2026
  res = self.type_ctx.normalize(deep)
1841
2027
  res = res and self.body.normalize(deep)
1842
- new_kid: list[AstNode] = [
2028
+ new_kid: list[UniNode] = [
1843
2029
  self.gen_token(Tok.RETURN_HINT),
1844
2030
  self.type_ctx,
1845
2031
  self.body,
@@ -1848,7 +2034,7 @@ class TypedCtxBlock(CodeBlockStmt):
1848
2034
  return res
1849
2035
 
1850
2036
 
1851
- class IfStmt(CodeBlockStmt, AstElseBodyNode):
2037
+ class IfStmt(CodeBlockStmt, AstElseBodyNode, UniScopeNode):
1852
2038
  """IfStmt node type for Jac Ast."""
1853
2039
 
1854
2040
  def __init__(
@@ -1856,22 +2042,22 @@ class IfStmt(CodeBlockStmt, AstElseBodyNode):
1856
2042
  condition: Expr,
1857
2043
  body: SubNodeList[CodeBlockStmt],
1858
2044
  else_body: Optional[ElseStmt | ElseIf],
1859
- kid: Sequence[AstNode],
2045
+ kid: Sequence[UniNode],
1860
2046
  ) -> None:
1861
- """Initialize if statement node."""
1862
2047
  self.condition = condition
1863
2048
  self.body = body
1864
- AstNode.__init__(self, kid=kid)
2049
+ UniNode.__init__(self, kid=kid)
1865
2050
  AstElseBodyNode.__init__(self, else_body=else_body)
2051
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2052
+ CodeBlockStmt.__init__(self)
1866
2053
 
1867
2054
  def normalize(self, deep: bool = False) -> bool:
1868
- """Normalize if statement node."""
1869
2055
  res = True
1870
2056
  if deep:
1871
2057
  res = self.condition.normalize(deep)
1872
2058
  res = res and self.body.normalize(deep)
1873
2059
  res = res and self.else_body.normalize(deep) if self.else_body else res
1874
- new_kid: list[AstNode] = [
2060
+ new_kid: list[UniNode] = [
1875
2061
  self.gen_token(Tok.KW_IF),
1876
2062
  self.condition,
1877
2063
  self.body,
@@ -1883,16 +2069,15 @@ class IfStmt(CodeBlockStmt, AstElseBodyNode):
1883
2069
 
1884
2070
 
1885
2071
  class ElseIf(IfStmt):
1886
- """ElseIfs node type for Jac Ast."""
2072
+ """ElseIf node type for Jac Ast."""
1887
2073
 
1888
2074
  def normalize(self, deep: bool = False) -> bool:
1889
- """Normalize else if statement node."""
1890
2075
  res = True
1891
2076
  if deep:
1892
2077
  res = self.condition.normalize(deep)
1893
2078
  res = res and self.body.normalize(deep)
1894
2079
  res = res and self.else_body.normalize(deep) if self.else_body else res
1895
- new_kid: list[AstNode] = [
2080
+ new_kid: list[UniNode] = [
1896
2081
  self.gen_token(Tok.KW_ELIF),
1897
2082
  self.condition,
1898
2083
  self.body,
@@ -1903,24 +2088,23 @@ class ElseIf(IfStmt):
1903
2088
  return res
1904
2089
 
1905
2090
 
1906
- class ElseStmt(AstNode):
1907
- """Else node type for Jac Ast."""
2091
+ class ElseStmt(UniScopeNode):
2092
+ """ElseStmt node type for Jac Ast."""
1908
2093
 
1909
2094
  def __init__(
1910
2095
  self,
1911
2096
  body: SubNodeList[CodeBlockStmt],
1912
- kid: Sequence[AstNode],
2097
+ kid: Sequence[UniNode],
1913
2098
  ) -> None:
1914
- """Initialize else node."""
1915
2099
  self.body = body
1916
- AstNode.__init__(self, kid=kid)
2100
+ UniNode.__init__(self, kid=kid)
2101
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
1917
2102
 
1918
2103
  def normalize(self, deep: bool = False) -> bool:
1919
- """Normalize else statement node."""
1920
2104
  res = True
1921
2105
  if deep:
1922
2106
  res = self.body.normalize(deep)
1923
- new_kid: list[AstNode] = [
2107
+ new_kid: list[UniNode] = [
1924
2108
  self.gen_token(Tok.KW_ELSE),
1925
2109
  self.body,
1926
2110
  ]
@@ -1935,18 +2119,17 @@ class ExprStmt(CodeBlockStmt):
1935
2119
  self,
1936
2120
  expr: Expr,
1937
2121
  in_fstring: bool,
1938
- kid: Sequence[AstNode],
2122
+ kid: Sequence[UniNode],
1939
2123
  ) -> None:
1940
- """Initialize expr statement node."""
1941
2124
  self.expr = expr
1942
2125
  self.in_fstring = in_fstring
1943
- AstNode.__init__(self, kid=kid)
2126
+ UniNode.__init__(self, kid=kid)
2127
+ CodeBlockStmt.__init__(self)
1944
2128
 
1945
2129
  def normalize(self, deep: bool = True) -> bool:
1946
- """Normalize ast node."""
1947
2130
  if deep:
1948
2131
  res = self.expr.normalize(deep)
1949
- new_kid: list[AstNode] = []
2132
+ new_kid: list[UniNode] = []
1950
2133
  if self.in_fstring:
1951
2134
  new_kid.append(self.expr)
1952
2135
  else:
@@ -1956,7 +2139,7 @@ class ExprStmt(CodeBlockStmt):
1956
2139
  return res and self.expr is not None
1957
2140
 
1958
2141
 
1959
- class TryStmt(AstElseBodyNode, CodeBlockStmt):
2142
+ class TryStmt(AstElseBodyNode, CodeBlockStmt, UniScopeNode):
1960
2143
  """TryStmt node type for Jac Ast."""
1961
2144
 
1962
2145
  def __init__(
@@ -1965,17 +2148,17 @@ class TryStmt(AstElseBodyNode, CodeBlockStmt):
1965
2148
  excepts: Optional[SubNodeList[Except]],
1966
2149
  else_body: Optional[ElseStmt],
1967
2150
  finally_body: Optional[FinallyStmt],
1968
- kid: Sequence[AstNode],
2151
+ kid: Sequence[UniNode],
1969
2152
  ) -> None:
1970
- """Initialize try statement node."""
1971
2153
  self.body = body
1972
2154
  self.excepts = excepts
1973
2155
  self.finally_body = finally_body
1974
- AstNode.__init__(self, kid=kid)
2156
+ UniNode.__init__(self, kid=kid)
1975
2157
  AstElseBodyNode.__init__(self, else_body=else_body)
2158
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2159
+ CodeBlockStmt.__init__(self)
1976
2160
 
1977
2161
  def normalize(self, deep: bool = False) -> bool:
1978
- """Normalize try statement node."""
1979
2162
  res = True
1980
2163
  if deep:
1981
2164
  res = self.body.normalize(deep)
@@ -1984,7 +2167,7 @@ class TryStmt(AstElseBodyNode, CodeBlockStmt):
1984
2167
  res = (
1985
2168
  res and self.finally_body.normalize(deep) if self.finally_body else res
1986
2169
  )
1987
- new_kid: list[AstNode] = [
2170
+ new_kid: list[UniNode] = [
1988
2171
  self.gen_token(Tok.KW_TRY),
1989
2172
  ]
1990
2173
  new_kid.append(self.body)
@@ -1998,7 +2181,7 @@ class TryStmt(AstElseBodyNode, CodeBlockStmt):
1998
2181
  return res
1999
2182
 
2000
2183
 
2001
- class Except(CodeBlockStmt):
2184
+ class Except(CodeBlockStmt, UniScopeNode):
2002
2185
  """Except node type for Jac Ast."""
2003
2186
 
2004
2187
  def __init__(
@@ -2006,22 +2189,22 @@ class Except(CodeBlockStmt):
2006
2189
  ex_type: Expr,
2007
2190
  name: Optional[Name],
2008
2191
  body: SubNodeList[CodeBlockStmt],
2009
- kid: Sequence[AstNode],
2192
+ kid: Sequence[UniNode],
2010
2193
  ) -> None:
2011
- """Initialize except node."""
2012
2194
  self.ex_type = ex_type
2013
2195
  self.name = name
2014
2196
  self.body = body
2015
- AstNode.__init__(self, kid=kid)
2197
+ UniNode.__init__(self, kid=kid)
2198
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2199
+ CodeBlockStmt.__init__(self)
2016
2200
 
2017
2201
  def normalize(self, deep: bool = False) -> bool:
2018
- """Normalize except node."""
2019
2202
  res = True
2020
2203
  if deep:
2021
2204
  res = self.ex_type.normalize(deep)
2022
2205
  res = res and self.name.normalize(deep) if self.name else res
2023
2206
  res = res and self.body.normalize(deep) if self.body else res
2024
- new_kid: list[AstNode] = [
2207
+ new_kid: list[UniNode] = [
2025
2208
  self.gen_token(Tok.KW_EXCEPT),
2026
2209
  self.ex_type,
2027
2210
  ]
@@ -2033,24 +2216,24 @@ class Except(CodeBlockStmt):
2033
2216
  return res
2034
2217
 
2035
2218
 
2036
- class FinallyStmt(CodeBlockStmt):
2219
+ class FinallyStmt(CodeBlockStmt, UniScopeNode):
2037
2220
  """FinallyStmt node type for Jac Ast."""
2038
2221
 
2039
2222
  def __init__(
2040
2223
  self,
2041
2224
  body: SubNodeList[CodeBlockStmt],
2042
- kid: Sequence[AstNode],
2225
+ kid: Sequence[UniNode],
2043
2226
  ) -> None:
2044
- """Initialize finally statement node."""
2045
2227
  self.body = body
2046
- AstNode.__init__(self, kid=kid)
2228
+ UniNode.__init__(self, kid=kid)
2229
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2230
+ CodeBlockStmt.__init__(self)
2047
2231
 
2048
2232
  def normalize(self, deep: bool = False) -> bool:
2049
- """Normalize finally statement node."""
2050
2233
  res = True
2051
2234
  if deep:
2052
2235
  res = self.body.normalize(deep)
2053
- new_kid: list[AstNode] = [
2236
+ new_kid: list[UniNode] = [
2054
2237
  self.gen_token(Tok.KW_FINALLY),
2055
2238
  ]
2056
2239
  new_kid.append(self.body)
@@ -2058,8 +2241,8 @@ class FinallyStmt(CodeBlockStmt):
2058
2241
  return res
2059
2242
 
2060
2243
 
2061
- class IterForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
2062
- """IterFor node type for Jac Ast."""
2244
+ class IterForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt, UniScopeNode):
2245
+ """IterForStmt node type for Jac Ast."""
2063
2246
 
2064
2247
  def __init__(
2065
2248
  self,
@@ -2069,19 +2252,19 @@ class IterForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
2069
2252
  count_by: Assignment,
2070
2253
  body: SubNodeList[CodeBlockStmt],
2071
2254
  else_body: Optional[ElseStmt],
2072
- kid: Sequence[AstNode],
2255
+ kid: Sequence[UniNode],
2073
2256
  ) -> None:
2074
- """Initialize iter for node."""
2075
2257
  self.iter = iter
2076
2258
  self.condition = condition
2077
2259
  self.count_by = count_by
2078
2260
  self.body = body
2079
- AstNode.__init__(self, kid=kid)
2261
+ UniNode.__init__(self, kid=kid)
2080
2262
  AstAsyncNode.__init__(self, is_async=is_async)
2081
2263
  AstElseBodyNode.__init__(self, else_body=else_body)
2264
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2265
+ CodeBlockStmt.__init__(self)
2082
2266
 
2083
2267
  def normalize(self, deep: bool = False) -> bool:
2084
- """Normalize iter for node."""
2085
2268
  res = True
2086
2269
  if deep:
2087
2270
  res = self.iter.normalize(deep)
@@ -2089,7 +2272,7 @@ class IterForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
2089
2272
  res = self.count_by.normalize(deep)
2090
2273
  res = self.body.normalize(deep)
2091
2274
  res = self.else_body.normalize(deep) if self.else_body else res
2092
- new_kid: list[AstNode] = []
2275
+ new_kid: list[UniNode] = []
2093
2276
  if self.is_async:
2094
2277
  new_kid.append(self.gen_token(Tok.KW_ASYNC))
2095
2278
  new_kid.append(self.gen_token(Tok.KW_FOR))
@@ -2105,8 +2288,8 @@ class IterForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
2105
2288
  return res
2106
2289
 
2107
2290
 
2108
- class InForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
2109
- """InFor node type for Jac Ast."""
2291
+ class InForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt, UniScopeNode):
2292
+ """InForStmt node type for Jac Ast."""
2110
2293
 
2111
2294
  def __init__(
2112
2295
  self,
@@ -2115,25 +2298,25 @@ class InForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
2115
2298
  collection: Expr,
2116
2299
  body: SubNodeList[CodeBlockStmt],
2117
2300
  else_body: Optional[ElseStmt],
2118
- kid: Sequence[AstNode],
2301
+ kid: Sequence[UniNode],
2119
2302
  ) -> None:
2120
- """Initialize in for node."""
2121
2303
  self.target = target
2122
2304
  self.collection = collection
2123
2305
  self.body = body
2124
- AstNode.__init__(self, kid=kid)
2306
+ UniNode.__init__(self, kid=kid)
2125
2307
  AstAsyncNode.__init__(self, is_async=is_async)
2126
2308
  AstElseBodyNode.__init__(self, else_body=else_body)
2309
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2310
+ CodeBlockStmt.__init__(self)
2127
2311
 
2128
2312
  def normalize(self, deep: bool = False) -> bool:
2129
- """Normalize in for node."""
2130
2313
  res = True
2131
2314
  if deep:
2132
2315
  res = self.target.normalize(deep)
2133
2316
  res = res and self.collection.normalize(deep)
2134
2317
  res = res and self.body.normalize(deep)
2135
2318
  res = res and self.else_body.normalize(deep) if self.else_body else res
2136
- new_kid: list[AstNode] = []
2319
+ new_kid: list[UniNode] = []
2137
2320
  if self.is_async:
2138
2321
  new_kid.append(self.gen_token(Tok.KW_ASYNC))
2139
2322
  new_kid.append(self.gen_token(Tok.KW_FOR))
@@ -2149,27 +2332,27 @@ class InForStmt(AstAsyncNode, AstElseBodyNode, CodeBlockStmt):
2149
2332
  return res
2150
2333
 
2151
2334
 
2152
- class WhileStmt(CodeBlockStmt):
2335
+ class WhileStmt(CodeBlockStmt, UniScopeNode):
2153
2336
  """WhileStmt node type for Jac Ast."""
2154
2337
 
2155
2338
  def __init__(
2156
2339
  self,
2157
2340
  condition: Expr,
2158
2341
  body: SubNodeList[CodeBlockStmt],
2159
- kid: Sequence[AstNode],
2342
+ kid: Sequence[UniNode],
2160
2343
  ) -> None:
2161
- """Initialize while statement node."""
2162
2344
  self.condition = condition
2163
2345
  self.body = body
2164
- AstNode.__init__(self, kid=kid)
2346
+ UniNode.__init__(self, kid=kid)
2347
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2348
+ CodeBlockStmt.__init__(self)
2165
2349
 
2166
2350
  def normalize(self, deep: bool = False) -> bool:
2167
- """Normalize while statement node."""
2168
2351
  res = True
2169
2352
  if deep:
2170
2353
  res = self.condition.normalize(deep)
2171
2354
  res = res and self.body.normalize(deep)
2172
- new_kid: list[AstNode] = [
2355
+ new_kid: list[UniNode] = [
2173
2356
  self.gen_token(Tok.KW_WHILE),
2174
2357
  self.condition,
2175
2358
  ]
@@ -2179,7 +2362,7 @@ class WhileStmt(CodeBlockStmt):
2179
2362
  return res
2180
2363
 
2181
2364
 
2182
- class WithStmt(AstAsyncNode, CodeBlockStmt):
2365
+ class WithStmt(AstAsyncNode, CodeBlockStmt, UniScopeNode):
2183
2366
  """WithStmt node type for Jac Ast."""
2184
2367
 
2185
2368
  def __init__(
@@ -2187,54 +2370,49 @@ class WithStmt(AstAsyncNode, CodeBlockStmt):
2187
2370
  is_async: bool,
2188
2371
  exprs: SubNodeList[ExprAsItem],
2189
2372
  body: SubNodeList[CodeBlockStmt],
2190
- kid: Sequence[AstNode],
2373
+ kid: Sequence[UniNode],
2191
2374
  ) -> None:
2192
- """Initialize with statement node."""
2193
2375
  self.exprs = exprs
2194
2376
  self.body = body
2195
- AstNode.__init__(self, kid=kid)
2377
+ UniNode.__init__(self, kid=kid)
2196
2378
  AstAsyncNode.__init__(self, is_async=is_async)
2379
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2380
+ CodeBlockStmt.__init__(self)
2197
2381
 
2198
2382
  def normalize(self, deep: bool = False) -> bool:
2199
- """Normalize with statement node."""
2200
2383
  res = True
2201
2384
  if deep:
2202
2385
  res = self.exprs.normalize(deep)
2203
2386
  res = res and self.body.normalize(deep)
2204
- new_kid: list[AstNode] = []
2387
+ new_kid: list[UniNode] = []
2205
2388
  if self.is_async:
2206
2389
  new_kid.append(self.gen_token(Tok.KW_ASYNC))
2207
2390
  new_kid.append(self.gen_token(Tok.KW_WITH))
2208
2391
  new_kid.append(self.exprs)
2209
- new_kid.append(self.gen_token(Tok.LBRACE))
2210
2392
  new_kid.append(self.body)
2211
- new_kid.append(self.gen_token(Tok.RBRACE))
2212
-
2213
2393
  self.set_kids(nodes=new_kid)
2214
2394
  return res
2215
2395
 
2216
2396
 
2217
- class ExprAsItem(AstNode):
2397
+ class ExprAsItem(UniNode):
2218
2398
  """ExprAsItem node type for Jac Ast."""
2219
2399
 
2220
2400
  def __init__(
2221
2401
  self,
2222
2402
  expr: Expr,
2223
2403
  alias: Optional[Expr],
2224
- kid: Sequence[AstNode],
2404
+ kid: Sequence[UniNode],
2225
2405
  ) -> None:
2226
- """Initialize module item node."""
2227
2406
  self.expr = expr
2228
2407
  self.alias = alias
2229
- AstNode.__init__(self, kid=kid)
2408
+ UniNode.__init__(self, kid=kid)
2230
2409
 
2231
2410
  def normalize(self, deep: bool = True) -> bool:
2232
- """Normalize ast node."""
2233
2411
  res = True
2234
2412
  if deep:
2235
2413
  res = self.expr.normalize(deep)
2236
2414
  res = res and self.alias.normalize(deep) if self.alias else res
2237
- new_kid: list[AstNode] = [self.expr]
2415
+ new_kid: list[UniNode] = [self.expr]
2238
2416
  if self.alias:
2239
2417
  new_kid.append(self.gen_token(Tok.KW_AS))
2240
2418
  new_kid.append(self.alias)
@@ -2249,20 +2427,19 @@ class RaiseStmt(CodeBlockStmt):
2249
2427
  self,
2250
2428
  cause: Optional[Expr],
2251
2429
  from_target: Optional[Expr],
2252
- kid: Sequence[AstNode],
2430
+ kid: Sequence[UniNode],
2253
2431
  ) -> None:
2254
- """Initialize raise statement node."""
2255
2432
  self.cause = cause
2256
2433
  self.from_target = from_target
2257
- AstNode.__init__(self, kid=kid)
2434
+ UniNode.__init__(self, kid=kid)
2435
+ CodeBlockStmt.__init__(self)
2258
2436
 
2259
2437
  def normalize(self, deep: bool = False) -> bool:
2260
- """Normalize raise statement node."""
2261
2438
  res = True
2262
2439
  if deep:
2263
2440
  res = res and self.cause.normalize(deep) if self.cause else res
2264
2441
  res = res and self.from_target.normalize(deep) if self.from_target else res
2265
- new_kid: list[AstNode] = [self.gen_token(Tok.KW_RAISE)]
2442
+ new_kid: list[UniNode] = [self.gen_token(Tok.KW_RAISE)]
2266
2443
  if self.cause:
2267
2444
  new_kid.append(self.cause)
2268
2445
  if self.from_target:
@@ -2280,20 +2457,19 @@ class AssertStmt(CodeBlockStmt):
2280
2457
  self,
2281
2458
  condition: Expr,
2282
2459
  error_msg: Optional[Expr],
2283
- kid: Sequence[AstNode],
2460
+ kid: Sequence[UniNode],
2284
2461
  ) -> None:
2285
- """Initialize assert statement node."""
2286
2462
  self.condition = condition
2287
2463
  self.error_msg = error_msg
2288
- AstNode.__init__(self, kid=kid)
2464
+ UniNode.__init__(self, kid=kid)
2465
+ CodeBlockStmt.__init__(self)
2289
2466
 
2290
2467
  def normalize(self, deep: bool = False) -> bool:
2291
- """Normalize assert statement node."""
2292
2468
  res = True
2293
2469
  if deep:
2294
2470
  res = self.condition.normalize(deep)
2295
2471
  res = res and self.error_msg.normalize(deep) if self.error_msg else res
2296
- new_kid: list[AstNode] = [
2472
+ new_kid: list[UniNode] = [
2297
2473
  self.gen_token(Tok.KW_ASSERT),
2298
2474
  self.condition,
2299
2475
  ]
@@ -2306,23 +2482,22 @@ class AssertStmt(CodeBlockStmt):
2306
2482
 
2307
2483
 
2308
2484
  class CheckStmt(CodeBlockStmt):
2309
- """DeleteStmt node type for Jac Ast."""
2485
+ """CheckStmt node type for Jac Ast."""
2310
2486
 
2311
2487
  def __init__(
2312
2488
  self,
2313
2489
  target: Expr,
2314
- kid: Sequence[AstNode],
2490
+ kid: Sequence[UniNode],
2315
2491
  ) -> None:
2316
- """Initialize delete statement node."""
2317
2492
  self.target = target
2318
- AstNode.__init__(self, kid=kid)
2493
+ UniNode.__init__(self, kid=kid)
2494
+ CodeBlockStmt.__init__(self)
2319
2495
 
2320
2496
  def normalize(self, deep: bool = False) -> bool:
2321
- """Normalize delete statement node."""
2322
2497
  res = True
2323
2498
  if deep:
2324
2499
  res = self.target.normalize(deep)
2325
- new_kid: list[AstNode] = [
2500
+ new_kid: list[UniNode] = [
2326
2501
  self.gen_token(Tok.KW_CHECK),
2327
2502
  self.target,
2328
2503
  self.gen_token(Tok.SEMI),
@@ -2337,18 +2512,17 @@ class CtrlStmt(CodeBlockStmt):
2337
2512
  def __init__(
2338
2513
  self,
2339
2514
  ctrl: Token,
2340
- kid: Sequence[AstNode],
2515
+ kid: Sequence[UniNode],
2341
2516
  ) -> None:
2342
- """Initialize control statement node."""
2343
2517
  self.ctrl = ctrl
2344
- AstNode.__init__(self, kid=kid)
2518
+ UniNode.__init__(self, kid=kid)
2519
+ CodeBlockStmt.__init__(self)
2345
2520
 
2346
2521
  def normalize(self, deep: bool = False) -> bool:
2347
- """Normalize control statement node."""
2348
2522
  res = True
2349
2523
  if deep:
2350
2524
  res = self.ctrl.normalize(deep)
2351
- new_kid: list[AstNode] = [self.ctrl, self.gen_token(Tok.SEMI)]
2525
+ new_kid: list[UniNode] = [self.ctrl, self.gen_token(Tok.SEMI)]
2352
2526
  self.set_kids(nodes=new_kid)
2353
2527
  return res
2354
2528
 
@@ -2359,18 +2533,26 @@ class DeleteStmt(CodeBlockStmt):
2359
2533
  def __init__(
2360
2534
  self,
2361
2535
  target: Expr,
2362
- kid: Sequence[AstNode],
2536
+ kid: Sequence[UniNode],
2363
2537
  ) -> None:
2364
- """Initialize delete statement node."""
2365
2538
  self.target = target
2366
- AstNode.__init__(self, kid=kid)
2539
+ UniNode.__init__(self, kid=kid)
2540
+ CodeBlockStmt.__init__(self)
2541
+
2542
+ @property
2543
+ def py_ast_targets(self) -> list[ast3.AST]:
2544
+ """Get Python AST targets (without setting ctx)."""
2545
+ return (
2546
+ self.target.values.gen.py_ast
2547
+ if isinstance(self.target, TupleVal) and self.target.values
2548
+ else self.target.gen.py_ast
2549
+ )
2367
2550
 
2368
2551
  def normalize(self, deep: bool = False) -> bool:
2369
- """Normalize delete statement node."""
2370
2552
  res = True
2371
2553
  if deep:
2372
2554
  res = self.target.normalize(deep)
2373
- new_kid: list[AstNode] = [
2555
+ new_kid: list[UniNode] = [
2374
2556
  self.gen_token(Tok.KW_DELETE),
2375
2557
  self.target,
2376
2558
  self.gen_token(Tok.SEMI),
@@ -2385,18 +2567,17 @@ class ReportStmt(CodeBlockStmt):
2385
2567
  def __init__(
2386
2568
  self,
2387
2569
  expr: Expr,
2388
- kid: Sequence[AstNode],
2570
+ kid: Sequence[UniNode],
2389
2571
  ) -> None:
2390
- """Initialize report statement node."""
2391
2572
  self.expr = expr
2392
- AstNode.__init__(self, kid=kid)
2573
+ UniNode.__init__(self, kid=kid)
2574
+ CodeBlockStmt.__init__(self)
2393
2575
 
2394
2576
  def normalize(self, deep: bool = False) -> bool:
2395
- """Normalize report statement node."""
2396
2577
  res = True
2397
2578
  if deep:
2398
2579
  res = self.expr.normalize(deep)
2399
- new_kid: list[AstNode] = [
2580
+ new_kid: list[UniNode] = [
2400
2581
  self.gen_token(Tok.KW_REPORT),
2401
2582
  self.expr,
2402
2583
  self.gen_token(Tok.SEMI),
@@ -2411,18 +2592,17 @@ class ReturnStmt(CodeBlockStmt):
2411
2592
  def __init__(
2412
2593
  self,
2413
2594
  expr: Optional[Expr],
2414
- kid: Sequence[AstNode],
2595
+ kid: Sequence[UniNode],
2415
2596
  ) -> None:
2416
- """Initialize return statement node."""
2417
2597
  self.expr = expr
2418
- AstNode.__init__(self, kid=kid)
2598
+ UniNode.__init__(self, kid=kid)
2599
+ CodeBlockStmt.__init__(self)
2419
2600
 
2420
2601
  def normalize(self, deep: bool = False) -> bool:
2421
- """Normalize return statement node."""
2422
2602
  res = True
2423
2603
  if deep:
2424
2604
  res = self.expr.normalize(deep) if self.expr else res
2425
- new_kid: list[AstNode] = [
2605
+ new_kid: list[UniNode] = [
2426
2606
  self.gen_token(Tok.KW_RETURN),
2427
2607
  ]
2428
2608
  if self.expr:
@@ -2438,19 +2618,18 @@ class IgnoreStmt(WalkerStmtOnlyNode, CodeBlockStmt):
2438
2618
  def __init__(
2439
2619
  self,
2440
2620
  target: Expr,
2441
- kid: Sequence[AstNode],
2621
+ kid: Sequence[UniNode],
2442
2622
  ) -> None:
2443
- """Initialize ignore statement node."""
2444
2623
  self.target = target
2445
- AstNode.__init__(self, kid=kid)
2624
+ UniNode.__init__(self, kid=kid)
2446
2625
  WalkerStmtOnlyNode.__init__(self)
2626
+ CodeBlockStmt.__init__(self)
2447
2627
 
2448
2628
  def normalize(self, deep: bool = False) -> bool:
2449
- """Normalize ignore statement node."""
2450
2629
  res = True
2451
2630
  if deep:
2452
2631
  res = self.target.normalize(deep)
2453
- new_kid: list[AstNode] = [
2632
+ new_kid: list[UniNode] = [
2454
2633
  self.gen_token(Tok.KW_IGNORE),
2455
2634
  self.target,
2456
2635
  self.gen_token(Tok.SEMI),
@@ -2464,30 +2643,29 @@ class VisitStmt(WalkerStmtOnlyNode, AstElseBodyNode, CodeBlockStmt):
2464
2643
 
2465
2644
  def __init__(
2466
2645
  self,
2467
- vis_type: Optional[SubNodeList[Expr]],
2646
+ insert_loc: Optional[Expr],
2468
2647
  target: Expr,
2469
2648
  else_body: Optional[ElseStmt],
2470
- kid: Sequence[AstNode],
2649
+ kid: Sequence[UniNode],
2471
2650
  ) -> None:
2472
- """Initialize visit statement node."""
2473
- self.vis_type = vis_type
2651
+ self.insert_loc = insert_loc
2474
2652
  self.target = target
2475
- AstNode.__init__(self, kid=kid)
2653
+ UniNode.__init__(self, kid=kid)
2476
2654
  WalkerStmtOnlyNode.__init__(self)
2477
2655
  AstElseBodyNode.__init__(self, else_body=else_body)
2656
+ CodeBlockStmt.__init__(self)
2478
2657
 
2479
2658
  def normalize(self, deep: bool = False) -> bool:
2480
- """Normalize visit statement node."""
2481
2659
  res = True
2482
2660
  if deep:
2483
- res = self.vis_type.normalize(deep) if self.vis_type else res
2661
+ res = self.insert_loc.normalize(deep) if self.insert_loc else res
2484
2662
  res = self.target.normalize(deep)
2485
2663
  res = res and self.else_body.normalize(deep) if self.else_body else res
2486
- new_kid: list[AstNode] = []
2664
+ new_kid: list[UniNode] = []
2487
2665
  new_kid.append(self.gen_token(Tok.KW_VISIT))
2488
- if self.vis_type:
2666
+ if self.insert_loc:
2489
2667
  new_kid.append(self.gen_token(Tok.COLON))
2490
- new_kid.append(self.vis_type)
2668
+ new_kid.append(self.insert_loc)
2491
2669
  new_kid.append(self.gen_token(Tok.COLON))
2492
2670
  new_kid.append(self.target)
2493
2671
  if self.else_body:
@@ -2498,51 +2676,21 @@ class VisitStmt(WalkerStmtOnlyNode, AstElseBodyNode, CodeBlockStmt):
2498
2676
  return res
2499
2677
 
2500
2678
 
2501
- class RevisitStmt(WalkerStmtOnlyNode, AstElseBodyNode, CodeBlockStmt):
2502
- """ReVisitStmt node type for Jac Ast."""
2503
-
2504
- def __init__(
2505
- self,
2506
- hops: Optional[Expr],
2507
- else_body: Optional[ElseStmt],
2508
- kid: Sequence[AstNode],
2509
- ) -> None:
2510
- """Initialize revisit statement node."""
2511
- self.hops = hops
2512
- AstNode.__init__(self, kid=kid)
2513
- WalkerStmtOnlyNode.__init__(self)
2514
- AstElseBodyNode.__init__(self, else_body=else_body)
2515
-
2516
- def normalize(self, deep: bool = False) -> bool:
2517
- """Normalize revisit statement node."""
2518
- res = True
2519
- if deep:
2520
- res = self.hops.normalize(deep) if self.hops else res
2521
- res = res and self.else_body.normalize(deep) if self.else_body else res
2522
- new_kid: list[AstNode] = [self.gen_token(Tok.KW_REVISIT)]
2523
- if self.hops:
2524
- new_kid.append(self.hops)
2525
- if self.else_body:
2526
- new_kid.append(self.else_body)
2527
- new_kid.append(self.gen_token(Tok.SEMI))
2528
- self.set_kids(nodes=new_kid)
2529
- return res
2530
-
2531
-
2532
2679
  class DisengageStmt(WalkerStmtOnlyNode, CodeBlockStmt):
2533
2680
  """DisengageStmt node type for Jac Ast."""
2534
2681
 
2535
2682
  def __init__(
2536
2683
  self,
2537
- kid: Sequence[AstNode],
2684
+ kid: Sequence[UniNode],
2538
2685
  ) -> None:
2539
2686
  """Initialize disengage statement node."""
2540
- AstNode.__init__(self, kid=kid)
2687
+ UniNode.__init__(self, kid=kid)
2541
2688
  WalkerStmtOnlyNode.__init__(self)
2689
+ CodeBlockStmt.__init__(self)
2542
2690
 
2543
2691
  def normalize(self, deep: bool = False) -> bool:
2544
2692
  """Normalize disengage statement node."""
2545
- new_kid: list[AstNode] = [
2693
+ new_kid: list[UniNode] = [
2546
2694
  self.gen_token(Tok.KW_DISENGAGE),
2547
2695
  self.gen_token(Tok.SEMI),
2548
2696
  ]
@@ -2551,24 +2699,22 @@ class DisengageStmt(WalkerStmtOnlyNode, CodeBlockStmt):
2551
2699
 
2552
2700
 
2553
2701
  class AwaitExpr(Expr):
2554
- """AwaitStmt node type for Jac Ast."""
2702
+ """AwaitExpr node type for Jac Ast."""
2555
2703
 
2556
2704
  def __init__(
2557
2705
  self,
2558
2706
  target: Expr,
2559
- kid: Sequence[AstNode],
2707
+ kid: Sequence[UniNode],
2560
2708
  ) -> None:
2561
- """Initialize sync statement node."""
2562
2709
  self.target = target
2563
- AstNode.__init__(self, kid=kid)
2710
+ UniNode.__init__(self, kid=kid)
2564
2711
  Expr.__init__(self)
2565
2712
 
2566
2713
  def normalize(self, deep: bool = False) -> bool:
2567
- """Normalize sync statement node."""
2568
2714
  res = True
2569
2715
  if deep:
2570
2716
  res = self.target.normalize(deep)
2571
- new_kid: list[AstNode] = [
2717
+ new_kid: list[UniNode] = [
2572
2718
  self.gen_token(Tok.KW_AWAIT),
2573
2719
  self.target,
2574
2720
  ]
@@ -2582,18 +2728,17 @@ class GlobalStmt(CodeBlockStmt):
2582
2728
  def __init__(
2583
2729
  self,
2584
2730
  target: SubNodeList[NameAtom],
2585
- kid: Sequence[AstNode],
2731
+ kid: Sequence[UniNode],
2586
2732
  ) -> None:
2587
- """Initialize global statement node."""
2588
2733
  self.target = target
2589
- AstNode.__init__(self, kid=kid)
2734
+ UniNode.__init__(self, kid=kid)
2735
+ CodeBlockStmt.__init__(self)
2590
2736
 
2591
2737
  def normalize(self, deep: bool = False) -> bool:
2592
- """Normalize global statement node."""
2593
2738
  res = True
2594
2739
  if deep:
2595
2740
  res = self.target.normalize(deep)
2596
- new_kid: list[AstNode] = [
2741
+ new_kid: list[UniNode] = [
2597
2742
  self.gen_token(Tok.GLOBAL_OP),
2598
2743
  self.target,
2599
2744
  self.gen_token(Tok.SEMI),
@@ -2603,14 +2748,13 @@ class GlobalStmt(CodeBlockStmt):
2603
2748
 
2604
2749
 
2605
2750
  class NonLocalStmt(GlobalStmt):
2606
- """NonlocalStmt node type for Jac Ast."""
2751
+ """NonLocalStmt node type for Jac Ast."""
2607
2752
 
2608
2753
  def normalize(self, deep: bool = False) -> bool:
2609
- """Normalize nonlocal statement node."""
2610
2754
  res = True
2611
2755
  if deep:
2612
2756
  res = self.target.normalize(deep)
2613
- new_kid: list[AstNode] = [
2757
+ new_kid: list[UniNode] = [
2614
2758
  self.gen_token(Tok.NONLOCAL_OP),
2615
2759
  self.target,
2616
2760
  self.gen_token(Tok.SEMI),
@@ -2619,7 +2763,7 @@ class NonLocalStmt(GlobalStmt):
2619
2763
  return res
2620
2764
 
2621
2765
 
2622
- class Assignment(AstSemStrNode, AstTypedVarNode, EnumBlockStmt, CodeBlockStmt):
2766
+ class Assignment(AstTypedVarNode, EnumBlockStmt, CodeBlockStmt):
2623
2767
  """Assignment node type for Jac Ast."""
2624
2768
 
2625
2769
  def __init__(
@@ -2627,35 +2771,29 @@ class Assignment(AstSemStrNode, AstTypedVarNode, EnumBlockStmt, CodeBlockStmt):
2627
2771
  target: SubNodeList[Expr],
2628
2772
  value: Optional[Expr | YieldExpr],
2629
2773
  type_tag: Optional[SubTag[Expr]],
2630
- kid: Sequence[AstNode],
2774
+ kid: Sequence[UniNode],
2631
2775
  mutable: bool = True,
2632
2776
  aug_op: Optional[Token] = None,
2633
- semstr: Optional[String] = None,
2634
2777
  is_enum_stmt: bool = False,
2635
2778
  ) -> None:
2636
- """Initialize assignment node."""
2637
2779
  self.target = target
2638
2780
  self.value = value
2639
2781
  self.mutable = mutable
2640
2782
  self.aug_op = aug_op
2641
2783
  self.is_enum_stmt = is_enum_stmt
2642
- AstNode.__init__(self, kid=kid)
2643
- AstSemStrNode.__init__(self, semstr=semstr)
2784
+ UniNode.__init__(self, kid=kid)
2644
2785
  AstTypedVarNode.__init__(self, type_tag=type_tag)
2786
+ CodeBlockStmt.__init__(self)
2645
2787
 
2646
2788
  def normalize(self, deep: bool = True) -> bool:
2647
- """Normalize ast node."""
2648
2789
  res = True
2649
2790
  if deep:
2650
2791
  res = self.target.normalize(deep)
2651
2792
  res = res and self.value.normalize(deep) if self.value else res
2652
2793
  res = res and self.type_tag.normalize(deep) if self.type_tag else res
2653
2794
  res = res and self.aug_op.normalize(deep) if self.aug_op else res
2654
- new_kid: list[AstNode] = []
2795
+ new_kid: list[UniNode] = []
2655
2796
  new_kid.append(self.target)
2656
- if self.semstr:
2657
- new_kid.append(self.gen_token(Tok.COLON))
2658
- new_kid.append(self.semstr)
2659
2797
  if self.type_tag:
2660
2798
  new_kid.append(self.type_tag)
2661
2799
  if self.aug_op:
@@ -2675,37 +2813,58 @@ class Assignment(AstSemStrNode, AstTypedVarNode, EnumBlockStmt, CodeBlockStmt):
2675
2813
  return res
2676
2814
 
2677
2815
 
2816
+ class ConcurrentExpr(Expr):
2817
+ """ConcurrentExpr node type for Jac Ast."""
2818
+
2819
+ def __init__(
2820
+ self,
2821
+ tok: Optional[Token],
2822
+ target: Expr,
2823
+ kid: Sequence[UniNode],
2824
+ ) -> None:
2825
+ UniNode.__init__(self, kid=kid)
2826
+ Expr.__init__(self)
2827
+ self.tok = tok
2828
+ self.target = target
2829
+
2830
+ def normalize(self, deep: bool = False) -> bool:
2831
+ res = True
2832
+ if deep:
2833
+ res = self.target.normalize(deep)
2834
+ res = res and self.target.normalize(deep) if self.target else res
2835
+ new_kid: list[UniNode] = []
2836
+ if isinstance(self.tok, Token) and self.tok.value == "flow":
2837
+ new_kid.append(self.gen_token(Tok.KW_FLOW))
2838
+ elif isinstance(self.tok, Token) and self.tok.value == "wait":
2839
+ new_kid.append(self.gen_token(Tok.KW_WAIT))
2840
+ new_kid.append(self.target)
2841
+ self.set_kids(nodes=new_kid)
2842
+ return res
2843
+
2844
+
2678
2845
  class BinaryExpr(Expr):
2679
- """ExprBinary node type for Jac Ast."""
2846
+ """BinaryExpr node type for Jac Ast."""
2680
2847
 
2681
2848
  def __init__(
2682
2849
  self,
2683
2850
  left: Expr,
2684
2851
  right: Expr,
2685
2852
  op: Token | DisconnectOp | ConnectOp,
2686
- kid: Sequence[AstNode],
2853
+ kid: Sequence[UniNode],
2687
2854
  ) -> None:
2688
- """Initialize binary expression node."""
2689
2855
  self.left = left
2690
2856
  self.right = right
2691
2857
  self.op = op
2692
- AstNode.__init__(self, kid=kid)
2858
+ UniNode.__init__(self, kid=kid)
2693
2859
  Expr.__init__(self)
2694
2860
 
2695
2861
  def normalize(self, deep: bool = False) -> bool:
2696
- """Normalize ast node."""
2697
2862
  res = True
2698
2863
  if deep:
2699
2864
  res = self.left.normalize(deep)
2700
2865
  res = res and self.right.normalize(deep) if self.right else res
2701
2866
  res = res and self.op.normalize(deep) if self.op else res
2702
- new_kid: list[AstNode] = [
2703
- self.gen_token(Tok.LPAREN),
2704
- self.left,
2705
- self.op,
2706
- self.right,
2707
- self.gen_token(Tok.RPAREN),
2708
- ]
2867
+ new_kid: list[UniNode] = [self.left, self.op, self.right]
2709
2868
  self.set_kids(nodes=new_kid)
2710
2869
  return res
2711
2870
 
@@ -2718,17 +2877,15 @@ class CompareExpr(Expr):
2718
2877
  left: Expr,
2719
2878
  rights: list[Expr],
2720
2879
  ops: list[Token],
2721
- kid: Sequence[AstNode],
2880
+ kid: Sequence[UniNode],
2722
2881
  ) -> None:
2723
- """Initialize binary expression node."""
2724
2882
  self.left = left
2725
2883
  self.rights = rights
2726
2884
  self.ops = ops
2727
- AstNode.__init__(self, kid=kid)
2885
+ UniNode.__init__(self, kid=kid)
2728
2886
  Expr.__init__(self)
2729
2887
 
2730
2888
  def normalize(self, deep: bool = False) -> bool:
2731
- """Normalize ast node."""
2732
2889
  res = True
2733
2890
  if deep:
2734
2891
  res = self.left.normalize(deep)
@@ -2736,7 +2893,7 @@ class CompareExpr(Expr):
2736
2893
  res = res and right.normalize(deep)
2737
2894
  for op in self.ops:
2738
2895
  res = res and op.normalize(deep)
2739
- new_kid: list[AstNode] = [self.left]
2896
+ new_kid: list[UniNode] = [self.left]
2740
2897
  for i, right in enumerate(self.rights):
2741
2898
  new_kid.append(self.ops[i])
2742
2899
  new_kid.append(right)
@@ -2751,22 +2908,20 @@ class BoolExpr(Expr):
2751
2908
  self,
2752
2909
  op: Token,
2753
2910
  values: list[Expr],
2754
- kid: Sequence[AstNode],
2911
+ kid: Sequence[UniNode],
2755
2912
  ) -> None:
2756
- """Initialize binary expression node."""
2757
2913
  self.values = values
2758
2914
  self.op = op
2759
- AstNode.__init__(self, kid=kid)
2915
+ UniNode.__init__(self, kid=kid)
2760
2916
  Expr.__init__(self)
2761
2917
 
2762
2918
  def normalize(self, deep: bool = False) -> bool:
2763
- """Normalize ast node."""
2764
2919
  res = True
2765
2920
  if deep:
2766
2921
  for value in self.values:
2767
2922
  res = res and value.normalize(deep)
2768
2923
  res = res and self.op.normalize(deep) if self.op else res
2769
- new_kid: list[AstNode] = []
2924
+ new_kid: list[UniNode] = []
2770
2925
  for i, value in enumerate(self.values):
2771
2926
  if i > 0:
2772
2927
  new_kid.append(self.op)
@@ -2775,90 +2930,81 @@ class BoolExpr(Expr):
2775
2930
  return res
2776
2931
 
2777
2932
 
2778
- class LambdaExpr(Expr):
2779
- """ExprLambda node type for Jac Ast."""
2933
+ class LambdaExpr(Expr, UniScopeNode):
2934
+ """LambdaExpr node type for Jac Ast."""
2780
2935
 
2781
2936
  def __init__(
2782
2937
  self,
2783
2938
  body: Expr,
2784
- kid: Sequence[AstNode],
2939
+ kid: Sequence[UniNode],
2785
2940
  signature: Optional[FuncSignature] = None,
2786
2941
  ) -> None:
2787
- """Initialize lambda expression node."""
2788
2942
  self.signature = signature
2789
2943
  self.body = body
2790
- AstNode.__init__(self, kid=kid)
2944
+ UniNode.__init__(self, kid=kid)
2791
2945
  Expr.__init__(self)
2946
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
2792
2947
 
2793
2948
  def normalize(self, deep: bool = False) -> bool:
2794
- """Normalize ast node."""
2795
2949
  res = True
2796
2950
  if deep:
2797
2951
  res = self.signature.normalize(deep) if self.signature else res
2798
2952
  res = res and self.body.normalize(deep)
2799
- new_kid: list[AstNode] = [self.gen_token(Tok.KW_WITH)]
2953
+ new_kid: list[UniNode] = [self.gen_token(Tok.KW_LAMBDA)]
2800
2954
  if self.signature:
2801
2955
  new_kid.append(self.signature)
2802
- new_kid += [
2803
- self.gen_token(Tok.KW_CAN),
2804
- self.body,
2805
- self.gen_token(Tok.SEMI),
2806
- ]
2956
+ new_kid += [self.gen_token(Tok.COLON), self.body]
2807
2957
  self.set_kids(nodes=new_kid)
2808
2958
  return res
2809
2959
 
2810
2960
 
2811
2961
  class UnaryExpr(Expr):
2812
- """ExprUnary node type for Jac Ast."""
2962
+ """UnaryExpr node type for Jac Ast."""
2813
2963
 
2814
2964
  def __init__(
2815
2965
  self,
2816
2966
  operand: Expr,
2817
2967
  op: Token,
2818
- kid: Sequence[AstNode],
2968
+ kid: Sequence[UniNode],
2819
2969
  ) -> None:
2820
- """Initialize unary expression node."""
2821
2970
  self.operand = operand
2822
2971
  self.op = op
2823
- AstNode.__init__(self, kid=kid)
2972
+ UniNode.__init__(self, kid=kid)
2824
2973
  Expr.__init__(self)
2825
2974
 
2826
2975
  def normalize(self, deep: bool = False) -> bool:
2827
- """Normalize ast node."""
2828
2976
  res = True
2829
2977
  if deep:
2830
2978
  res = self.operand.normalize(deep)
2831
2979
  res = res and self.op.normalize(deep) if self.op else res
2832
- new_kid: list[AstNode] = [self.op, self.operand]
2980
+ new_kid: list[UniNode] = [self.op, self.operand]
2833
2981
  self.set_kids(nodes=new_kid)
2834
2982
  return res
2835
2983
 
2836
2984
 
2837
2985
  class IfElseExpr(Expr):
2838
- """ExprIfElse node type for Jac Ast."""
2986
+ """IfElseExpr node type for Jac Ast."""
2839
2987
 
2840
2988
  def __init__(
2841
2989
  self,
2842
2990
  condition: Expr,
2843
2991
  value: Expr,
2844
2992
  else_value: Expr,
2845
- kid: Sequence[AstNode],
2993
+ kid: Sequence[UniNode],
2846
2994
  ) -> None:
2847
- """Initialize if else expression node."""
2848
2995
  self.condition = condition
2849
2996
  self.value = value
2850
2997
  self.else_value = else_value
2851
- AstNode.__init__(self, kid=kid)
2998
+ UniNode.__init__(self, kid=kid)
2852
2999
  Expr.__init__(self)
2853
3000
 
2854
3001
  def normalize(self, deep: bool = False) -> bool:
2855
- """Normalize ast node."""
2856
3002
  res = True
2857
3003
  if deep:
2858
3004
  res = self.condition.normalize(deep)
2859
3005
  res = res and self.value.normalize(deep)
2860
3006
  res = res and self.else_value.normalize(deep)
2861
- new_kid: list[AstNode] = [
3007
+ new_kid: list[UniNode] = [
2862
3008
  self.value,
2863
3009
  self.gen_token(Tok.KW_IF),
2864
3010
  self.condition,
@@ -2870,26 +3016,24 @@ class IfElseExpr(Expr):
2870
3016
 
2871
3017
 
2872
3018
  class MultiString(AtomExpr):
2873
- """ExprMultiString node type for Jac Ast."""
3019
+ """MultiString node type for Jac Ast."""
2874
3020
 
2875
3021
  def __init__(
2876
3022
  self,
2877
3023
  strings: Sequence[String | FString],
2878
- kid: Sequence[AstNode],
3024
+ kid: Sequence[UniNode],
2879
3025
  ) -> None:
2880
- """Initialize multi string expression node."""
2881
3026
  self.strings = strings
2882
- AstNode.__init__(self, kid=kid)
3027
+ UniNode.__init__(self, kid=kid)
2883
3028
  Expr.__init__(self)
2884
3029
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.STRING)
2885
3030
 
2886
3031
  def normalize(self, deep: bool = False) -> bool:
2887
- """Normalize ast node."""
2888
3032
  res = True
2889
3033
  if deep:
2890
3034
  for string in self.strings:
2891
3035
  res = res and string.normalize(deep)
2892
- new_kid: list[AstNode] = []
3036
+ new_kid: list[UniNode] = []
2893
3037
  for string in self.strings:
2894
3038
  new_kid.append(string)
2895
3039
  self.set_kids(nodes=new_kid)
@@ -2902,20 +3046,18 @@ class FString(AtomExpr):
2902
3046
  def __init__(
2903
3047
  self,
2904
3048
  parts: Optional[SubNodeList[String | ExprStmt]],
2905
- kid: Sequence[AstNode],
3049
+ kid: Sequence[UniNode],
2906
3050
  ) -> None:
2907
- """Initialize fstring expression node."""
2908
3051
  self.parts = parts
2909
- AstNode.__init__(self, kid=kid)
3052
+ UniNode.__init__(self, kid=kid)
2910
3053
  Expr.__init__(self)
2911
3054
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.STRING)
2912
3055
 
2913
3056
  def normalize(self, deep: bool = False) -> bool:
2914
- """Normalize ast node."""
2915
3057
  res = True
2916
3058
  if deep:
2917
3059
  res = self.parts.normalize(deep) if self.parts else res
2918
- new_kid: list[AstNode] = []
3060
+ new_kid: list[UniNode] = []
2919
3061
  is_single_quote = (
2920
3062
  isinstance(self.kid[0], Token) and self.kid[0].name == Tok.FSTR_SQ_START
2921
3063
  )
@@ -2944,20 +3086,18 @@ class ListVal(AtomExpr):
2944
3086
  def __init__(
2945
3087
  self,
2946
3088
  values: Optional[SubNodeList[Expr]],
2947
- kid: Sequence[AstNode],
3089
+ kid: Sequence[UniNode],
2948
3090
  ) -> None:
2949
- """Initialize value node."""
2950
3091
  self.values = values
2951
- AstNode.__init__(self, kid=kid)
3092
+ UniNode.__init__(self, kid=kid)
2952
3093
  Expr.__init__(self)
2953
3094
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
2954
3095
 
2955
3096
  def normalize(self, deep: bool = False) -> bool:
2956
- """Normalize ast node."""
2957
3097
  res = True
2958
3098
  if deep:
2959
3099
  res = self.values.normalize(deep) if self.values else res
2960
- new_kid: list[AstNode] = [
3100
+ new_kid: list[UniNode] = [
2961
3101
  self.gen_token(Tok.LSQUARE),
2962
3102
  ]
2963
3103
  if self.values:
@@ -2973,20 +3113,18 @@ class SetVal(AtomExpr):
2973
3113
  def __init__(
2974
3114
  self,
2975
3115
  values: Optional[SubNodeList[Expr]],
2976
- kid: Sequence[AstNode],
3116
+ kid: Sequence[UniNode],
2977
3117
  ) -> None:
2978
- """Initialize value node."""
2979
3118
  self.values = values
2980
- AstNode.__init__(self, kid=kid)
3119
+ UniNode.__init__(self, kid=kid)
2981
3120
  Expr.__init__(self)
2982
3121
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
2983
3122
 
2984
3123
  def normalize(self, deep: bool = False) -> bool:
2985
- """Normalize ast node."""
2986
3124
  res = True
2987
3125
  if deep:
2988
3126
  res = self.values.normalize(deep) if self.values else res
2989
- new_kid: list[AstNode] = [
3127
+ new_kid: list[UniNode] = [
2990
3128
  self.gen_token(Tok.LBRACE),
2991
3129
  ]
2992
3130
  if self.values:
@@ -3002,16 +3140,14 @@ class TupleVal(AtomExpr):
3002
3140
  def __init__(
3003
3141
  self,
3004
3142
  values: Optional[SubNodeList[Expr | KWPair]],
3005
- kid: Sequence[AstNode],
3143
+ kid: Sequence[UniNode],
3006
3144
  ) -> None:
3007
- """Initialize tuple value node."""
3008
3145
  self.values = values
3009
- AstNode.__init__(self, kid=kid)
3146
+ UniNode.__init__(self, kid=kid)
3010
3147
  Expr.__init__(self)
3011
3148
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
3012
3149
 
3013
3150
  def normalize(self, deep: bool = False) -> bool:
3014
- """Normalize ast node."""
3015
3151
  res = True
3016
3152
  if deep:
3017
3153
  res = self.values.normalize(deep) if self.values else res
@@ -3023,7 +3159,7 @@ class TupleVal(AtomExpr):
3023
3159
  and self.parent.parent
3024
3160
  and isinstance(self.parent.parent.parent, FuncSignature)
3025
3161
  )
3026
- new_kid: list[AstNode] = (
3162
+ new_kid: list[UniNode] = (
3027
3163
  [
3028
3164
  self.gen_token(Tok.LPAREN),
3029
3165
  ]
@@ -3041,26 +3177,24 @@ class TupleVal(AtomExpr):
3041
3177
 
3042
3178
 
3043
3179
  class DictVal(AtomExpr):
3044
- """ExprDict node type for Jac Ast."""
3180
+ """DictVal node type for Jac Ast."""
3045
3181
 
3046
3182
  def __init__(
3047
3183
  self,
3048
3184
  kv_pairs: Sequence[KVPair],
3049
- kid: Sequence[AstNode],
3185
+ kid: Sequence[UniNode],
3050
3186
  ) -> None:
3051
- """Initialize dict expression node."""
3052
3187
  self.kv_pairs = kv_pairs
3053
- AstNode.__init__(self, kid=kid)
3188
+ UniNode.__init__(self, kid=kid)
3054
3189
  Expr.__init__(self)
3055
3190
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
3056
3191
 
3057
3192
  def normalize(self, deep: bool = False) -> bool:
3058
- """Normalize ast node."""
3059
3193
  res = True
3060
3194
  if deep:
3061
3195
  for kv_pair in self.kv_pairs:
3062
3196
  res = res and kv_pair.normalize(deep)
3063
- new_kid: list[AstNode] = [
3197
+ new_kid: list[UniNode] = [
3064
3198
  self.gen_token(Tok.LBRACE),
3065
3199
  ]
3066
3200
  for i, kv_pair in enumerate(self.kv_pairs):
@@ -3072,27 +3206,25 @@ class DictVal(AtomExpr):
3072
3206
  return res
3073
3207
 
3074
3208
 
3075
- class KVPair(AstNode):
3076
- """ExprKVPair node type for Jac Ast."""
3209
+ class KVPair(UniNode):
3210
+ """KVPair node type for Jac Ast."""
3077
3211
 
3078
3212
  def __init__(
3079
3213
  self,
3080
3214
  key: Optional[Expr], # is **key if blank
3081
3215
  value: Expr,
3082
- kid: Sequence[AstNode],
3216
+ kid: Sequence[UniNode],
3083
3217
  ) -> None:
3084
- """Initialize key value pair expression node."""
3085
3218
  self.key = key
3086
3219
  self.value = value
3087
- AstNode.__init__(self, kid=kid)
3220
+ UniNode.__init__(self, kid=kid)
3088
3221
 
3089
3222
  def normalize(self, deep: bool = False) -> bool:
3090
- """Normalize ast node."""
3091
3223
  res = True
3092
3224
  if deep:
3093
3225
  res = self.key.normalize(deep) if self.key else res
3094
3226
  res = res and self.value.normalize(deep)
3095
- new_kid: list[AstNode] = []
3227
+ new_kid: list[UniNode] = []
3096
3228
  if self.key:
3097
3229
  new_kid.append(self.key)
3098
3230
  new_kid.append(self.gen_token(Tok.COLON))
@@ -3103,37 +3235,37 @@ class KVPair(AstNode):
3103
3235
  return res
3104
3236
 
3105
3237
 
3106
- class KWPair(AstNode):
3107
- """ExprKWPair node type for Jac Ast."""
3238
+ class KWPair(UniNode):
3239
+ """KWPair node type for Jac Ast."""
3108
3240
 
3109
3241
  def __init__(
3110
3242
  self,
3111
3243
  key: Optional[NameAtom], # is **value if blank
3112
3244
  value: Expr,
3113
- kid: Sequence[AstNode],
3245
+ kid: Sequence[UniNode],
3114
3246
  ) -> None:
3115
- """Initialize keyword pair expression node."""
3116
3247
  self.key = key
3117
3248
  self.value = value
3118
- AstNode.__init__(self, kid=kid)
3249
+ UniNode.__init__(self, kid=kid)
3119
3250
 
3120
3251
  def normalize(self, deep: bool = False) -> bool:
3121
- """Normalize ast node."""
3122
3252
  res = True
3123
3253
  if deep:
3124
3254
  res = self.key.normalize(deep) if self.key else res
3125
3255
  res = res and self.value.normalize(deep)
3126
- new_kid: list[AstNode] = []
3256
+ new_kid: list[UniNode] = []
3127
3257
  if self.key:
3128
3258
  new_kid.append(self.key)
3129
3259
  new_kid.append(self.gen_token(Tok.EQ))
3260
+ else:
3261
+ new_kid.append(self.gen_token(Tok.STAR_POW))
3130
3262
  new_kid.append(self.value)
3131
3263
  self.set_kids(nodes=new_kid)
3132
3264
  return res
3133
3265
 
3134
3266
 
3135
- class InnerCompr(AstAsyncNode):
3136
- """ListCompr node type for Jac Ast."""
3267
+ class InnerCompr(AstAsyncNode, UniScopeNode):
3268
+ """InnerCompr node type for Jac Ast."""
3137
3269
 
3138
3270
  def __init__(
3139
3271
  self,
@@ -3141,24 +3273,23 @@ class InnerCompr(AstAsyncNode):
3141
3273
  target: Expr,
3142
3274
  collection: Expr,
3143
3275
  conditional: Optional[list[Expr]],
3144
- kid: Sequence[AstNode],
3276
+ kid: Sequence[UniNode],
3145
3277
  ) -> None:
3146
- """Initialize comprehension expression node."""
3147
3278
  self.target = target
3148
3279
  self.collection = collection
3149
3280
  self.conditional = conditional
3150
- AstNode.__init__(self, kid=kid)
3281
+ UniNode.__init__(self, kid=kid)
3151
3282
  AstAsyncNode.__init__(self, is_async=is_async)
3283
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
3152
3284
 
3153
3285
  def normalize(self, deep: bool = False) -> bool:
3154
- """Normalize ast node."""
3155
3286
  res = True
3156
3287
  if deep:
3157
3288
  res = self.target.normalize(deep)
3158
3289
  res = res and self.collection.normalize(deep)
3159
3290
  for cond in self.conditional if self.conditional else []:
3160
3291
  res = res and cond.normalize(deep)
3161
- new_kid: list[AstNode] = []
3292
+ new_kid: list[UniNode] = []
3162
3293
  if self.is_async:
3163
3294
  new_kid.append(self.gen_token(Tok.KW_ASYNC))
3164
3295
  new_kid.append(self.gen_token(Tok.KW_FOR))
@@ -3179,23 +3310,21 @@ class ListCompr(AtomExpr):
3179
3310
  self,
3180
3311
  out_expr: Expr,
3181
3312
  compr: list[InnerCompr],
3182
- kid: Sequence[AstNode],
3313
+ kid: Sequence[UniNode],
3183
3314
  ) -> None:
3184
- """Initialize comprehension expression node."""
3185
3315
  self.out_expr = out_expr
3186
3316
  self.compr = compr
3187
- AstNode.__init__(self, kid=kid)
3317
+ UniNode.__init__(self, kid=kid)
3188
3318
  Expr.__init__(self)
3189
3319
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
3190
3320
 
3191
3321
  def normalize(self, deep: bool = False) -> bool:
3192
- """Normalize ast node."""
3193
3322
  res = True
3194
3323
  if deep:
3195
3324
  res = self.out_expr.normalize(deep)
3196
3325
  for comp in self.compr:
3197
3326
  res = res and comp.normalize(deep)
3198
- new_kid: list[AstNode] = [
3327
+ new_kid: list[UniNode] = [
3199
3328
  self.gen_token(Tok.LSQUARE),
3200
3329
  self.out_expr,
3201
3330
  ]
@@ -3210,13 +3339,12 @@ class GenCompr(ListCompr):
3210
3339
  """GenCompr node type for Jac Ast."""
3211
3340
 
3212
3341
  def normalize(self, deep: bool = False) -> bool:
3213
- """Normalize ast node."""
3214
3342
  res = True
3215
3343
  if deep:
3216
3344
  res = self.out_expr.normalize(deep)
3217
3345
  for comp in self.compr:
3218
3346
  res = res and comp.normalize(deep)
3219
- new_kid: list[AstNode] = [
3347
+ new_kid: list[UniNode] = [
3220
3348
  self.gen_token(Tok.LPAREN),
3221
3349
  self.out_expr,
3222
3350
  ]
@@ -3231,13 +3359,12 @@ class SetCompr(ListCompr):
3231
3359
  """SetCompr node type for Jac Ast."""
3232
3360
 
3233
3361
  def normalize(self, deep: bool = False) -> bool:
3234
- """Normalize ast node."""
3235
3362
  res = True
3236
3363
  if deep:
3237
3364
  res = self.out_expr.normalize(deep)
3238
3365
  for comp in self.compr:
3239
3366
  res = res and comp.normalize(deep)
3240
- new_kid: list[AstNode] = [
3367
+ new_kid: list[UniNode] = [
3241
3368
  self.gen_token(Tok.LBRACE),
3242
3369
  self.out_expr,
3243
3370
  ]
@@ -3248,29 +3375,28 @@ class SetCompr(ListCompr):
3248
3375
  return res
3249
3376
 
3250
3377
 
3251
- class DictCompr(AtomExpr):
3378
+ class DictCompr(AtomExpr, UniScopeNode):
3252
3379
  """DictCompr node type for Jac Ast."""
3253
3380
 
3254
3381
  def __init__(
3255
3382
  self,
3256
3383
  kv_pair: KVPair,
3257
3384
  compr: list[InnerCompr],
3258
- kid: Sequence[AstNode],
3385
+ kid: Sequence[UniNode],
3259
3386
  ) -> None:
3260
- """Initialize comprehension expression node."""
3261
3387
  self.kv_pair = kv_pair
3262
3388
  self.compr = compr
3263
- AstNode.__init__(self, kid=kid)
3389
+ UniNode.__init__(self, kid=kid)
3264
3390
  Expr.__init__(self)
3265
3391
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
3392
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
3266
3393
 
3267
3394
  def normalize(self, deep: bool = False) -> bool:
3268
- """Normalize ast node."""
3269
3395
  res = True
3270
3396
  res = self.kv_pair.normalize(deep)
3271
3397
  for comp in self.compr:
3272
3398
  res = res and comp.normalize(deep)
3273
- new_kid: list[AstNode] = [
3399
+ new_kid: list[UniNode] = [
3274
3400
  self.gen_token(Tok.LBRACE),
3275
3401
  self.kv_pair,
3276
3402
  ]
@@ -3290,25 +3416,23 @@ class AtomTrailer(Expr):
3290
3416
  right: AtomExpr | Expr,
3291
3417
  is_attr: bool,
3292
3418
  is_null_ok: bool,
3293
- kid: Sequence[AstNode],
3419
+ kid: Sequence[UniNode],
3294
3420
  is_genai: bool = False,
3295
3421
  ) -> None:
3296
- """Initialize atom trailer expression node."""
3297
3422
  self.target = target
3298
3423
  self.right = right
3299
3424
  self.is_attr = is_attr
3300
3425
  self.is_null_ok = is_null_ok
3301
3426
  self.is_genai = is_genai
3302
- AstNode.__init__(self, kid=kid)
3427
+ UniNode.__init__(self, kid=kid)
3303
3428
  Expr.__init__(self)
3304
3429
 
3305
3430
  def normalize(self, deep: bool = True) -> bool:
3306
- """Normalize ast node."""
3307
3431
  res = True
3308
3432
  if deep:
3309
3433
  res = self.target.normalize(deep)
3310
3434
  res = res and self.right.normalize(deep) if self.right else res
3311
- new_kid: list[AstNode] = [self.target]
3435
+ new_kid: list[UniNode] = [self.target]
3312
3436
  if self.is_null_ok:
3313
3437
  new_kid.append(self.gen_token(Tok.NULL_OK))
3314
3438
  if self.is_attr:
@@ -3320,7 +3444,6 @@ class AtomTrailer(Expr):
3320
3444
 
3321
3445
  @property
3322
3446
  def as_attr_list(self) -> list[AstSymbolNode]:
3323
- """Unwind trailer into list of ast symbol nodes."""
3324
3447
  left = self.right if isinstance(self.right, AtomTrailer) else self.target
3325
3448
  right = self.target if isinstance(self.right, AtomTrailer) else self.right
3326
3449
  trag_list: list[AstSymbolNode] = (
@@ -3341,19 +3464,17 @@ class AtomUnit(Expr):
3341
3464
  def __init__(
3342
3465
  self,
3343
3466
  value: Expr | YieldExpr,
3344
- kid: Sequence[AstNode],
3467
+ kid: Sequence[UniNode],
3345
3468
  ) -> None:
3346
- """Initialize atom unit expression node."""
3347
3469
  self.value = value
3348
- AstNode.__init__(self, kid=kid)
3470
+ UniNode.__init__(self, kid=kid)
3349
3471
  Expr.__init__(self)
3350
3472
 
3351
3473
  def normalize(self, deep: bool = True) -> bool:
3352
- """Normalize ast node."""
3353
3474
  res = True
3354
3475
  if deep:
3355
3476
  res = self.value.normalize(deep)
3356
- new_kid: list[AstNode] = []
3477
+ new_kid: list[UniNode] = []
3357
3478
  new_kid.append(self.gen_token(Tok.LPAREN))
3358
3479
  new_kid.append(self.value)
3359
3480
  new_kid.append(self.gen_token(Tok.RPAREN))
@@ -3362,26 +3483,24 @@ class AtomUnit(Expr):
3362
3483
 
3363
3484
 
3364
3485
  class YieldExpr(Expr):
3365
- """YieldStmt node type for Jac Ast."""
3486
+ """YieldExpr node type for Jac Ast."""
3366
3487
 
3367
3488
  def __init__(
3368
3489
  self,
3369
3490
  expr: Optional[Expr],
3370
3491
  with_from: bool,
3371
- kid: Sequence[AstNode],
3492
+ kid: Sequence[UniNode],
3372
3493
  ) -> None:
3373
- """Initialize yeild statement node."""
3374
3494
  self.expr = expr
3375
3495
  self.with_from = with_from
3376
- AstNode.__init__(self, kid=kid)
3496
+ UniNode.__init__(self, kid=kid)
3377
3497
  Expr.__init__(self)
3378
3498
 
3379
3499
  def normalize(self, deep: bool = False) -> bool:
3380
- """Normalize yield statement node."""
3381
3500
  res = True
3382
3501
  if deep:
3383
3502
  res = self.expr.normalize(deep) if self.expr else res
3384
- new_kid: list[AstNode] = [self.gen_token(Tok.KW_YIELD)]
3503
+ new_kid: list[UniNode] = [self.gen_token(Tok.KW_YIELD)]
3385
3504
  if self.with_from:
3386
3505
  new_kid.append(self.gen_token(Tok.KW_FROM))
3387
3506
  if self.expr:
@@ -3399,17 +3518,15 @@ class FuncCall(Expr):
3399
3518
  target: Expr,
3400
3519
  params: Optional[SubNodeList[Expr | KWPair]],
3401
3520
  genai_call: Optional[FuncCall],
3402
- kid: Sequence[AstNode],
3521
+ kid: Sequence[UniNode],
3403
3522
  ) -> None:
3404
- """Initialize function call expression node."""
3405
3523
  self.target = target
3406
3524
  self.params = params
3407
3525
  self.genai_call = genai_call
3408
- AstNode.__init__(self, kid=kid)
3526
+ UniNode.__init__(self, kid=kid)
3409
3527
  Expr.__init__(self)
3410
3528
 
3411
3529
  def normalize(self, deep: bool = True) -> bool:
3412
- """Normalize ast node."""
3413
3530
  if deep:
3414
3531
  res = self.target.normalize(deep)
3415
3532
  res = res and (not self.params or self.params.normalize(deep))
@@ -3429,7 +3546,7 @@ class IndexSlice(AtomExpr):
3429
3546
 
3430
3547
  @dataclass
3431
3548
  class Slice:
3432
- """Slice node for index slice."""
3549
+ """Slice node type for Jac Ast."""
3433
3550
 
3434
3551
  start: Optional[Expr]
3435
3552
  stop: Optional[Expr]
@@ -3439,24 +3556,22 @@ class IndexSlice(AtomExpr):
3439
3556
  self,
3440
3557
  slices: list[Slice],
3441
3558
  is_range: bool,
3442
- kid: Sequence[AstNode],
3559
+ kid: Sequence[UniNode],
3443
3560
  ) -> None:
3444
- """Initialize index slice expression node."""
3445
3561
  self.slices = slices
3446
3562
  self.is_range = is_range
3447
- AstNode.__init__(self, kid=kid)
3563
+ UniNode.__init__(self, kid=kid)
3448
3564
  Expr.__init__(self)
3449
3565
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
3450
3566
 
3451
3567
  def normalize(self, deep: bool = True) -> bool:
3452
- """Normalize ast node."""
3453
3568
  res = True
3454
3569
  if deep:
3455
3570
  for slice in self.slices:
3456
3571
  res = slice.start.normalize(deep) if slice.start else res
3457
3572
  res = res and slice.stop.normalize(deep) if slice.stop else res
3458
3573
  res = res and slice.step.normalize(deep) if slice.step else res
3459
- new_kid: list[AstNode] = []
3574
+ new_kid: list[UniNode] = []
3460
3575
  new_kid.append(self.gen_token(Tok.LSQUARE))
3461
3576
  if self.is_range:
3462
3577
  for i, slice in enumerate(self.slices):
@@ -3479,33 +3594,29 @@ class IndexSlice(AtomExpr):
3479
3594
  return res
3480
3595
 
3481
3596
 
3482
- class ArchRef(AtomExpr):
3597
+ class TypeRef(AtomExpr):
3483
3598
  """ArchRef node type for Jac Ast."""
3484
3599
 
3485
3600
  def __init__(
3486
3601
  self,
3487
- arch_name: NameAtom,
3488
- arch_type: Token,
3489
- kid: Sequence[AstNode],
3602
+ target: NameAtom,
3603
+ kid: Sequence[UniNode],
3490
3604
  ) -> None:
3491
- """Initialize architype reference expression node."""
3492
- self.arch_name = arch_name
3493
- self.arch_type = arch_type
3494
- AstNode.__init__(self, kid=kid)
3495
- Expr.__init__(self, type_src=arch_name)
3605
+ self.target = target
3606
+ UniNode.__init__(self, kid=kid)
3607
+ Expr.__init__(self)
3496
3608
  AstSymbolNode.__init__(
3497
3609
  self,
3498
- sym_name=arch_name.sym_name,
3499
- name_spec=arch_name,
3610
+ sym_name=target.sym_name,
3611
+ name_spec=target,
3500
3612
  sym_category=SymbolType.TYPE,
3501
3613
  )
3502
3614
 
3503
3615
  def normalize(self, deep: bool = False) -> bool:
3504
- """Normalize ast node."""
3505
3616
  res = True
3506
3617
  if deep:
3507
- res = self.arch_name.normalize(deep)
3508
- new_kid: list[AstNode] = [self.arch_type, self.arch_name]
3618
+ res = self.target.normalize(deep)
3619
+ new_kid: list[UniNode] = [self.gen_token(Tok.TYPE_OP), self.target]
3509
3620
  self.set_kids(nodes=new_kid)
3510
3621
  return res
3511
3622
 
@@ -3517,23 +3628,21 @@ class EdgeRefTrailer(Expr):
3517
3628
  self,
3518
3629
  chain: list[Expr | FilterCompr],
3519
3630
  edges_only: bool,
3520
- kid: Sequence[AstNode],
3631
+ kid: Sequence[UniNode],
3521
3632
  ) -> None:
3522
- """Initialize edge reference trailer expression node."""
3523
3633
  self.chain = chain
3524
3634
  self.edges_only = edges_only
3525
- AstNode.__init__(self, kid=kid)
3635
+ UniNode.__init__(self, kid=kid)
3526
3636
  Expr.__init__(self)
3527
3637
 
3528
3638
  def normalize(self, deep: bool = True) -> bool:
3529
- """Normalize ast node."""
3530
3639
  res = True
3531
3640
  for expr in self.chain:
3532
3641
  res = res and expr.normalize(deep)
3533
- new_kid: list[AstNode] = []
3534
- if self.edges_only:
3535
- new_kid.append(self.gen_token(Tok.EDGE_OP))
3642
+ new_kid: list[UniNode] = []
3536
3643
  new_kid.append(self.gen_token(Tok.LSQUARE))
3644
+ if self.edges_only:
3645
+ new_kid.append(self.gen_token(Tok.KW_EDGE))
3537
3646
  new_kid.extend(self.chain)
3538
3647
  new_kid.append(self.gen_token(Tok.RSQUARE))
3539
3648
  self.set_kids(nodes=new_kid)
@@ -3547,22 +3656,20 @@ class EdgeOpRef(WalkerStmtOnlyNode, AtomExpr):
3547
3656
  self,
3548
3657
  filter_cond: Optional[FilterCompr],
3549
3658
  edge_dir: EdgeDir,
3550
- kid: Sequence[AstNode],
3659
+ kid: Sequence[UniNode],
3551
3660
  ) -> None:
3552
- """Initialize edge op reference expression node."""
3553
3661
  self.filter_cond = filter_cond
3554
3662
  self.edge_dir = edge_dir
3555
- AstNode.__init__(self, kid=kid)
3663
+ UniNode.__init__(self, kid=kid)
3556
3664
  Expr.__init__(self)
3557
3665
  WalkerStmtOnlyNode.__init__(self)
3558
3666
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
3559
3667
 
3560
3668
  def normalize(self, deep: bool = False) -> bool:
3561
- """Normalize ast node."""
3562
3669
  res = True
3563
3670
  if deep:
3564
3671
  res = self.filter_cond.normalize(deep) if self.filter_cond else res
3565
- new_kid: list[AstNode] = []
3672
+ new_kid: list[UniNode] = []
3566
3673
  if self.edge_dir == EdgeDir.IN:
3567
3674
  if not self.filter_cond:
3568
3675
  new_kid.append(self.gen_token(Tok.ARROW_L))
@@ -3589,29 +3696,27 @@ class EdgeOpRef(WalkerStmtOnlyNode, AtomExpr):
3589
3696
 
3590
3697
 
3591
3698
  class DisconnectOp(WalkerStmtOnlyNode):
3592
- """DisconnectOpRef node type for Jac Ast."""
3699
+ """DisconnectOp node type for Jac Ast."""
3593
3700
 
3594
3701
  def __init__(
3595
3702
  self,
3596
3703
  edge_spec: EdgeOpRef,
3597
- kid: Sequence[AstNode],
3704
+ kid: Sequence[UniNode],
3598
3705
  ) -> None:
3599
- """Initialize disconnect op reference expression node."""
3600
3706
  self.edge_spec = edge_spec
3601
- AstNode.__init__(self, kid=kid)
3707
+ UniNode.__init__(self, kid=kid)
3602
3708
  WalkerStmtOnlyNode.__init__(self)
3603
3709
 
3604
3710
  def normalize(self, deep: bool = False) -> bool:
3605
- """Normalize ast node."""
3606
3711
  res = True
3607
3712
  if deep:
3608
3713
  res = self.edge_spec.normalize(deep)
3609
- new_kid: list[AstNode] = [self.gen_token(Tok.KW_DELETE), self.edge_spec]
3714
+ new_kid: list[UniNode] = [self.gen_token(Tok.KW_DELETE), self.edge_spec]
3610
3715
  self.set_kids(nodes=new_kid)
3611
3716
  return res
3612
3717
 
3613
3718
 
3614
- class ConnectOp(AstNode):
3719
+ class ConnectOp(UniNode):
3615
3720
  """ConnectOpRef node type for Jac Ast."""
3616
3721
 
3617
3722
  def __init__(
@@ -3619,21 +3724,19 @@ class ConnectOp(AstNode):
3619
3724
  conn_type: Optional[Expr],
3620
3725
  conn_assign: Optional[AssignCompr],
3621
3726
  edge_dir: EdgeDir,
3622
- kid: Sequence[AstNode],
3727
+ kid: Sequence[UniNode],
3623
3728
  ) -> None:
3624
- """Initialize connect op reference expression node."""
3625
3729
  self.conn_type = conn_type
3626
3730
  self.conn_assign = conn_assign
3627
3731
  self.edge_dir = edge_dir
3628
- AstNode.__init__(self, kid=kid)
3732
+ UniNode.__init__(self, kid=kid)
3629
3733
 
3630
3734
  def normalize(self, deep: bool = False) -> bool:
3631
- """Normalize ast node."""
3632
3735
  res = True
3633
3736
  if deep:
3634
3737
  res = self.conn_type.normalize(deep) if self.conn_type else res
3635
3738
  res = res and self.conn_assign.normalize(deep) if self.conn_assign else res
3636
- new_kid: list[AstNode] = []
3739
+ new_kid: list[UniNode] = []
3637
3740
  if self.edge_dir == EdgeDir.IN:
3638
3741
  if not self.conn_assign and not self.conn_type:
3639
3742
  new_kid.append(self.gen_token(Tok.CARROW_L))
@@ -3672,28 +3775,26 @@ class ConnectOp(AstNode):
3672
3775
 
3673
3776
 
3674
3777
  class FilterCompr(AtomExpr):
3675
- """FilterCtx node type for Jac Ast."""
3778
+ """FilterCompr node type for Jac Ast."""
3676
3779
 
3677
3780
  def __init__(
3678
3781
  self,
3679
3782
  f_type: Optional[Expr],
3680
3783
  compares: Optional[SubNodeList[CompareExpr]],
3681
- kid: Sequence[AstNode],
3784
+ kid: Sequence[UniNode],
3682
3785
  ) -> None:
3683
- """Initialize filter_cond context expression node."""
3684
3786
  self.f_type = f_type
3685
3787
  self.compares = compares
3686
- AstNode.__init__(self, kid=kid)
3788
+ UniNode.__init__(self, kid=kid)
3687
3789
  Expr.__init__(self)
3688
3790
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
3689
3791
 
3690
3792
  def normalize(self, deep: bool = False) -> bool:
3691
- """Normalize ast node."""
3692
3793
  res = True
3693
3794
  if deep:
3694
3795
  res = self.f_type.normalize(deep) if self.f_type else res
3695
3796
  res = res and self.compares.normalize(deep) if self.compares else res
3696
- new_kid: list[AstNode] = []
3797
+ new_kid: list[UniNode] = []
3697
3798
  if not isinstance(self.parent, EdgeOpRef):
3698
3799
  new_kid.append(self.gen_token(Tok.LPAREN))
3699
3800
  if self.f_type:
@@ -3712,25 +3813,23 @@ class FilterCompr(AtomExpr):
3712
3813
 
3713
3814
 
3714
3815
  class AssignCompr(AtomExpr):
3715
- """AssignCtx node type for Jac Ast."""
3816
+ """AssignCompr node type for Jac Ast."""
3716
3817
 
3717
3818
  def __init__(
3718
3819
  self,
3719
3820
  assigns: SubNodeList[KWPair],
3720
- kid: Sequence[AstNode],
3821
+ kid: Sequence[UniNode],
3721
3822
  ) -> None:
3722
- """Initialize assign compr expression node."""
3723
3823
  self.assigns = assigns
3724
- AstNode.__init__(self, kid=kid)
3824
+ UniNode.__init__(self, kid=kid)
3725
3825
  Expr.__init__(self)
3726
3826
  AstSymbolStubNode.__init__(self, sym_type=SymbolType.SEQUENCE)
3727
3827
 
3728
3828
  def normalize(self, deep: bool = False) -> bool:
3729
- """Normalize ast node."""
3730
3829
  res = True
3731
3830
  if deep:
3732
3831
  res = self.assigns.normalize(deep)
3733
- new_kid: list[AstNode] = []
3832
+ new_kid: list[UniNode] = []
3734
3833
  if isinstance(self.parent, ConnectOp):
3735
3834
  new_kid.append(self.assigns)
3736
3835
  else:
@@ -3753,21 +3852,20 @@ class MatchStmt(CodeBlockStmt):
3753
3852
  self,
3754
3853
  target: Expr,
3755
3854
  cases: list[MatchCase],
3756
- kid: Sequence[AstNode],
3855
+ kid: Sequence[UniNode],
3757
3856
  ) -> None:
3758
- """Initialize match statement node."""
3759
3857
  self.target = target
3760
3858
  self.cases = cases
3761
- AstNode.__init__(self, kid=kid)
3859
+ UniNode.__init__(self, kid=kid)
3860
+ CodeBlockStmt.__init__(self)
3762
3861
 
3763
3862
  def normalize(self, deep: bool = False) -> bool:
3764
- """Normalize match statement node."""
3765
3863
  res = True
3766
3864
  if deep:
3767
3865
  res = self.target.normalize(deep)
3768
3866
  for case in self.cases:
3769
3867
  res = res and case.normalize(deep)
3770
- new_kid: list[AstNode] = [
3868
+ new_kid: list[UniNode] = [
3771
3869
  self.gen_token(Tok.KW_MATCH),
3772
3870
  self.target,
3773
3871
  ]
@@ -3780,7 +3878,7 @@ class MatchStmt(CodeBlockStmt):
3780
3878
  return res
3781
3879
 
3782
3880
 
3783
- class MatchCase(AstNode):
3881
+ class MatchCase(UniScopeNode):
3784
3882
  """MatchCase node type for Jac Ast."""
3785
3883
 
3786
3884
  def __init__(
@@ -3788,23 +3886,22 @@ class MatchCase(AstNode):
3788
3886
  pattern: MatchPattern,
3789
3887
  guard: Optional[Expr],
3790
3888
  body: list[CodeBlockStmt],
3791
- kid: Sequence[AstNode],
3889
+ kid: Sequence[UniNode],
3792
3890
  ) -> None:
3793
- """Initialize match case node."""
3794
3891
  self.pattern = pattern
3795
3892
  self.guard = guard
3796
3893
  self.body = body
3797
- AstNode.__init__(self, kid=kid)
3894
+ UniNode.__init__(self, kid=kid)
3895
+ UniScopeNode.__init__(self, name=f"{self.__class__.__name__}")
3798
3896
 
3799
3897
  def normalize(self, deep: bool = False) -> bool:
3800
- """Normalize match case node."""
3801
3898
  res = True
3802
3899
  if deep:
3803
3900
  res = self.pattern.normalize(deep)
3804
3901
  res = res and self.guard.normalize(deep) if self.guard else res
3805
3902
  for stmt in self.body:
3806
3903
  res = res and stmt.normalize(deep)
3807
- new_kid: list[AstNode] = [self.gen_token(Tok.KW_CASE), self.pattern]
3904
+ new_kid: list[UniNode] = [self.gen_token(Tok.KW_CASE), self.pattern]
3808
3905
  if self.guard:
3809
3906
  new_kid.append(self.gen_token(Tok.KW_IF))
3810
3907
  new_kid.append(self.guard)
@@ -3821,19 +3918,17 @@ class MatchOr(MatchPattern):
3821
3918
  def __init__(
3822
3919
  self,
3823
3920
  patterns: list[MatchPattern],
3824
- kid: Sequence[AstNode],
3921
+ kid: Sequence[UniNode],
3825
3922
  ) -> None:
3826
- """Initialize match or node."""
3827
3923
  self.patterns = patterns
3828
- AstNode.__init__(self, kid=kid)
3924
+ UniNode.__init__(self, kid=kid)
3829
3925
 
3830
3926
  def normalize(self, deep: bool = False) -> bool:
3831
- """Normalize match or node."""
3832
3927
  res = True
3833
3928
  if deep:
3834
3929
  for pattern in self.patterns:
3835
3930
  res = res and pattern.normalize(deep)
3836
- new_kid: list[AstNode] = []
3931
+ new_kid: list[UniNode] = []
3837
3932
  for pattern in self.patterns:
3838
3933
  new_kid.append(pattern)
3839
3934
  new_kid.append(self.gen_token(Tok.KW_OR))
@@ -3849,20 +3944,18 @@ class MatchAs(MatchPattern):
3849
3944
  self,
3850
3945
  name: NameAtom,
3851
3946
  pattern: Optional[MatchPattern],
3852
- kid: Sequence[AstNode],
3947
+ kid: Sequence[UniNode],
3853
3948
  ) -> None:
3854
- """Initialize match as node."""
3855
3949
  self.name = name
3856
3950
  self.pattern = pattern
3857
- AstNode.__init__(self, kid=kid)
3951
+ UniNode.__init__(self, kid=kid)
3858
3952
 
3859
3953
  def normalize(self, deep: bool = False) -> bool:
3860
- """Normalize match as node."""
3861
3954
  res = True
3862
3955
  if deep:
3863
3956
  res = self.name.normalize(deep)
3864
3957
  res = res and self.pattern.normalize(deep) if self.pattern else res
3865
- new_kid: list[AstNode] = []
3958
+ new_kid: list[UniNode] = []
3866
3959
  if self.pattern:
3867
3960
  new_kid.append(self.pattern)
3868
3961
  new_kid.append(self.gen_token(Tok.KW_AS))
@@ -3872,11 +3965,11 @@ class MatchAs(MatchPattern):
3872
3965
 
3873
3966
 
3874
3967
  class MatchWild(MatchPattern):
3875
- """Match wild card node type for Jac Ast."""
3968
+ """MatchWild node type for Jac Ast."""
3876
3969
 
3877
3970
  def normalize(self, deep: bool = False) -> bool:
3878
3971
  """Normalize match wild card node."""
3879
- AstNode.set_kids(
3972
+ UniNode.set_kids(
3880
3973
  self,
3881
3974
  nodes=[
3882
3975
  Name(
@@ -3901,14 +3994,12 @@ class MatchValue(MatchPattern):
3901
3994
  def __init__(
3902
3995
  self,
3903
3996
  value: Expr,
3904
- kid: Sequence[AstNode],
3997
+ kid: Sequence[UniNode],
3905
3998
  ) -> None:
3906
- """Initialize match value node."""
3907
3999
  self.value = value
3908
- AstNode.__init__(self, kid=kid)
4000
+ UniNode.__init__(self, kid=kid)
3909
4001
 
3910
4002
  def normalize(self, deep: bool = False) -> bool:
3911
- """Normalize match value node."""
3912
4003
  res = True
3913
4004
  if deep:
3914
4005
  res = self.value.normalize(deep)
@@ -3922,14 +4013,12 @@ class MatchSingleton(MatchPattern):
3922
4013
  def __init__(
3923
4014
  self,
3924
4015
  value: Bool | Null,
3925
- kid: Sequence[AstNode],
4016
+ kid: Sequence[UniNode],
3926
4017
  ) -> None:
3927
- """Initialize match singleton node."""
3928
4018
  self.value = value
3929
- AstNode.__init__(self, kid=kid)
4019
+ UniNode.__init__(self, kid=kid)
3930
4020
 
3931
4021
  def normalize(self, deep: bool = False) -> bool:
3932
- """Normalize match singleton node."""
3933
4022
  res = True
3934
4023
  self.set_kids(nodes=[self.value])
3935
4024
  return res
@@ -3941,19 +4030,17 @@ class MatchSequence(MatchPattern):
3941
4030
  def __init__(
3942
4031
  self,
3943
4032
  values: list[MatchPattern],
3944
- kid: Sequence[AstNode],
4033
+ kid: Sequence[UniNode],
3945
4034
  ) -> None:
3946
- """Initialize match sequence node."""
3947
4035
  self.values = values
3948
- AstNode.__init__(self, kid=kid)
4036
+ UniNode.__init__(self, kid=kid)
3949
4037
 
3950
4038
  def normalize(self, deep: bool = False) -> bool:
3951
- """Normalize match sequence node."""
3952
4039
  res = True
3953
4040
  if deep:
3954
4041
  for value in self.values:
3955
4042
  res = res and value.normalize(deep)
3956
- new_kid: list[AstNode] = [self.gen_token(Tok.LSQUARE)]
4043
+ new_kid: list[UniNode] = [self.gen_token(Tok.LSQUARE)]
3957
4044
  for value in self.values:
3958
4045
  new_kid.append(value)
3959
4046
  new_kid.append(self.gen_token(Tok.COMMA))
@@ -3969,19 +4056,17 @@ class MatchMapping(MatchPattern):
3969
4056
  def __init__(
3970
4057
  self,
3971
4058
  values: list[MatchKVPair | MatchStar],
3972
- kid: Sequence[AstNode],
4059
+ kid: Sequence[UniNode],
3973
4060
  ) -> None:
3974
- """Initialize match mapping node."""
3975
4061
  self.values = values
3976
- AstNode.__init__(self, kid=kid)
4062
+ UniNode.__init__(self, kid=kid)
3977
4063
 
3978
4064
  def normalize(self, deep: bool = False) -> bool:
3979
- """Normalize match mapping node."""
3980
4065
  res = True
3981
4066
  if deep:
3982
4067
  for value in self.values:
3983
4068
  res = res and value.normalize(deep)
3984
- new_kid: list[AstNode] = [self.gen_token(Tok.LBRACE)]
4069
+ new_kid: list[UniNode] = [self.gen_token(Tok.LBRACE)]
3985
4070
  for value in self.values:
3986
4071
  new_kid.append(value)
3987
4072
  new_kid.append(self.gen_token(Tok.COMMA))
@@ -3996,17 +4081,15 @@ class MatchKVPair(MatchPattern):
3996
4081
 
3997
4082
  def __init__(
3998
4083
  self,
3999
- key: MatchPattern | NameAtom,
4084
+ key: MatchPattern | NameAtom | AtomExpr,
4000
4085
  value: MatchPattern,
4001
- kid: Sequence[AstNode],
4086
+ kid: Sequence[UniNode],
4002
4087
  ) -> None:
4003
- """Initialize match key value pair node."""
4004
4088
  self.key = key
4005
4089
  self.value = value
4006
- AstNode.__init__(self, kid=kid)
4090
+ UniNode.__init__(self, kid=kid)
4007
4091
 
4008
4092
  def normalize(self, deep: bool = False) -> bool:
4009
- """Normalize match key value pair node."""
4010
4093
  res = True
4011
4094
  if deep:
4012
4095
  res = (
@@ -4014,7 +4097,7 @@ class MatchKVPair(MatchPattern):
4014
4097
  )
4015
4098
  res = res and self.value.normalize(deep)
4016
4099
  op = Tok.EQ if isinstance(self.key, Name) else Tok.COLON
4017
- new_kid: list[AstNode] = [self.key, self.gen_token(op), self.value]
4100
+ new_kid: list[UniNode] = [self.key, self.gen_token(op), self.value]
4018
4101
  self.set_kids(nodes=new_kid)
4019
4102
  return res
4020
4103
 
@@ -4026,19 +4109,17 @@ class MatchStar(MatchPattern):
4026
4109
  self,
4027
4110
  name: NameAtom,
4028
4111
  is_list: bool,
4029
- kid: Sequence[AstNode],
4112
+ kid: Sequence[UniNode],
4030
4113
  ) -> None:
4031
- """Initialize match star node."""
4032
4114
  self.name = name
4033
4115
  self.is_list = is_list
4034
- AstNode.__init__(self, kid=kid)
4116
+ UniNode.__init__(self, kid=kid)
4035
4117
 
4036
4118
  def normalize(self, deep: bool = False) -> bool:
4037
- """Normalize match star node."""
4038
4119
  res = True
4039
4120
  if deep:
4040
4121
  res = self.name.normalize(deep)
4041
- new_kid: list[AstNode] = [
4122
+ new_kid: list[UniNode] = [
4042
4123
  self.gen_token(Tok.STAR_MUL if self.is_list else Tok.STAR_POW)
4043
4124
  ]
4044
4125
  new_kid.append(self.name)
@@ -4047,29 +4128,27 @@ class MatchStar(MatchPattern):
4047
4128
 
4048
4129
 
4049
4130
  class MatchArch(MatchPattern):
4050
- """MatchClass node type for Jac Ast."""
4131
+ """MatchArch node type for Jac Ast."""
4051
4132
 
4052
4133
  def __init__(
4053
4134
  self,
4054
4135
  name: AtomTrailer | NameAtom,
4055
4136
  arg_patterns: Optional[SubNodeList[MatchPattern]],
4056
4137
  kw_patterns: Optional[SubNodeList[MatchKVPair]],
4057
- kid: Sequence[AstNode],
4138
+ kid: Sequence[UniNode],
4058
4139
  ) -> None:
4059
- """Initialize match class node."""
4060
4140
  self.name = name
4061
4141
  self.arg_patterns = arg_patterns
4062
4142
  self.kw_patterns = kw_patterns
4063
- AstNode.__init__(self, kid=kid)
4143
+ UniNode.__init__(self, kid=kid)
4064
4144
 
4065
4145
  def normalize(self, deep: bool = False) -> bool:
4066
- """Normalize match class node."""
4067
4146
  res = True
4068
4147
  if deep:
4069
4148
  res = self.name.normalize(deep)
4070
4149
  res = res and (not self.arg_patterns or self.arg_patterns.normalize(deep))
4071
4150
  res = res and (not self.kw_patterns or self.kw_patterns.normalize(deep))
4072
- new_kid: list[AstNode] = [self.name]
4151
+ new_kid: list[UniNode] = [self.name]
4073
4152
  new_kid.append(self.gen_token(Tok.LPAREN))
4074
4153
  if self.arg_patterns:
4075
4154
  new_kid.append(self.arg_patterns)
@@ -4085,12 +4164,12 @@ class MatchArch(MatchPattern):
4085
4164
 
4086
4165
  # AST Terminal Node Types
4087
4166
  # --------------------------
4088
- class Token(AstNode):
4167
+ class Token(UniNode):
4089
4168
  """Token node type for Jac Ast."""
4090
4169
 
4091
4170
  def __init__(
4092
4171
  self,
4093
- orig_src: JacSource,
4172
+ orig_src: Source,
4094
4173
  name: str,
4095
4174
  value: str,
4096
4175
  line: int,
@@ -4100,7 +4179,6 @@ class Token(AstNode):
4100
4179
  pos_start: int,
4101
4180
  pos_end: int,
4102
4181
  ) -> None:
4103
- """Initialize token."""
4104
4182
  self.orig_src = orig_src
4105
4183
  self.name = name
4106
4184
  self.value = value
@@ -4110,14 +4188,15 @@ class Token(AstNode):
4110
4188
  self.c_end = col_end
4111
4189
  self.pos_start = pos_start
4112
4190
  self.pos_end = pos_end
4113
- AstNode.__init__(self, kid=[])
4191
+ UniNode.__init__(self, kid=[])
4192
+
4193
+ def __repr__(self) -> str:
4194
+ return f"Token({self.name}, {self.value}, {self.loc})"
4114
4195
 
4115
4196
  def normalize(self, deep: bool = True) -> bool:
4116
- """Normalize token."""
4117
4197
  return bool(self.value and self.name)
4118
4198
 
4119
4199
  def unparse(self) -> str:
4120
- """Unparse token."""
4121
4200
  return self.value
4122
4201
 
4123
4202
 
@@ -4126,7 +4205,7 @@ class Name(Token, NameAtom):
4126
4205
 
4127
4206
  def __init__(
4128
4207
  self,
4129
- orig_src: JacSource,
4208
+ orig_src: Source,
4130
4209
  name: str,
4131
4210
  value: str,
4132
4211
  line: int,
@@ -4138,7 +4217,6 @@ class Name(Token, NameAtom):
4138
4217
  is_enum_singleton: bool = False,
4139
4218
  is_kwesc: bool = False,
4140
4219
  ) -> None:
4141
- """Initialize token."""
4142
4220
  self.is_enum_singleton = is_enum_singleton
4143
4221
  self.is_kwesc = is_kwesc
4144
4222
  Token.__init__(
@@ -4162,7 +4240,6 @@ class Name(Token, NameAtom):
4162
4240
  )
4163
4241
 
4164
4242
  def unparse(self) -> str:
4165
- """Unparse name."""
4166
4243
  super().unparse()
4167
4244
  return (f"<>{self.value}" if self.is_kwesc else self.value) + (
4168
4245
  ",\n" if self.is_enum_singleton else ""
@@ -4184,20 +4261,18 @@ class Name(Token, NameAtom):
4184
4261
  pos_start=node.loc.pos_start,
4185
4262
  pos_end=node.loc.pos_end,
4186
4263
  )
4264
+ ret.parent = node.parent
4187
4265
  ret.name_of = set_name_of if set_name_of else ret
4188
- if node._sym_tab:
4189
- ret.sym_tab = node.sym_tab
4190
4266
  return ret
4191
4267
 
4192
4268
 
4193
4269
  class SpecialVarRef(Name):
4194
- """HereRef node type for Jac Ast."""
4270
+ """SpecialVarRef node type for Jac Ast."""
4195
4271
 
4196
4272
  def __init__(
4197
4273
  self,
4198
4274
  var: Name,
4199
4275
  ) -> None:
4200
- """Initialize special var reference expression node."""
4201
4276
  self.orig = var
4202
4277
  Name.__init__(
4203
4278
  self,
@@ -4220,7 +4295,6 @@ class SpecialVarRef(Name):
4220
4295
  )
4221
4296
 
4222
4297
  def py_resolve_name(self) -> str:
4223
- """Resolve name."""
4224
4298
  if self.orig.name == Tok.KW_SELF:
4225
4299
  return "self"
4226
4300
  elif self.orig.name == Tok.KW_SUPER:
@@ -4229,6 +4303,8 @@ class SpecialVarRef(Name):
4229
4303
  return Con.ROOT.value
4230
4304
  elif self.orig.name == Tok.KW_HERE:
4231
4305
  return Con.HERE.value
4306
+ elif self.orig.name == Tok.KW_VISITOR:
4307
+ return Con.VISITOR.value
4232
4308
  elif self.orig.name == Tok.KW_INIT:
4233
4309
  return "__init__"
4234
4310
  elif self.orig.name == Tok.KW_POST_INIT:
@@ -4257,7 +4333,7 @@ class Literal(Token, AtomExpr):
4257
4333
 
4258
4334
  def __init__(
4259
4335
  self,
4260
- orig_src: JacSource,
4336
+ orig_src: Source,
4261
4337
  name: str,
4262
4338
  value: str,
4263
4339
  line: int,
@@ -4267,7 +4343,6 @@ class Literal(Token, AtomExpr):
4267
4343
  pos_start: int,
4268
4344
  pos_end: int,
4269
4345
  ) -> None:
4270
- """Initialize token."""
4271
4346
  Token.__init__(
4272
4347
  self,
4273
4348
  orig_src=orig_src,
@@ -4292,7 +4367,7 @@ class Literal(Token, AtomExpr):
4292
4367
 
4293
4368
 
4294
4369
  class BuiltinType(Name, Literal):
4295
- """Type node type for Jac Ast."""
4370
+ """BuiltinType node type for Jac Ast."""
4296
4371
 
4297
4372
  SYMBOL_TYPE = SymbolType.VAR
4298
4373
 
@@ -4311,7 +4386,6 @@ class Float(Literal):
4311
4386
 
4312
4387
  @property
4313
4388
  def lit_value(self) -> float:
4314
- """Return literal value in its python type."""
4315
4389
  return float(self.value)
4316
4390
 
4317
4391
 
@@ -4322,7 +4396,6 @@ class Int(Literal):
4322
4396
 
4323
4397
  @property
4324
4398
  def lit_value(self) -> int:
4325
- """Return literal value in its python type."""
4326
4399
  return int(self.value)
4327
4400
 
4328
4401
 
@@ -4333,7 +4406,6 @@ class String(Literal):
4333
4406
 
4334
4407
  @property
4335
4408
  def lit_value(self) -> str:
4336
- """Return literal value in its python type."""
4337
4409
  if isinstance(self.value, bytes):
4338
4410
  return self.value
4339
4411
  if any(
@@ -4364,12 +4436,10 @@ class String(Literal):
4364
4436
  return self.value
4365
4437
 
4366
4438
  def normalize(self, deep: bool = True) -> bool:
4367
- """Normalize string."""
4368
4439
  self.value = r"%s" % self.value
4369
4440
  return True
4370
4441
 
4371
4442
  def unparse(self) -> str:
4372
- """Unparse string."""
4373
4443
  super().unparse()
4374
4444
  return repr(self.value)
4375
4445
 
@@ -4381,18 +4451,16 @@ class Bool(Literal):
4381
4451
 
4382
4452
  @property
4383
4453
  def lit_value(self) -> bool:
4384
- """Return literal value in its python type."""
4385
4454
  return self.value == "True"
4386
4455
 
4387
4456
 
4388
4457
  class Null(Literal):
4389
- """Semicolon node type for Jac Ast."""
4458
+ """Null node type for Jac Ast."""
4390
4459
 
4391
4460
  SYMBOL_TYPE = SymbolType.NULL
4392
4461
 
4393
4462
  @property
4394
4463
  def lit_value(self) -> None:
4395
- """Return literal value in its python type."""
4396
4464
  return None
4397
4465
 
4398
4466
 
@@ -4403,18 +4471,16 @@ class Ellipsis(Literal):
4403
4471
 
4404
4472
  @property
4405
4473
  def lit_value(self) -> EllipsisType:
4406
- """Return literal value in its python type."""
4407
4474
  return ...
4408
4475
 
4409
4476
 
4410
4477
  class EmptyToken(Token):
4411
4478
  """EmptyToken node type for Jac Ast."""
4412
4479
 
4413
- def __init__(self, orig_src: JacSource | None = None) -> None:
4414
- """Initialize empty token."""
4480
+ def __init__(self, orig_src: Source | None = None) -> None:
4415
4481
  super().__init__(
4416
4482
  name="EmptyToken",
4417
- orig_src=orig_src or JacSource("", ""),
4483
+ orig_src=orig_src or Source("", ""),
4418
4484
  value="",
4419
4485
  line=0,
4420
4486
  end_line=0,
@@ -4425,16 +4491,46 @@ class EmptyToken(Token):
4425
4491
  )
4426
4492
 
4427
4493
 
4428
- class Semi(Token, CodeBlockStmt):
4494
+ class Semi(
4495
+ Token,
4496
+ CodeBlockStmt,
4497
+ ):
4429
4498
  """Semicolon node type for Jac Ast."""
4430
4499
 
4500
+ def __init__(
4501
+ self,
4502
+ orig_src: Source,
4503
+ name: str,
4504
+ value: str,
4505
+ line: int,
4506
+ end_line: int,
4507
+ col_start: int,
4508
+ col_end: int,
4509
+ pos_start: int,
4510
+ pos_end: int,
4511
+ ) -> None:
4512
+ """Initialize token."""
4513
+ Token.__init__(
4514
+ self,
4515
+ orig_src=orig_src,
4516
+ name=name,
4517
+ value=value,
4518
+ line=line,
4519
+ end_line=end_line,
4520
+ col_start=col_start,
4521
+ col_end=col_end,
4522
+ pos_start=pos_start,
4523
+ pos_end=pos_end,
4524
+ )
4525
+ CodeBlockStmt.__init__(self)
4526
+
4431
4527
 
4432
4528
  class CommentToken(Token):
4433
4529
  """CommentToken node type for Jac Ast."""
4434
4530
 
4435
4531
  def __init__(
4436
4532
  self,
4437
- orig_src: JacSource,
4533
+ orig_src: Source,
4438
4534
  name: str,
4439
4535
  value: str,
4440
4536
  line: int,
@@ -4443,10 +4539,9 @@ class CommentToken(Token):
4443
4539
  col_end: int,
4444
4540
  pos_start: int,
4445
4541
  pos_end: int,
4446
- kid: Sequence[AstNode],
4542
+ kid: Sequence[UniNode],
4447
4543
  is_inline: bool = False,
4448
4544
  ) -> None:
4449
- """Initialize token."""
4450
4545
  self.is_inline = is_inline
4451
4546
 
4452
4547
  Token.__init__(
@@ -4462,15 +4557,29 @@ class CommentToken(Token):
4462
4557
  pos_end=pos_end,
4463
4558
  )
4464
4559
 
4465
- AstNode.__init__(self, kid=kid)
4560
+ UniNode.__init__(self, kid=kid)
4561
+
4562
+ @property
4563
+ def left_node(self) -> Optional[UniNode]:
4564
+ if self.parent and (idx := self.parent.kid.index(self)) > 0:
4565
+ return self.parent.kid[idx - 1]
4566
+ return None
4567
+
4568
+ @property
4569
+ def right_node(self) -> Optional[UniNode]:
4570
+ if (
4571
+ self.parent
4572
+ and (idx := self.parent.kid.index(self)) < len(self.parent.kid) - 1
4573
+ ):
4574
+ return self.parent.kid[idx + 1]
4575
+ return None
4466
4576
 
4467
4577
 
4468
4578
  # ----------------
4469
- class JacSource(EmptyToken):
4579
+ class Source(EmptyToken):
4470
4580
  """SourceString node type for Jac Ast."""
4471
4581
 
4472
4582
  def __init__(self, source: str, mod_path: str) -> None:
4473
- """Initialize source string."""
4474
4583
  super().__init__(self)
4475
4584
  self.value = source
4476
4585
  self.hash = md5(source.encode()).hexdigest()
@@ -4479,15 +4588,14 @@ class JacSource(EmptyToken):
4479
4588
 
4480
4589
  @property
4481
4590
  def code(self) -> str:
4482
- """Return code."""
4591
+ """Return the source code as string."""
4483
4592
  return self.value
4484
4593
 
4485
4594
 
4486
4595
  class PythonModuleAst(EmptyToken):
4487
4596
  """SourceString node type for Jac Ast."""
4488
4597
 
4489
- def __init__(self, ast: ast3.Module, orig_src: JacSource) -> None:
4490
- """Initialize source string."""
4598
+ def __init__(self, ast: ast3.Module, orig_src: Source) -> None:
4491
4599
  super().__init__()
4492
4600
  self.ast = ast
4493
4601
  self.orig_src = orig_src