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.
- jaclang/__init__.py +7 -414
- jaclang/cli/cli.md +5 -5
- jaclang/cli/cli.py +311 -214
- jaclang/cli/cmdreg.py +188 -31
- jaclang/compiler/__init__.py +10 -15
- jaclang/compiler/{codeloc.py → codeinfo.py} +11 -30
- jaclang/compiler/constant.py +10 -33
- jaclang/compiler/jac.lark +61 -92
- jaclang/compiler/larkparse/jac_parser.py +3444 -0
- jaclang/compiler/parser.py +1054 -1341
- jaclang/compiler/passes/__init__.py +2 -2
- jaclang/compiler/passes/main/__init__.py +33 -14
- jaclang/compiler/passes/main/annex_pass.py +85 -0
- jaclang/compiler/passes/main/cfg_build_pass.py +275 -0
- jaclang/compiler/passes/main/def_impl_match_pass.py +146 -102
- jaclang/compiler/passes/main/def_use_pass.py +64 -269
- jaclang/compiler/passes/main/import_pass.py +175 -360
- jaclang/compiler/passes/main/inheritance_pass.py +107 -105
- jaclang/compiler/passes/main/pyast_gen_pass.py +1129 -1600
- jaclang/compiler/passes/main/pyast_load_pass.py +540 -584
- jaclang/compiler/passes/main/pybc_gen_pass.py +38 -35
- jaclang/compiler/passes/main/pyjac_ast_link_pass.py +46 -160
- jaclang/compiler/passes/main/sym_tab_build_pass.py +113 -1202
- jaclang/compiler/passes/main/sym_tab_link_pass.py +141 -0
- jaclang/{tests → compiler/passes/main/tests}/fixtures/access_modifier.jac +10 -9
- jaclang/compiler/passes/main/tests/fixtures/atest.impl.jac +3 -0
- jaclang/compiler/passes/main/tests/fixtures/atest.jac +11 -0
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl/getme.impl.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.jac +3 -3
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.something.else.impl.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/base.impl.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/base.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/base2.impl.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/base2.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/blip.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/cfg_ability_test.jac +23 -0
- jaclang/compiler/passes/main/tests/fixtures/cfg_gen.jac +19 -0
- jaclang/compiler/passes/main/tests/fixtures/circular_import.jac +7 -0
- jaclang/compiler/passes/main/tests/fixtures/data_spatial_types.jac +12 -12
- jaclang/compiler/passes/main/tests/fixtures/decls.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/defn_decl_mismatch.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/defs_and_uses.jac +6 -6
- jaclang/compiler/passes/main/tests/fixtures/enumerations.jac +13 -0
- jaclang/compiler/passes/main/tests/fixtures/fstrings.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/func.jac +2 -2
- jaclang/compiler/passes/main/tests/fixtures/func2.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/game1.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/impl/defs1.jac +2 -2
- jaclang/compiler/passes/main/tests/fixtures/impl/defs2.jac +2 -2
- jaclang/compiler/passes/main/tests/fixtures/impl/imps.jac +0 -8
- jaclang/compiler/passes/main/tests/fixtures/impl_grab.impl.jac +5 -0
- jaclang/{tests → compiler/passes/main/tests}/fixtures/impl_grab.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/main_err.impl.jac +6 -0
- jaclang/compiler/passes/main/tests/fixtures/main_err.jac +6 -0
- jaclang/compiler/passes/main/tests/fixtures/mod_type_assign.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/mtest.impl.jac +6 -0
- jaclang/{tests → compiler/passes/main/tests}/fixtures/mtest.jac +1 -1
- jaclang/{tests → compiler/passes/main/tests}/fixtures/nested_impls.jac +14 -15
- jaclang/compiler/passes/main/tests/fixtures/py_imp_test.jac +7 -7
- jaclang/compiler/passes/main/tests/fixtures/second_err.jac +4 -0
- jaclang/compiler/passes/main/tests/fixtures/str2doc.py +3 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/__init__.py +5 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/actions.jac +23 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/main.jac +14 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/no_dupls.jac +35 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/one.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/type_info.jac +4 -4
- jaclang/compiler/passes/main/tests/test_cfg_build_pass.py +99 -0
- jaclang/compiler/passes/main/tests/test_decl_impl_match_pass.py +157 -0
- jaclang/compiler/passes/main/tests/test_def_use_pass.py +4 -6
- jaclang/compiler/passes/main/tests/test_import_pass.py +59 -46
- jaclang/compiler/passes/main/tests/test_pyast_build_pass.py +15 -0
- jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py +25 -34
- jaclang/compiler/passes/main/tests/test_pybc_gen_pass.py +3 -3
- jaclang/compiler/passes/main/tests/test_sub_node_pass.py +8 -7
- jaclang/compiler/passes/main/tests/test_sym_tab_build_pass.py +4 -4
- jaclang/compiler/passes/main/tests/test_sym_tab_link_pass.py +62 -0
- jaclang/compiler/passes/tool/__init__.py +2 -0
- jaclang/compiler/passes/tool/doc_ir.py +179 -0
- jaclang/compiler/passes/tool/doc_ir_gen_pass.py +1210 -0
- jaclang/compiler/passes/tool/fuse_comments_pass.py +90 -70
- jaclang/compiler/passes/tool/jac_formatter_pass.py +122 -2554
- jaclang/compiler/passes/tool/tests/fixtures/corelib.jac +249 -97
- jaclang/compiler/passes/tool/tests/fixtures/corelib_fmt.jac +94 -97
- jaclang/compiler/passes/tool/tests/fixtures/doc_string.jac +2 -2
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/access_mod_check.jac +5 -5
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/archetype_test.jac +13 -0
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/decorator_stack.jac +7 -7
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/line_spacing.jac +8 -8
- jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.dot +3 -3
- jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.txt +3 -3
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/ability_impl_long_comprehension.jac +1 -1
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/call_with_many_parameters.jac +2 -2
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/simple_walker.jac +3 -3
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/try_block_and_walker_spawn_and_fstrings.jac +1 -1
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/type_annotation.jac +1 -1
- jaclang/compiler/passes/tool/tests/fixtures/simple_walk.jac +1 -1
- jaclang/compiler/passes/tool/tests/fixtures/simple_walk_fmt.jac +10 -4
- jaclang/compiler/passes/tool/tests/test_doc_ir_gen_pass.py +29 -0
- jaclang/compiler/passes/tool/tests/test_jac_format_pass.py +63 -88
- jaclang/compiler/passes/tool/tests/test_unparse_validate.py +27 -28
- jaclang/compiler/passes/transform.py +56 -16
- jaclang/compiler/passes/{ir_pass.py → uni_pass.py} +35 -52
- jaclang/compiler/program.py +205 -0
- jaclang/compiler/tests/fixtures/codegentext.jac +31 -0
- jaclang/compiler/tests/fixtures/fam.jac +10 -10
- jaclang/compiler/tests/fixtures/hello_world.jac +1 -1
- jaclang/compiler/tests/fixtures/staticcheck.jac +2 -2
- jaclang/compiler/tests/test_importer.py +21 -16
- jaclang/compiler/tests/test_parser.py +38 -17
- jaclang/compiler/{absyntree.py → unitree.py} +1120 -1012
- jaclang/langserve/engine.py +183 -171
- jaclang/langserve/sem_manager.py +26 -22
- jaclang/langserve/server.py +6 -15
- jaclang/langserve/tests/fixtures/base_module_structure.jac +7 -7
- jaclang/langserve/tests/fixtures/circle.jac +6 -6
- jaclang/langserve/tests/fixtures/circle_err.jac +6 -6
- jaclang/langserve/tests/fixtures/circle_pure.impl.jac +5 -5
- jaclang/langserve/tests/fixtures/circle_pure.jac +7 -7
- jaclang/langserve/tests/fixtures/circle_pure_err.impl.jac +2 -2
- jaclang/langserve/tests/fixtures/circle_pure_err.jac +7 -7
- jaclang/langserve/tests/fixtures/import_include_statements.jac +6 -6
- jaclang/langserve/tests/fixtures/rename.jac +6 -6
- jaclang/langserve/tests/server_test/test_lang_serve.py +262 -0
- jaclang/langserve/tests/server_test/utils.py +115 -0
- jaclang/langserve/tests/test_sem_tokens.py +2 -2
- jaclang/langserve/tests/test_server.py +41 -23
- jaclang/langserve/utils.jac +438 -0
- jaclang/runtimelib/{architype.py → archetype.py} +85 -61
- jaclang/runtimelib/builtin.py +92 -0
- jaclang/runtimelib/constructs.py +11 -13
- jaclang/runtimelib/importer.py +63 -51
- jaclang/runtimelib/machine.py +1551 -144
- jaclang/runtimelib/memory.py +6 -6
- jaclang/{plugin → runtimelib}/tests/fixtures/graph_purger.jac +1 -1
- jaclang/{plugin → runtimelib}/tests/fixtures/impl_match.jac +2 -2
- jaclang/runtimelib/tests/fixtures/impl_match_impl.jac +3 -0
- jaclang/{plugin → runtimelib}/tests/fixtures/other_root_access.jac +7 -7
- jaclang/{plugin → runtimelib}/tests/fixtures/savable_object.jac +3 -5
- jaclang/{plugin → runtimelib}/tests/fixtures/simple_node_connection.jac +6 -6
- jaclang/{plugin → runtimelib}/tests/fixtures/simple_persistent.jac +1 -1
- jaclang/runtimelib/tests/test_features.py +72 -0
- jaclang/{plugin → runtimelib}/tests/test_jaseci.py +6 -5
- jaclang/runtimelib/utils.py +31 -63
- jaclang/settings.py +1 -6
- jaclang/tests/fixtures/{abc.jac → abc_check.jac} +6 -6
- jaclang/tests/fixtures/arch_rel_import_creation.jac +4 -4
- jaclang/tests/fixtures/async_ability.jac +18 -0
- jaclang/tests/fixtures/async_walker.jac +23 -0
- jaclang/tests/fixtures/baddy.jac +1 -1
- jaclang/tests/fixtures/base_class1.jac +2 -2
- jaclang/tests/fixtures/base_class2.jac +2 -2
- jaclang/tests/fixtures/base_class_complex_expr.jac +3 -3
- jaclang/tests/fixtures/builtin_dotgen.jac +1 -1
- jaclang/tests/fixtures/builtin_dotgen_json.jac +21 -0
- jaclang/tests/fixtures/byllmissue.jac +1 -1
- jaclang/tests/fixtures/chandra_bugs.jac +1 -1
- jaclang/tests/fixtures/chandra_bugs2.jac +1 -1
- jaclang/tests/fixtures/cls_method.jac +6 -6
- jaclang/tests/fixtures/concurrency.jac +39 -0
- jaclang/tests/fixtures/connect_traverse_syntax.jac +18 -0
- jaclang/tests/fixtures/create_dynamic_archetype.jac +35 -0
- jaclang/tests/fixtures/decl_defn_param_name.jac +4 -4
- jaclang/tests/fixtures/deep/deeper/__init__.jac +1 -0
- jaclang/tests/fixtures/deep/deeper/deep_outer_import.jac +2 -3
- jaclang/tests/fixtures/deep/deeper/deep_outer_import2.jac +3 -3
- jaclang/tests/fixtures/deep/deeper/snd_lev.jac +2 -2
- jaclang/tests/fixtures/deep/mycode.jac +1 -1
- jaclang/tests/fixtures/deep/one_lev.jac +3 -4
- jaclang/tests/fixtures/deep/one_lev_dup.jac +2 -2
- jaclang/tests/fixtures/deep_convert.jac +1 -1
- jaclang/tests/fixtures/deep_import.jac +2 -2
- jaclang/tests/fixtures/deep_import_interp.jac +8 -0
- jaclang/tests/fixtures/deep_import_mods.jac +3 -3
- jaclang/tests/fixtures/deferred_field.jac +1 -1
- jaclang/tests/fixtures/del_clean.jac +7 -0
- jaclang/tests/fixtures/disconn.jac +3 -3
- jaclang/tests/fixtures/dynamic_archetype.jac +34 -0
- jaclang/tests/fixtures/edge_node_walk.jac +12 -12
- jaclang/tests/fixtures/edge_ops.jac +7 -7
- jaclang/tests/fixtures/edges_walk.jac +10 -10
- jaclang/tests/fixtures/edgetypeissue.jac +1 -1
- jaclang/tests/fixtures/enum_inside_archtype.jac +4 -4
- jaclang/tests/fixtures/err.impl.jac +1 -1
- jaclang/tests/fixtures/err.jac +2 -2
- jaclang/tests/fixtures/err_runtime.jac +2 -2
- jaclang/tests/fixtures/foo.jac +7 -7
- jaclang/tests/fixtures/game1.jac +4 -4
- jaclang/tests/fixtures/gendot_bubble_sort.jac +4 -4
- jaclang/tests/fixtures/glob_multivar_statement.jac +1 -1
- jaclang/tests/fixtures/guess_game.jac +5 -5
- jaclang/tests/fixtures/has_goodness.jac +1 -1
- jaclang/tests/fixtures/hash_init_check.jac +3 -3
- jaclang/tests/fixtures/hello.jac +1 -1
- jaclang/tests/fixtures/ignore.jac +3 -3
- jaclang/tests/fixtures/ignore_dup.jac +3 -3
- jaclang/tests/fixtures/impl_match_confused.impl.jac +1 -1
- jaclang/tests/fixtures/import.jac +9 -9
- jaclang/tests/fixtures/import_all.jac +1 -1
- jaclang/tests/fixtures/index_slice.jac +1 -1
- jaclang/tests/fixtures/inherit_check.jac +3 -3
- jaclang/tests/fixtures/jac_from_py.py +4 -0
- jaclang/tests/fixtures/jacsamp.jac +1 -1
- jaclang/tests/fixtures/jactest_main.jac +1 -1
- jaclang/tests/fixtures/jp_importer.jac +7 -8
- jaclang/tests/fixtures/jp_importer_auto.jac +3 -3
- jaclang/tests/fixtures/lambda.jac +2 -2
- jaclang/tests/fixtures/needs_import.jac +6 -6
- jaclang/tests/fixtures/needs_import_1.jac +1 -1
- jaclang/tests/fixtures/needs_import_2.jac +1 -1
- jaclang/tests/fixtures/needs_import_3.jac +1 -1
- jaclang/tests/fixtures/needs_import_dup.jac +6 -6
- jaclang/tests/fixtures/node_del.jac +60 -0
- jaclang/tests/fixtures/nosigself.jac +3 -3
- jaclang/tests/fixtures/py2jac.py +30 -0
- jaclang/tests/fixtures/py_bool_expr.py +7 -0
- jaclang/tests/fixtures/py_namedexpr.py +7 -0
- jaclang/tests/fixtures/pyfunc_3.py +0 -2
- jaclang/tests/fixtures/random_check.jac +5 -5
- jaclang/tests/fixtures/refs_target.jac +17 -0
- jaclang/tests/fixtures/simple_archs.jac +2 -2
- jaclang/tests/fixtures/simple_walk.jac +52 -0
- jaclang/tests/fixtures/slice_vals.jac +3 -3
- jaclang/tests/fixtures/sub_abil_sep.jac +3 -3
- jaclang/tests/fixtures/sub_abil_sep_multilev.jac +3 -3
- jaclang/tests/fixtures/trailing_comma.jac +4 -4
- jaclang/tests/fixtures/type_info.jac +5 -5
- jaclang/{compiler/passes/main/tests → tests}/fixtures/uninitialized_hasvars.jac +1 -1
- jaclang/tests/fixtures/visit_order.jac +4 -4
- jaclang/tests/fixtures/walker_override.jac +2 -2
- jaclang/tests/fixtures/walker_update.jac +5 -5
- jaclang/tests/fixtures/with_context.jac +4 -4
- jaclang/tests/test_bugs.py +2 -2
- jaclang/tests/test_cli.py +118 -223
- jaclang/tests/test_language.py +474 -468
- jaclang/tests/test_man_code.py +2 -2
- jaclang/tests/test_reference.py +4 -4
- jaclang/tests/test_settings.py +16 -16
- jaclang/tests/test_typecheck.py +555 -0
- jaclang/utils/__init__.py +4 -0
- jaclang/utils/helpers.py +12 -27
- jaclang/utils/lang_tools.py +84 -74
- jaclang/utils/module_resolver.py +69 -0
- jaclang/utils/test.py +8 -5
- jaclang/utils/tests/test_lang_tools.py +38 -13
- jaclang/utils/treeprinter.py +177 -40
- jaclang/vendor/__init__.py +1 -2
- jaclang/vendor/attr/__init__.py +14 -44
- jaclang/vendor/attr/__init__.pyi +155 -321
- jaclang/vendor/attr/_cmp.py +25 -15
- jaclang/vendor/attr/_cmp.pyi +7 -7
- jaclang/vendor/attr/_compat.py +15 -8
- jaclang/vendor/attr/_config.py +1 -1
- jaclang/vendor/attr/_funcs.py +148 -163
- jaclang/vendor/attr/_make.py +859 -855
- jaclang/vendor/attr/_next_gen.py +426 -32
- jaclang/vendor/attr/converters.py +67 -49
- jaclang/vendor/attr/converters.pyi +13 -7
- jaclang/vendor/attr/filters.py +17 -11
- jaclang/vendor/attr/filters.pyi +3 -3
- jaclang/vendor/attr/setters.py +11 -5
- jaclang/vendor/attr/setters.pyi +2 -1
- jaclang/vendor/attr/validators.py +191 -162
- jaclang/vendor/attr/validators.pyi +25 -27
- jaclang/vendor/attrs/__init__.py +9 -5
- jaclang/vendor/attrs/__init__.pyi +225 -29
- jaclang/vendor/attrs-25.3.0.dist-info/INSTALLER +1 -0
- jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/METADATA +83 -53
- jaclang/vendor/attrs-25.3.0.dist-info/RECORD +56 -0
- jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/WHEEL +1 -1
- jaclang/vendor/bin/dmypy +8 -0
- jaclang/vendor/bin/mypy +8 -0
- jaclang/vendor/bin/mypyc +8 -0
- jaclang/vendor/bin/stubgen +8 -0
- jaclang/vendor/bin/stubtest +8 -0
- jaclang/vendor/cattr/gen.py +2 -2
- jaclang/vendor/cattr/preconf/bson.py +1 -0
- jaclang/vendor/cattr/preconf/json.py +1 -0
- jaclang/vendor/cattr/preconf/msgpack.py +1 -0
- jaclang/vendor/cattr/preconf/orjson.py +1 -0
- jaclang/vendor/cattr/preconf/pyyaml.py +1 -0
- jaclang/vendor/cattr/preconf/tomlkit.py +1 -0
- jaclang/vendor/cattr/preconf/ujson.py +1 -0
- jaclang/vendor/cattrs/__init__.py +21 -21
- jaclang/vendor/cattrs/_compat.py +176 -62
- jaclang/vendor/cattrs/_generics.py +5 -3
- jaclang/vendor/cattrs/cols.py +289 -0
- jaclang/vendor/cattrs/converters.py +505 -187
- jaclang/vendor/cattrs/disambiguators.py +118 -45
- jaclang/vendor/cattrs/dispatch.py +66 -36
- jaclang/vendor/cattrs/fns.py +6 -1
- jaclang/vendor/cattrs/gen/__init__.py +365 -202
- jaclang/vendor/cattrs/gen/_generics.py +41 -5
- jaclang/vendor/cattrs/gen/_lc.py +3 -2
- jaclang/vendor/cattrs/gen/_shared.py +39 -32
- jaclang/vendor/cattrs/gen/typeddicts.py +75 -88
- jaclang/vendor/cattrs/preconf/__init__.py +20 -0
- jaclang/vendor/cattrs/preconf/bson.py +7 -8
- jaclang/vendor/cattrs/preconf/cbor2.py +3 -0
- jaclang/vendor/cattrs/preconf/json.py +8 -4
- jaclang/vendor/cattrs/preconf/msgpack.py +3 -0
- jaclang/vendor/cattrs/preconf/msgspec.py +185 -0
- jaclang/vendor/cattrs/preconf/orjson.py +20 -7
- jaclang/vendor/cattrs/preconf/pyyaml.py +15 -3
- jaclang/vendor/cattrs/preconf/tomlkit.py +3 -1
- jaclang/vendor/cattrs/preconf/ujson.py +3 -0
- jaclang/vendor/cattrs/strategies/__init__.py +1 -0
- jaclang/vendor/cattrs/strategies/_class_methods.py +1 -1
- jaclang/vendor/cattrs/strategies/_subclasses.py +43 -29
- jaclang/vendor/cattrs/strategies/_unions.py +47 -24
- jaclang/vendor/cattrs/v.py +1 -0
- jaclang/vendor/cattrs-24.1.3.dist-info/INSTALLER +1 -0
- jaclang/vendor/cattrs-24.1.3.dist-info/METADATA +161 -0
- jaclang/vendor/cattrs-24.1.3.dist-info/RECORD +96 -0
- jaclang/vendor/{cattrs-23.2.3.dist-info → cattrs-24.1.3.dist-info}/WHEEL +1 -1
- jaclang/vendor/lark/__init__.py +38 -38
- jaclang/vendor/lark/__pyinstaller/__init__.py +6 -6
- jaclang/vendor/lark/__pyinstaller/hook-lark.py +14 -14
- jaclang/vendor/lark/ast_utils.py +59 -59
- jaclang/vendor/lark/common.py +86 -89
- jaclang/vendor/lark/exceptions.py +292 -292
- jaclang/vendor/lark/grammar.py +130 -130
- jaclang/vendor/lark/grammars/common.lark +59 -59
- jaclang/vendor/lark/grammars/lark.lark +62 -62
- jaclang/vendor/lark/grammars/python.lark +302 -302
- jaclang/vendor/lark/grammars/unicode.lark +7 -7
- jaclang/vendor/lark/indenter.py +143 -112
- jaclang/vendor/lark/lark.py +658 -661
- jaclang/vendor/lark/lexer.py +678 -678
- jaclang/vendor/lark/load_grammar.py +1428 -1428
- jaclang/vendor/lark/parse_tree_builder.py +391 -391
- jaclang/vendor/lark/parser_frontends.py +257 -257
- jaclang/vendor/lark/parsers/cyk.py +340 -340
- jaclang/vendor/lark/parsers/earley.py +317 -308
- jaclang/vendor/lark/parsers/earley_common.py +42 -42
- jaclang/vendor/lark/parsers/earley_forest.py +802 -810
- jaclang/vendor/lark/parsers/grammar_analysis.py +203 -203
- jaclang/vendor/lark/parsers/lalr_analysis.py +332 -332
- jaclang/vendor/lark/parsers/lalr_interactive_parser.py +158 -157
- jaclang/vendor/lark/parsers/lalr_parser.py +122 -122
- jaclang/vendor/lark/parsers/lalr_parser_state.py +110 -110
- jaclang/vendor/lark/parsers/xearley.py +165 -165
- jaclang/vendor/lark/reconstruct.py +107 -107
- jaclang/vendor/lark/tools/__init__.py +70 -71
- jaclang/vendor/lark/tools/nearley.py +202 -202
- jaclang/vendor/lark/tools/serialize.py +32 -32
- jaclang/vendor/lark/tools/standalone.py +196 -196
- jaclang/vendor/lark/tree.py +267 -272
- jaclang/vendor/lark/tree_matcher.py +186 -186
- jaclang/vendor/lark/utils.py +346 -361
- jaclang/vendor/lark/visitors.py +596 -593
- jaclang/vendor/lark-1.2.2.dist-info/INSTALLER +1 -0
- jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/METADATA +48 -47
- jaclang/vendor/lark-1.2.2.dist-info/RECORD +83 -0
- jaclang/vendor/{mypy_extensions-1.0.0.dist-info → lark-1.2.2.dist-info}/WHEEL +1 -1
- jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info/licenses}/LICENSE +18 -18
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/INSTALLER +1 -0
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/METADATA +2 -1
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/RECORD +17 -10
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/WHEEL +1 -1
- jaclang/vendor/pluggy/_version.py +7 -2
- jaclang/vendor/pluggy-1.5.0.dist-info/INSTALLER +1 -0
- jaclang/vendor/pluggy-1.5.0.dist-info/METADATA +6 -5
- jaclang/vendor/pluggy-1.5.0.dist-info/RECORD +24 -14
- jaclang/vendor/pluggy-1.5.0.dist-info/WHEEL +1 -1
- jaclang/vendor/pygls-1.3.1.dist-info/INSTALLER +1 -0
- jaclang/vendor/pygls-1.3.1.dist-info/METADATA +2 -2
- jaclang/vendor/pygls-1.3.1.dist-info/RECORD +45 -24
- jaclang/vendor/pygls-1.3.1.dist-info/WHEEL +1 -1
- {jaclang-0.7.33.dist-info → jaclang-0.8.0.dist-info}/METADATA +4 -4
- jaclang-0.8.0.dist-info/RECORD +552 -0
- {jaclang-0.7.33.dist-info → jaclang-0.8.0.dist-info}/WHEEL +1 -1
- jaclang/compiler/.gitignore +0 -1
- jaclang/compiler/compile.py +0 -119
- jaclang/compiler/passes/main/access_modifier_pass.py +0 -130
- jaclang/compiler/passes/main/fuse_typeinfo_pass.py +0 -656
- jaclang/compiler/passes/main/py_collect_dep_pass.py +0 -78
- jaclang/compiler/passes/main/pyout_pass.py +0 -86
- jaclang/compiler/passes/main/registry_pass.py +0 -156
- jaclang/compiler/passes/main/schedules.py +0 -47
- jaclang/compiler/passes/main/sub_node_tab_pass.py +0 -36
- jaclang/compiler/passes/main/tests/fixtures/registry.jac +0 -36
- jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py +0 -114
- jaclang/compiler/passes/main/tests/test_registry_pass.py +0 -31
- jaclang/compiler/passes/main/tests/test_type_check_pass.py +0 -91
- jaclang/compiler/passes/main/tests/test_typeinfo_pass.py +0 -29
- jaclang/compiler/passes/main/type_check_pass.py +0 -128
- jaclang/compiler/passes/tool/schedules.py +0 -18
- jaclang/compiler/passes/tool/tests/fixtures/genai/essay_review.jac +0 -36
- jaclang/compiler/passes/tool/tests/fixtures/genai/expert_answer.jac +0 -17
- jaclang/compiler/passes/tool/tests/fixtures/genai/joke_gen.jac +0 -32
- jaclang/compiler/passes/tool/tests/fixtures/genai/odd_word_out.jac +0 -27
- jaclang/compiler/passes/tool/tests/fixtures/genai/personality_finder.jac +0 -35
- jaclang/compiler/passes/tool/tests/fixtures/genai/text_to_type.jac +0 -25
- jaclang/compiler/passes/tool/tests/fixtures/genai/translator.jac +0 -13
- jaclang/compiler/passes/tool/tests/fixtures/genai/wikipedia.jac +0 -63
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/architype_test.jac +0 -13
- jaclang/compiler/passes/utils/mypy_ast_build.py +0 -940
- jaclang/compiler/py_info.py +0 -22
- jaclang/compiler/semtable.py +0 -159
- jaclang/compiler/symtable.py +0 -297
- jaclang/langserve/utils.py +0 -458
- jaclang/plugin/__init__.py +0 -7
- jaclang/plugin/builtin.py +0 -57
- jaclang/plugin/default.py +0 -1443
- jaclang/plugin/feature.py +0 -574
- jaclang/plugin/plugin.md +0 -471
- jaclang/plugin/spec.py +0 -536
- jaclang/plugin/tests/fixtures/impl_match_impl.jac +0 -3
- jaclang/plugin/tests/test_features.py +0 -56
- jaclang/runtimelib/context.py +0 -191
- jaclang/tests/fixtures/create_dynamic_architype.jac +0 -35
- jaclang/tests/fixtures/dynamic_architype.jac +0 -34
- jaclang/tests/fixtures/impl_grab.impl.jac +0 -5
- jaclang/tests/fixtures/mtest.impl.jac +0 -6
- jaclang/tests/fixtures/registry.jac +0 -58
- jaclang/tests/fixtures/semstr.jac +0 -30
- jaclang/tests/main.jac +0 -2
- jaclang/utils/profiler.py +0 -62
- jaclang/vendor/attrs-23.2.0.dist-info/RECORD +0 -35
- jaclang/vendor/cattrs-23.2.3.dist-info/METADATA +0 -221
- jaclang/vendor/cattrs-23.2.3.dist-info/RECORD +0 -48
- jaclang/vendor/lark-1.1.9.dist-info/RECORD +0 -46
- jaclang/vendor/lark-1.1.9.dist-info/WHEEL +0 -5
- jaclang/vendor/mypy/__init__.py +0 -1
- jaclang/vendor/mypy/__main__.py +0 -37
- jaclang/vendor/mypy/api.py +0 -94
- jaclang/vendor/mypy/applytype.py +0 -172
- jaclang/vendor/mypy/argmap.py +0 -268
- jaclang/vendor/mypy/binder.py +0 -538
- jaclang/vendor/mypy/bogus_type.py +0 -27
- jaclang/vendor/mypy/build.py +0 -3562
- jaclang/vendor/mypy/checker.py +0 -8445
- jaclang/vendor/mypy/checkexpr.py +0 -6623
- jaclang/vendor/mypy/checkmember.py +0 -1363
- jaclang/vendor/mypy/checkpattern.py +0 -801
- jaclang/vendor/mypy/checkstrformat.py +0 -1109
- jaclang/vendor/mypy/config_parser.py +0 -670
- jaclang/vendor/mypy/constant_fold.py +0 -187
- jaclang/vendor/mypy/constraints.py +0 -1636
- jaclang/vendor/mypy/copytype.py +0 -133
- jaclang/vendor/mypy/defaults.py +0 -46
- jaclang/vendor/mypy/dmypy/__main__.py +0 -6
- jaclang/vendor/mypy/dmypy/client.py +0 -749
- jaclang/vendor/mypy/dmypy_os.py +0 -42
- jaclang/vendor/mypy/dmypy_server.py +0 -1107
- jaclang/vendor/mypy/dmypy_util.py +0 -117
- jaclang/vendor/mypy/erasetype.py +0 -278
- jaclang/vendor/mypy/errorcodes.py +0 -291
- jaclang/vendor/mypy/errors.py +0 -1280
- jaclang/vendor/mypy/evalexpr.py +0 -205
- jaclang/vendor/mypy/expandtype.py +0 -524
- jaclang/vendor/mypy/exprtotype.py +0 -209
- jaclang/vendor/mypy/fastparse.py +0 -2147
- jaclang/vendor/mypy/find_sources.py +0 -243
- jaclang/vendor/mypy/fixup.py +0 -428
- jaclang/vendor/mypy/freetree.py +0 -23
- jaclang/vendor/mypy/fscache.py +0 -309
- jaclang/vendor/mypy/fswatcher.py +0 -106
- jaclang/vendor/mypy/gclogger.py +0 -47
- jaclang/vendor/mypy/git.py +0 -34
- jaclang/vendor/mypy/graph_utils.py +0 -112
- jaclang/vendor/mypy/indirection.py +0 -121
- jaclang/vendor/mypy/infer.py +0 -75
- jaclang/vendor/mypy/inspections.py +0 -627
- jaclang/vendor/mypy/ipc.py +0 -310
- jaclang/vendor/mypy/join.py +0 -871
- jaclang/vendor/mypy/literals.py +0 -306
- jaclang/vendor/mypy/lookup.py +0 -61
- jaclang/vendor/mypy/main.py +0 -1574
- jaclang/vendor/mypy/maptype.py +0 -106
- jaclang/vendor/mypy/meet.py +0 -1140
- jaclang/vendor/mypy/memprofile.py +0 -121
- jaclang/vendor/mypy/message_registry.py +0 -329
- jaclang/vendor/mypy/messages.py +0 -3186
- jaclang/vendor/mypy/metastore.py +0 -225
- jaclang/vendor/mypy/mixedtraverser.py +0 -112
- jaclang/vendor/mypy/modulefinder.py +0 -875
- jaclang/vendor/mypy/moduleinspect.py +0 -184
- jaclang/vendor/mypy/mro.py +0 -62
- jaclang/vendor/mypy/nodes.py +0 -4115
- jaclang/vendor/mypy/operators.py +0 -126
- jaclang/vendor/mypy/options.py +0 -556
- jaclang/vendor/mypy/parse.py +0 -30
- jaclang/vendor/mypy/partially_defined.py +0 -675
- jaclang/vendor/mypy/patterns.py +0 -150
- jaclang/vendor/mypy/plugin.py +0 -901
- jaclang/vendor/mypy/plugins/attrs.py +0 -1166
- jaclang/vendor/mypy/plugins/common.py +0 -440
- jaclang/vendor/mypy/plugins/ctypes.py +0 -245
- jaclang/vendor/mypy/plugins/dataclasses.py +0 -1108
- jaclang/vendor/mypy/plugins/default.py +0 -531
- jaclang/vendor/mypy/plugins/enums.py +0 -259
- jaclang/vendor/mypy/plugins/functools.py +0 -104
- jaclang/vendor/mypy/plugins/proper_plugin.py +0 -175
- jaclang/vendor/mypy/plugins/singledispatch.py +0 -224
- jaclang/vendor/mypy/py.typed +0 -1
- jaclang/vendor/mypy/pyinfo.py +0 -78
- jaclang/vendor/mypy/reachability.py +0 -362
- jaclang/vendor/mypy/refinfo.py +0 -92
- jaclang/vendor/mypy/renaming.py +0 -568
- jaclang/vendor/mypy/report.py +0 -924
- jaclang/vendor/mypy/scope.py +0 -125
- jaclang/vendor/mypy/semanal.py +0 -7187
- jaclang/vendor/mypy/semanal_classprop.py +0 -187
- jaclang/vendor/mypy/semanal_enum.py +0 -253
- jaclang/vendor/mypy/semanal_infer.py +0 -128
- jaclang/vendor/mypy/semanal_main.py +0 -511
- jaclang/vendor/mypy/semanal_namedtuple.py +0 -670
- jaclang/vendor/mypy/semanal_newtype.py +0 -273
- jaclang/vendor/mypy/semanal_pass1.py +0 -156
- jaclang/vendor/mypy/semanal_shared.py +0 -490
- jaclang/vendor/mypy/semanal_typeargs.py +0 -265
- jaclang/vendor/mypy/semanal_typeddict.py +0 -575
- jaclang/vendor/mypy/server/astdiff.py +0 -518
- jaclang/vendor/mypy/server/astmerge.py +0 -562
- jaclang/vendor/mypy/server/aststrip.py +0 -281
- jaclang/vendor/mypy/server/deps.py +0 -1137
- jaclang/vendor/mypy/server/mergecheck.py +0 -83
- jaclang/vendor/mypy/server/objgraph.py +0 -101
- jaclang/vendor/mypy/server/subexpr.py +0 -198
- jaclang/vendor/mypy/server/target.py +0 -11
- jaclang/vendor/mypy/server/trigger.py +0 -26
- jaclang/vendor/mypy/server/update.py +0 -1339
- jaclang/vendor/mypy/sharedparse.py +0 -112
- jaclang/vendor/mypy/solve.py +0 -562
- jaclang/vendor/mypy/split_namespace.py +0 -35
- jaclang/vendor/mypy/state.py +0 -28
- jaclang/vendor/mypy/stats.py +0 -489
- jaclang/vendor/mypy/strconv.py +0 -641
- jaclang/vendor/mypy/stubdoc.py +0 -491
- jaclang/vendor/mypy/stubgen.py +0 -1886
- jaclang/vendor/mypy/stubgenc.py +0 -993
- jaclang/vendor/mypy/stubinfo.py +0 -173
- jaclang/vendor/mypy/stubtest.py +0 -2079
- jaclang/vendor/mypy/stubutil.py +0 -834
- jaclang/vendor/mypy/subtypes.py +0 -1980
- jaclang/vendor/mypy/suggestions.py +0 -1046
- jaclang/vendor/mypy/test/config.py +0 -28
- jaclang/vendor/mypy/test/data.py +0 -821
- jaclang/vendor/mypy/test/helpers.py +0 -476
- jaclang/vendor/mypy/test/meta/_pytest.py +0 -72
- jaclang/vendor/mypy/test/meta/test_diff_helper.py +0 -47
- jaclang/vendor/mypy/test/meta/test_parse_data.py +0 -73
- jaclang/vendor/mypy/test/meta/test_update_data.py +0 -135
- jaclang/vendor/mypy/test/test_find_sources.py +0 -376
- jaclang/vendor/mypy/test/test_ref_info.py +0 -45
- jaclang/vendor/mypy/test/testapi.py +0 -45
- jaclang/vendor/mypy/test/testargs.py +0 -77
- jaclang/vendor/mypy/test/testcheck.py +0 -322
- jaclang/vendor/mypy/test/testcmdline.py +0 -152
- jaclang/vendor/mypy/test/testconstraints.py +0 -134
- jaclang/vendor/mypy/test/testdaemon.py +0 -132
- jaclang/vendor/mypy/test/testdeps.py +0 -77
- jaclang/vendor/mypy/test/testdiff.py +0 -67
- jaclang/vendor/mypy/test/testerrorstream.py +0 -46
- jaclang/vendor/mypy/test/testfinegrained.py +0 -438
- jaclang/vendor/mypy/test/testfinegrainedcache.py +0 -18
- jaclang/vendor/mypy/test/testformatter.py +0 -85
- jaclang/vendor/mypy/test/testfscache.py +0 -101
- jaclang/vendor/mypy/test/testgraph.py +0 -83
- jaclang/vendor/mypy/test/testinfer.py +0 -373
- jaclang/vendor/mypy/test/testipc.py +0 -119
- jaclang/vendor/mypy/test/testmerge.py +0 -238
- jaclang/vendor/mypy/test/testmodulefinder.py +0 -278
- jaclang/vendor/mypy/test/testmypyc.py +0 -14
- jaclang/vendor/mypy/test/testparse.py +0 -107
- jaclang/vendor/mypy/test/testpep561.py +0 -211
- jaclang/vendor/mypy/test/testpythoneval.py +0 -117
- jaclang/vendor/mypy/test/testreports.py +0 -55
- jaclang/vendor/mypy/test/testsemanal.py +0 -209
- jaclang/vendor/mypy/test/testsolve.py +0 -285
- jaclang/vendor/mypy/test/teststubgen.py +0 -1412
- jaclang/vendor/mypy/test/teststubinfo.py +0 -12
- jaclang/vendor/mypy/test/teststubtest.py +0 -2492
- jaclang/vendor/mypy/test/testsubtypes.py +0 -303
- jaclang/vendor/mypy/test/testtransform.py +0 -64
- jaclang/vendor/mypy/test/testtypegen.py +0 -83
- jaclang/vendor/mypy/test/testtypes.py +0 -1551
- jaclang/vendor/mypy/test/testutil.py +0 -111
- jaclang/vendor/mypy/test/typefixture.py +0 -415
- jaclang/vendor/mypy/test/update_data.py +0 -87
- jaclang/vendor/mypy/test/visitors.py +0 -63
- jaclang/vendor/mypy/traverser.py +0 -961
- jaclang/vendor/mypy/treetransform.py +0 -800
- jaclang/vendor/mypy/tvar_scope.py +0 -169
- jaclang/vendor/mypy/type_visitor.py +0 -564
- jaclang/vendor/mypy/typeanal.py +0 -2596
- jaclang/vendor/mypy/typeops.py +0 -1082
- jaclang/vendor/mypy/types.py +0 -3708
- jaclang/vendor/mypy/types_utils.py +0 -166
- jaclang/vendor/mypy/typeshed/LICENSE +0 -237
- jaclang/vendor/mypy/typeshed/stdlib/VERSIONS +0 -309
- jaclang/vendor/mypy/typeshed/stdlib/__future__.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/__main__.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/_ast.pyi +0 -591
- jaclang/vendor/mypy/typeshed/stdlib/_bisect.pyi +0 -84
- jaclang/vendor/mypy/typeshed/stdlib/_bootlocale.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/_codecs.pyi +0 -133
- jaclang/vendor/mypy/typeshed/stdlib/_collections_abc.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/_compat_pickle.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/_compression.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/_csv.pyi +0 -90
- jaclang/vendor/mypy/typeshed/stdlib/_ctypes.pyi +0 -207
- jaclang/vendor/mypy/typeshed/stdlib/_curses.pyi +0 -566
- jaclang/vendor/mypy/typeshed/stdlib/_decimal.pyi +0 -281
- jaclang/vendor/mypy/typeshed/stdlib/_dummy_thread.pyi +0 -33
- jaclang/vendor/mypy/typeshed/stdlib/_dummy_threading.pyi +0 -164
- jaclang/vendor/mypy/typeshed/stdlib/_heapq.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/_imp.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/_json.pyi +0 -49
- jaclang/vendor/mypy/typeshed/stdlib/_locale.pyi +0 -100
- jaclang/vendor/mypy/typeshed/stdlib/_lsprof.pyi +0 -35
- jaclang/vendor/mypy/typeshed/stdlib/_markupbase.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/_msi.pyi +0 -92
- jaclang/vendor/mypy/typeshed/stdlib/_operator.pyi +0 -147
- jaclang/vendor/mypy/typeshed/stdlib/_osx_support.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/_posixsubprocess.pyi +0 -33
- jaclang/vendor/mypy/typeshed/stdlib/_py_abc.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/_pydecimal.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/_random.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/_sitebuiltins.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/_socket.pyi +0 -803
- jaclang/vendor/mypy/typeshed/stdlib/_stat.pyi +0 -103
- jaclang/vendor/mypy/typeshed/stdlib/_thread.pyi +0 -59
- jaclang/vendor/mypy/typeshed/stdlib/_threading_local.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/_tkinter.pyi +0 -121
- jaclang/vendor/mypy/typeshed/stdlib/_tracemalloc.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/__init__.pyi +0 -347
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/dbapi.pyi +0 -37
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/wsgi.pyi +0 -44
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/xml.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/_warnings.pyi +0 -55
- jaclang/vendor/mypy/typeshed/stdlib/_weakref.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/_weakrefset.pyi +0 -51
- jaclang/vendor/mypy/typeshed/stdlib/_winapi.pyi +0 -255
- jaclang/vendor/mypy/typeshed/stdlib/abc.pyi +0 -51
- jaclang/vendor/mypy/typeshed/stdlib/aifc.pyi +0 -91
- jaclang/vendor/mypy/typeshed/stdlib/antigravity.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/argparse.pyi +0 -595
- jaclang/vendor/mypy/typeshed/stdlib/array.pyi +0 -92
- jaclang/vendor/mypy/typeshed/stdlib/ast.pyi +0 -277
- jaclang/vendor/mypy/typeshed/stdlib/asynchat.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/__init__.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_events.pyi +0 -440
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_futures.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_subprocess.pyi +0 -63
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_tasks.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/constants.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/coroutines.pyi +0 -26
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/events.pyi +0 -580
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/exceptions.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/format_helpers.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/futures.pyi +0 -57
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/locks.pyi +0 -121
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/log.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/mixins.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/proactor_events.pyi +0 -64
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/protocols.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/queues.pyi +0 -47
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/runners.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/selector_events.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/sslproto.pyi +0 -165
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/staggered.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/streams.pyi +0 -153
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/subprocess.pyi +0 -229
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/taskgroups.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/tasks.pyi +0 -497
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/threads.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/timeouts.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/transports.pyi +0 -47
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/trsock.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/unix_events.pyi +0 -196
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_events.pyi +0 -85
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_utils.pyi +0 -49
- jaclang/vendor/mypy/typeshed/stdlib/asyncore.pyi +0 -90
- jaclang/vendor/mypy/typeshed/stdlib/atexit.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/audioop.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/base64.pyi +0 -59
- jaclang/vendor/mypy/typeshed/stdlib/bdb.pyi +0 -102
- jaclang/vendor/mypy/typeshed/stdlib/binascii.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/binhex.pyi +0 -45
- jaclang/vendor/mypy/typeshed/stdlib/bisect.pyi +0 -4
- jaclang/vendor/mypy/typeshed/stdlib/builtins.pyi +0 -1936
- jaclang/vendor/mypy/typeshed/stdlib/bz2.pyi +0 -146
- jaclang/vendor/mypy/typeshed/stdlib/cProfile.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/calendar.pyi +0 -208
- jaclang/vendor/mypy/typeshed/stdlib/cgi.pyi +0 -118
- jaclang/vendor/mypy/typeshed/stdlib/cgitb.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/chunk.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/cmath.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/cmd.pyi +0 -45
- jaclang/vendor/mypy/typeshed/stdlib/code.pyi +0 -33
- jaclang/vendor/mypy/typeshed/stdlib/codecs.pyi +0 -285
- jaclang/vendor/mypy/typeshed/stdlib/codeop.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/collections/__init__.pyi +0 -485
- jaclang/vendor/mypy/typeshed/stdlib/collections/abc.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/colorsys.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/compileall.pyi +0 -111
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/__init__.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/_base.pyi +0 -126
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/process.pyi +0 -233
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/thread.pyi +0 -80
- jaclang/vendor/mypy/typeshed/stdlib/configparser.pyi +0 -313
- jaclang/vendor/mypy/typeshed/stdlib/contextlib.pyi +0 -208
- jaclang/vendor/mypy/typeshed/stdlib/contextvars.pyi +0 -63
- jaclang/vendor/mypy/typeshed/stdlib/copy.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/copyreg.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/crypt.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/csv.pyi +0 -147
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/__init__.pyi +0 -187
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/_endian.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/util.pyi +0 -6
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/wintypes.pyi +0 -298
- jaclang/vendor/mypy/typeshed/stdlib/curses/__init__.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/curses/ascii.pyi +0 -62
- jaclang/vendor/mypy/typeshed/stdlib/curses/has_key.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/curses/panel.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/curses/textpad.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/dataclasses.pyi +0 -315
- jaclang/vendor/mypy/typeshed/stdlib/datetime.pyi +0 -295
- jaclang/vendor/mypy/typeshed/stdlib/dbm/__init__.pyi +0 -95
- jaclang/vendor/mypy/typeshed/stdlib/dbm/dumb.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/dbm/gnu.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/dbm/ndbm.pyi +0 -37
- jaclang/vendor/mypy/typeshed/stdlib/decimal.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/difflib.pyi +0 -140
- jaclang/vendor/mypy/typeshed/stdlib/dis.pyi +0 -144
- jaclang/vendor/mypy/typeshed/stdlib/distutils/__init__.pyi +0 -5
- jaclang/vendor/mypy/typeshed/stdlib/distutils/archive_util.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/distutils/bcppcompiler.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/distutils/ccompiler.pyi +0 -152
- jaclang/vendor/mypy/typeshed/stdlib/distutils/cmd.pyi +0 -66
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_dumb.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_msi.pyi +0 -45
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_rpm.pyi +0 -52
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_wininst.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_clib.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_ext.pyi +0 -50
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_py.pyi +0 -44
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_scripts.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/check.pyi +0 -39
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/clean.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/config.pyi +0 -83
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install.pyi +0 -63
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_data.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_egg_info.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_headers.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_lib.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_scripts.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/register.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/sdist.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/upload.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/distutils/config.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/distutils/core.pyi +0 -57
- jaclang/vendor/mypy/typeshed/stdlib/distutils/cygwinccompiler.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/distutils/debug.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dep_util.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dir_util.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dist.pyi +0 -146
- jaclang/vendor/mypy/typeshed/stdlib/distutils/errors.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/distutils/extension.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/distutils/fancy_getopt.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/distutils/file_util.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/distutils/filelist.pyi +0 -50
- jaclang/vendor/mypy/typeshed/stdlib/distutils/log.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/distutils/msvccompiler.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/distutils/spawn.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/distutils/sysconfig.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/distutils/text_file.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/distutils/unixccompiler.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/distutils/util.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/distutils/version.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/doctest.pyi +0 -248
- jaclang/vendor/mypy/typeshed/stdlib/dummy_threading.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/email/__init__.pyi +0 -29
- jaclang/vendor/mypy/typeshed/stdlib/email/_header_value_parser.pyi +0 -392
- jaclang/vendor/mypy/typeshed/stdlib/email/_policybase.pyi +0 -51
- jaclang/vendor/mypy/typeshed/stdlib/email/base64mime.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/email/charset.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/email/contentmanager.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/email/encoders.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/email/errors.pyi +0 -39
- jaclang/vendor/mypy/typeshed/stdlib/email/feedparser.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/email/generator.pyi +0 -40
- jaclang/vendor/mypy/typeshed/stdlib/email/header.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/email/headerregistry.pyi +0 -178
- jaclang/vendor/mypy/typeshed/stdlib/email/iterators.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/email/message.pyi +0 -165
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/application.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/audio.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/base.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/image.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/message.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/multipart.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/nonmultipart.pyi +0 -5
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/text.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/email/parser.pyi +0 -26
- jaclang/vendor/mypy/typeshed/stdlib/email/policy.pyi +0 -38
- jaclang/vendor/mypy/typeshed/stdlib/email/quoprimime.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/email/utils.pyi +0 -70
- jaclang/vendor/mypy/typeshed/stdlib/encodings/__init__.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8_sig.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/ensurepip/__init__.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/enum.pyi +0 -320
- jaclang/vendor/mypy/typeshed/stdlib/errno.pyi +0 -222
- jaclang/vendor/mypy/typeshed/stdlib/faulthandler.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/fcntl.pyi +0 -127
- jaclang/vendor/mypy/typeshed/stdlib/filecmp.pyi +0 -57
- jaclang/vendor/mypy/typeshed/stdlib/fileinput.pyi +0 -213
- jaclang/vendor/mypy/typeshed/stdlib/fnmatch.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/formatter.pyi +0 -88
- jaclang/vendor/mypy/typeshed/stdlib/fractions.pyi +0 -150
- jaclang/vendor/mypy/typeshed/stdlib/ftplib.pyi +0 -178
- jaclang/vendor/mypy/typeshed/stdlib/functools.pyi +0 -213
- jaclang/vendor/mypy/typeshed/stdlib/gc.pyi +0 -37
- jaclang/vendor/mypy/typeshed/stdlib/genericpath.pyi +0 -52
- jaclang/vendor/mypy/typeshed/stdlib/getopt.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/getpass.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/gettext.pyi +0 -169
- jaclang/vendor/mypy/typeshed/stdlib/glob.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/graphlib.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/grp.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/gzip.pyi +0 -160
- jaclang/vendor/mypy/typeshed/stdlib/hashlib.pyi +0 -167
- jaclang/vendor/mypy/typeshed/stdlib/heapq.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/hmac.pyi +0 -38
- jaclang/vendor/mypy/typeshed/stdlib/html/__init__.pyi +0 -6
- jaclang/vendor/mypy/typeshed/stdlib/html/entities.pyi +0 -6
- jaclang/vendor/mypy/typeshed/stdlib/html/parser.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/http/__init__.pyi +0 -105
- jaclang/vendor/mypy/typeshed/stdlib/http/client.pyi +0 -259
- jaclang/vendor/mypy/typeshed/stdlib/http/cookiejar.pyi +0 -159
- jaclang/vendor/mypy/typeshed/stdlib/http/cookies.pyi +0 -60
- jaclang/vendor/mypy/typeshed/stdlib/http/server.pyi +0 -83
- jaclang/vendor/mypy/typeshed/stdlib/imaplib.pyi +0 -168
- jaclang/vendor/mypy/typeshed/stdlib/imghdr.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/imp.pyi +0 -62
- jaclang/vendor/mypy/typeshed/stdlib/importlib/__init__.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/importlib/_abc.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/importlib/abc.pyi +0 -172
- jaclang/vendor/mypy/typeshed/stdlib/importlib/machinery.pyi +0 -179
- jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/__init__.pyi +0 -285
- jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/_meta.pyi +0 -49
- jaclang/vendor/mypy/typeshed/stdlib/importlib/readers.pyi +0 -68
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/__init__.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/abc.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/readers.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/simple.pyi +0 -56
- jaclang/vendor/mypy/typeshed/stdlib/importlib/simple.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/importlib/util.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/inspect.pyi +0 -632
- jaclang/vendor/mypy/typeshed/stdlib/io.pyi +0 -238
- jaclang/vendor/mypy/typeshed/stdlib/ipaddress.pyi +0 -208
- jaclang/vendor/mypy/typeshed/stdlib/itertools.pyi +0 -273
- jaclang/vendor/mypy/typeshed/stdlib/json/__init__.pyi +0 -61
- jaclang/vendor/mypy/typeshed/stdlib/json/decoder.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/json/encoder.pyi +0 -40
- jaclang/vendor/mypy/typeshed/stdlib/json/tool.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/keyword.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/btm_matcher.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixer_base.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_apply.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_asserts.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_basestring.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_buffer.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_dict.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_except.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exec.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_execfile.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exitfunc.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_filter.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_funcattrs.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_future.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_getcwdu.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_has_key.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_idioms.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_import.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports2.pyi +0 -6
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_input.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_intern.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_isinstance.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools_imports.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_long.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_map.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_metaclass.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_methodattrs.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ne.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_next.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_nonzero.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_numliterals.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_operator.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_paren.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_print.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raise.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raw_input.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reduce.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reload.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_renames.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_repr.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_set_literal.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_standarderror.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_sys_exc.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_throw.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_tuple_params.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_types.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_unicode.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_urllib.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ws_comma.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xrange.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xreadlines.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_zip.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/main.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/__init__.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/driver.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/grammar.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/literals.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/parse.pyi +0 -30
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/pgen.pyi +0 -50
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/token.pyi +0 -67
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/tokenize.pyi +0 -96
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pygram.pyi +0 -114
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pytree.pyi +0 -117
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/refactor.pyi +0 -82
- jaclang/vendor/mypy/typeshed/stdlib/linecache.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/locale.pyi +0 -152
- jaclang/vendor/mypy/typeshed/stdlib/logging/__init__.pyi +0 -658
- jaclang/vendor/mypy/typeshed/stdlib/logging/config.pyi +0 -134
- jaclang/vendor/mypy/typeshed/stdlib/logging/handlers.pyi +0 -275
- jaclang/vendor/mypy/typeshed/stdlib/lzma.pyi +0 -197
- jaclang/vendor/mypy/typeshed/stdlib/mailbox.pyi +0 -256
- jaclang/vendor/mypy/typeshed/stdlib/mailcap.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/marshal.pyi +0 -33
- jaclang/vendor/mypy/typeshed/stdlib/math.pyi +0 -125
- jaclang/vendor/mypy/typeshed/stdlib/mimetypes.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/mmap.pyi +0 -113
- jaclang/vendor/mypy/typeshed/stdlib/modulefinder.pyi +0 -66
- jaclang/vendor/mypy/typeshed/stdlib/msilib/__init__.pyi +0 -177
- jaclang/vendor/mypy/typeshed/stdlib/msilib/schema.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/msilib/sequence.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/msilib/text.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/msvcrt.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/__init__.pyi +0 -90
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/connection.pyi +0 -75
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/context.pyi +0 -189
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/__init__.pyi +0 -77
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/connection.pyi +0 -39
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/forkserver.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/heap.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/managers.pyi +0 -212
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/pool.pyi +0 -103
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_fork.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_forkserver.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_posix.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_win32.pyi +0 -30
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/process.pyi +0 -39
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/queues.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/reduction.pyi +0 -90
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_sharer.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_tracker.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/shared_memory.pyi +0 -40
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/sharedctypes.pyi +0 -107
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/spawn.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/synchronize.pyi +0 -54
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/util.pyi +0 -98
- jaclang/vendor/mypy/typeshed/stdlib/netrc.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/nis.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/nntplib.pyi +0 -125
- jaclang/vendor/mypy/typeshed/stdlib/nt.pyi +0 -111
- jaclang/vendor/mypy/typeshed/stdlib/ntpath.pyi +0 -119
- jaclang/vendor/mypy/typeshed/stdlib/nturl2path.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/numbers.pyi +0 -209
- jaclang/vendor/mypy/typeshed/stdlib/opcode.pyi +0 -59
- jaclang/vendor/mypy/typeshed/stdlib/operator.pyi +0 -110
- jaclang/vendor/mypy/typeshed/stdlib/optparse.pyi +0 -255
- jaclang/vendor/mypy/typeshed/stdlib/os/__init__.pyi +0 -1157
- jaclang/vendor/mypy/typeshed/stdlib/os/path.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/ossaudiodev.pyi +0 -131
- jaclang/vendor/mypy/typeshed/stdlib/parser.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/pathlib.pyi +0 -232
- jaclang/vendor/mypy/typeshed/stdlib/pdb.pyi +0 -181
- jaclang/vendor/mypy/typeshed/stdlib/pickle.pyi +0 -271
- jaclang/vendor/mypy/typeshed/stdlib/pickletools.pyi +0 -167
- jaclang/vendor/mypy/typeshed/stdlib/pipes.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/pkgutil.pyi +0 -53
- jaclang/vendor/mypy/typeshed/stdlib/platform.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/plistlib.pyi +0 -113
- jaclang/vendor/mypy/typeshed/stdlib/poplib.pyi +0 -71
- jaclang/vendor/mypy/typeshed/stdlib/posix.pyi +0 -361
- jaclang/vendor/mypy/typeshed/stdlib/posixpath.pyi +0 -161
- jaclang/vendor/mypy/typeshed/stdlib/pprint.pyi +0 -112
- jaclang/vendor/mypy/typeshed/stdlib/profile.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/pstats.pyi +0 -80
- jaclang/vendor/mypy/typeshed/stdlib/pty.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/pwd.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/py_compile.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/pyclbr.pyi +0 -74
- jaclang/vendor/mypy/typeshed/stdlib/pydoc.pyi +0 -261
- jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/topics.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/__init__.pyi +0 -85
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/errors.pyi +0 -49
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/model.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/queue.pyi +0 -66
- jaclang/vendor/mypy/typeshed/stdlib/quopri.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/random.pyi +0 -138
- jaclang/vendor/mypy/typeshed/stdlib/re.pyi +0 -290
- jaclang/vendor/mypy/typeshed/stdlib/readline.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/reprlib.pyi +0 -65
- jaclang/vendor/mypy/typeshed/stdlib/resource.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/rlcompleter.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/runpy.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/sched.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/secrets.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/select.pyi +0 -155
- jaclang/vendor/mypy/typeshed/stdlib/selectors.pyi +0 -67
- jaclang/vendor/mypy/typeshed/stdlib/shelve.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/shlex.pyi +0 -63
- jaclang/vendor/mypy/typeshed/stdlib/shutil.pyi +0 -185
- jaclang/vendor/mypy/typeshed/stdlib/signal.pyi +0 -188
- jaclang/vendor/mypy/typeshed/stdlib/site.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/smtpd.pyi +0 -91
- jaclang/vendor/mypy/typeshed/stdlib/smtplib.pyi +0 -204
- jaclang/vendor/mypy/typeshed/stdlib/sndhdr.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/socket.pyi +0 -825
- jaclang/vendor/mypy/typeshed/stdlib/socketserver.pyi +0 -168
- jaclang/vendor/mypy/typeshed/stdlib/spwd.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/sqlite3/__init__.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/sqlite3/dbapi2.pyi +0 -551
- jaclang/vendor/mypy/typeshed/stdlib/sre_compile.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/sre_constants.pyi +0 -130
- jaclang/vendor/mypy/typeshed/stdlib/sre_parse.pyi +0 -104
- jaclang/vendor/mypy/typeshed/stdlib/ssl.pyi +0 -537
- jaclang/vendor/mypy/typeshed/stdlib/stat.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/statistics.pyi +0 -132
- jaclang/vendor/mypy/typeshed/stdlib/string.pyi +0 -83
- jaclang/vendor/mypy/typeshed/stdlib/stringprep.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/struct.pyi +0 -26
- jaclang/vendor/mypy/typeshed/stdlib/subprocess.pyi +0 -2615
- jaclang/vendor/mypy/typeshed/stdlib/sunau.pyi +0 -86
- jaclang/vendor/mypy/typeshed/stdlib/symbol.pyi +0 -93
- jaclang/vendor/mypy/typeshed/stdlib/symtable.pyi +0 -58
- jaclang/vendor/mypy/typeshed/stdlib/sys/__init__.pyi +0 -373
- jaclang/vendor/mypy/typeshed/stdlib/sys/_monitoring.pyi +0 -52
- jaclang/vendor/mypy/typeshed/stdlib/sysconfig.pyi +0 -48
- jaclang/vendor/mypy/typeshed/stdlib/syslog.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/tabnanny.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/tarfile.pyi +0 -441
- jaclang/vendor/mypy/typeshed/stdlib/telnetlib.pyi +0 -122
- jaclang/vendor/mypy/typeshed/stdlib/tempfile.pyi +0 -477
- jaclang/vendor/mypy/typeshed/stdlib/termios.pyi +0 -267
- jaclang/vendor/mypy/typeshed/stdlib/textwrap.pyi +0 -103
- jaclang/vendor/mypy/typeshed/stdlib/this.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/threading.pyi +0 -187
- jaclang/vendor/mypy/typeshed/stdlib/time.pyi +0 -108
- jaclang/vendor/mypy/typeshed/stdlib/timeit.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/__init__.pyi +0 -3654
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/colorchooser.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/commondialog.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/constants.pyi +0 -80
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/dialog.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/dnd.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/filedialog.pyi +0 -151
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/font.pyi +0 -116
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/messagebox.pyi +0 -44
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/scrolledtext.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/simpledialog.pyi +0 -54
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/tix.pyi +0 -299
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/ttk.pyi +0 -1204
- jaclang/vendor/mypy/typeshed/stdlib/token.pyi +0 -159
- jaclang/vendor/mypy/typeshed/stdlib/tokenize.pyi +0 -177
- jaclang/vendor/mypy/typeshed/stdlib/tomllib.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/trace.pyi +0 -79
- jaclang/vendor/mypy/typeshed/stdlib/traceback.pyi +0 -262
- jaclang/vendor/mypy/typeshed/stdlib/tracemalloc.pyi +0 -124
- jaclang/vendor/mypy/typeshed/stdlib/tty.pyi +0 -30
- jaclang/vendor/mypy/typeshed/stdlib/turtle.pyi +0 -713
- jaclang/vendor/mypy/typeshed/stdlib/types.pyi +0 -614
- jaclang/vendor/mypy/typeshed/stdlib/typing.pyi +0 -976
- jaclang/vendor/mypy/typeshed/stdlib/typing_extensions.pyi +0 -509
- jaclang/vendor/mypy/typeshed/stdlib/unicodedata.pyi +0 -73
- jaclang/vendor/mypy/typeshed/stdlib/unittest/__init__.pyi +0 -67
- jaclang/vendor/mypy/typeshed/stdlib/unittest/_log.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/unittest/async_case.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/unittest/case.pyi +0 -342
- jaclang/vendor/mypy/typeshed/stdlib/unittest/loader.pyi +0 -51
- jaclang/vendor/mypy/typeshed/stdlib/unittest/main.pyi +0 -69
- jaclang/vendor/mypy/typeshed/stdlib/unittest/mock.pyi +0 -430
- jaclang/vendor/mypy/typeshed/stdlib/unittest/result.pyi +0 -47
- jaclang/vendor/mypy/typeshed/stdlib/unittest/runner.pyi +0 -72
- jaclang/vendor/mypy/typeshed/stdlib/unittest/signals.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/unittest/suite.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/unittest/util.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/urllib/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/urllib/error.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/urllib/parse.pyi +0 -210
- jaclang/vendor/mypy/typeshed/stdlib/urllib/request.pyi +0 -400
- jaclang/vendor/mypy/typeshed/stdlib/urllib/response.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/urllib/robotparser.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/uu.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/uuid.pyi +0 -100
- jaclang/vendor/mypy/typeshed/stdlib/warnings.pyi +0 -112
- jaclang/vendor/mypy/typeshed/stdlib/wave.pyi +0 -85
- jaclang/vendor/mypy/typeshed/stdlib/weakref.pyi +0 -149
- jaclang/vendor/mypy/typeshed/stdlib/webbrowser.pyi +0 -74
- jaclang/vendor/mypy/typeshed/stdlib/winreg.pyi +0 -132
- jaclang/vendor/mypy/typeshed/stdlib/winsound.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/handlers.pyi +0 -91
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/headers.pyi +0 -26
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/simple_server.pyi +0 -37
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/types.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/util.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/validate.pyi +0 -50
- jaclang/vendor/mypy/typeshed/stdlib/xdrlib.pyi +0 -57
- jaclang/vendor/mypy/typeshed/stdlib/xml/__init__.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/NodeFilter.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/__init__.pyi +0 -69
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/domreg.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/expatbuilder.pyi +0 -100
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minicompat.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minidom.pyi +0 -404
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/pulldom.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/xmlbuilder.pyi +0 -108
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementInclude.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementPath.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementTree.pyi +0 -327
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/cElementTree.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/__init__.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/__init__.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/errors.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/model.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/__init__.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/_exceptions.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/handler.pyi +0 -55
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/saxutils.pyi +0 -60
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/xmlreader.pyi +0 -87
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/client.pyi +0 -296
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/server.pyi +0 -143
- jaclang/vendor/mypy/typeshed/stdlib/xxlimited.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/zipapp.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/zipfile/__init__.pyi +0 -306
- jaclang/vendor/mypy/typeshed/stdlib/zipfile/_path.pyi +0 -95
- jaclang/vendor/mypy/typeshed/stdlib/zipimport.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/zlib.pyi +0 -56
- jaclang/vendor/mypy/typeshed/stdlib/zoneinfo/__init__.pyi +0 -38
- jaclang/vendor/mypy/typeshed/stubs/mypy-extensions/mypy_extensions.pyi +0 -218
- jaclang/vendor/mypy/typestate.py +0 -323
- jaclang/vendor/mypy/typetraverser.py +0 -148
- jaclang/vendor/mypy/typevars.py +0 -93
- jaclang/vendor/mypy/typevartuples.py +0 -32
- jaclang/vendor/mypy/util.py +0 -869
- jaclang/vendor/mypy/version.py +0 -1
- jaclang/vendor/mypy/visitor.py +0 -621
- jaclang/vendor/mypy/xml/mypy-html.css +0 -104
- jaclang/vendor/mypy/xml/mypy-html.xslt +0 -81
- jaclang/vendor/mypy/xml/mypy-txt.xslt +0 -100
- jaclang/vendor/mypy/xml/mypy.xsd +0 -50
- jaclang/vendor/mypy-1.10.0.dist-info/LICENSE +0 -229
- jaclang/vendor/mypy-1.10.0.dist-info/METADATA +0 -48
- jaclang/vendor/mypy-1.10.0.dist-info/RECORD +0 -1241
- jaclang/vendor/mypy-1.10.0.dist-info/WHEEL +0 -6
- jaclang/vendor/mypy-1.10.0.dist-info/entry_points.txt +0 -6
- jaclang/vendor/mypy-1.10.0.dist-info/top_level.txt +0 -3
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/LICENSE +0 -27
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/METADATA +0 -29
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/RECORD +0 -6
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/top_level.txt +0 -1
- jaclang/vendor/mypy_extensions.py +0 -213
- jaclang/vendor/mypyc/README.md +0 -133
- jaclang/vendor/mypyc/__init__.py +0 -0
- jaclang/vendor/mypyc/__main__.py +0 -57
- jaclang/vendor/mypyc/analysis/__init__.py +0 -0
- jaclang/vendor/mypyc/analysis/attrdefined.py +0 -436
- jaclang/vendor/mypyc/analysis/blockfreq.py +0 -32
- jaclang/vendor/mypyc/analysis/dataflow.py +0 -628
- jaclang/vendor/mypyc/analysis/ircheck.py +0 -433
- jaclang/vendor/mypyc/analysis/selfleaks.py +0 -211
- jaclang/vendor/mypyc/build.py +0 -616
- jaclang/vendor/mypyc/codegen/__init__.py +0 -0
- jaclang/vendor/mypyc/codegen/cstring.py +0 -54
- jaclang/vendor/mypyc/codegen/emit.py +0 -1193
- jaclang/vendor/mypyc/codegen/emitclass.py +0 -1060
- jaclang/vendor/mypyc/codegen/emitfunc.py +0 -852
- jaclang/vendor/mypyc/codegen/emitmodule.py +0 -1136
- jaclang/vendor/mypyc/codegen/emitwrapper.py +0 -979
- jaclang/vendor/mypyc/codegen/literals.py +0 -302
- jaclang/vendor/mypyc/common.py +0 -136
- jaclang/vendor/mypyc/crash.py +0 -31
- jaclang/vendor/mypyc/doc/Makefile +0 -20
- jaclang/vendor/mypyc/doc/bool_operations.rst +0 -27
- jaclang/vendor/mypyc/doc/compilation_units.rst +0 -20
- jaclang/vendor/mypyc/doc/conf.py +0 -59
- jaclang/vendor/mypyc/doc/cpython-timings.md +0 -25
- jaclang/vendor/mypyc/doc/dev-intro.md +0 -548
- jaclang/vendor/mypyc/doc/dict_operations.rst +0 -59
- jaclang/vendor/mypyc/doc/differences_from_python.rst +0 -332
- jaclang/vendor/mypyc/doc/float_operations.rst +0 -50
- jaclang/vendor/mypyc/doc/future.md +0 -42
- jaclang/vendor/mypyc/doc/getting_started.rst +0 -240
- jaclang/vendor/mypyc/doc/index.rst +0 -61
- jaclang/vendor/mypyc/doc/int_operations.rst +0 -162
- jaclang/vendor/mypyc/doc/introduction.rst +0 -150
- jaclang/vendor/mypyc/doc/list_operations.rst +0 -65
- jaclang/vendor/mypyc/doc/make.bat +0 -35
- jaclang/vendor/mypyc/doc/native_classes.rst +0 -206
- jaclang/vendor/mypyc/doc/native_operations.rst +0 -55
- jaclang/vendor/mypyc/doc/performance_tips_and_tricks.rst +0 -244
- jaclang/vendor/mypyc/doc/set_operations.rst +0 -47
- jaclang/vendor/mypyc/doc/str_operations.rst +0 -35
- jaclang/vendor/mypyc/doc/tuple_operations.rst +0 -33
- jaclang/vendor/mypyc/doc/using_type_annotations.rst +0 -398
- jaclang/vendor/mypyc/errors.py +0 -29
- jaclang/vendor/mypyc/external/googletest/LICENSE +0 -28
- jaclang/vendor/mypyc/external/googletest/README.md +0 -280
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-death-test.h +0 -294
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-message.h +0 -250
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h +0 -1444
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h.pump +0 -510
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-printers.h +0 -993
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-spi.h +0 -232
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-test-part.h +0 -179
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-typed-test.h +0 -263
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest.h +0 -2236
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_pred_impl.h +0 -358
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_prod.h +0 -58
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-port.h +0 -69
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-printers.h +0 -42
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest.h +0 -41
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-death-test-internal.h +0 -319
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-filepath.h +0 -206
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-internal.h +0 -1238
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-linked_ptr.h +0 -243
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h +0 -5146
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +0 -286
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util.h +0 -731
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port-arch.h +0 -93
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port.h +0 -2560
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-string.h +0 -167
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h +0 -1020
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h.pump +0 -347
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h +0 -3331
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h.pump +0 -297
- jaclang/vendor/mypyc/external/googletest/make/Makefile +0 -61
- jaclang/vendor/mypyc/external/googletest/src/gtest-all.cc +0 -48
- jaclang/vendor/mypyc/external/googletest/src/gtest-death-test.cc +0 -1342
- jaclang/vendor/mypyc/external/googletest/src/gtest-filepath.cc +0 -387
- jaclang/vendor/mypyc/external/googletest/src/gtest-internal-inl.h +0 -1183
- jaclang/vendor/mypyc/external/googletest/src/gtest-port.cc +0 -1259
- jaclang/vendor/mypyc/external/googletest/src/gtest-printers.cc +0 -373
- jaclang/vendor/mypyc/external/googletest/src/gtest-test-part.cc +0 -110
- jaclang/vendor/mypyc/external/googletest/src/gtest-typed-test.cc +0 -118
- jaclang/vendor/mypyc/external/googletest/src/gtest.cc +0 -5388
- jaclang/vendor/mypyc/external/googletest/src/gtest_main.cc +0 -38
- jaclang/vendor/mypyc/ir/__init__.py +0 -0
- jaclang/vendor/mypyc/ir/class_ir.py +0 -499
- jaclang/vendor/mypyc/ir/func_ir.py +0 -370
- jaclang/vendor/mypyc/ir/module_ir.py +0 -88
- jaclang/vendor/mypyc/ir/ops.py +0 -1727
- jaclang/vendor/mypyc/ir/pprint.py +0 -516
- jaclang/vendor/mypyc/ir/rtypes.py +0 -1038
- jaclang/vendor/mypyc/irbuild/__init__.py +0 -0
- jaclang/vendor/mypyc/irbuild/ast_helpers.py +0 -123
- jaclang/vendor/mypyc/irbuild/builder.py +0 -1394
- jaclang/vendor/mypyc/irbuild/callable_class.py +0 -173
- jaclang/vendor/mypyc/irbuild/classdef.py +0 -850
- jaclang/vendor/mypyc/irbuild/constant_fold.py +0 -95
- jaclang/vendor/mypyc/irbuild/context.py +0 -186
- jaclang/vendor/mypyc/irbuild/env_class.py +0 -223
- jaclang/vendor/mypyc/irbuild/expression.py +0 -1070
- jaclang/vendor/mypyc/irbuild/for_helpers.py +0 -1075
- jaclang/vendor/mypyc/irbuild/format_str_tokenizer.py +0 -250
- jaclang/vendor/mypyc/irbuild/function.py +0 -1088
- jaclang/vendor/mypyc/irbuild/generator.py +0 -346
- jaclang/vendor/mypyc/irbuild/ll_builder.py +0 -2389
- jaclang/vendor/mypyc/irbuild/main.py +0 -153
- jaclang/vendor/mypyc/irbuild/mapper.py +0 -221
- jaclang/vendor/mypyc/irbuild/match.py +0 -355
- jaclang/vendor/mypyc/irbuild/nonlocalcontrol.py +0 -197
- jaclang/vendor/mypyc/irbuild/prebuildvisitor.py +0 -203
- jaclang/vendor/mypyc/irbuild/prepare.py +0 -609
- jaclang/vendor/mypyc/irbuild/specialize.py +0 -822
- jaclang/vendor/mypyc/irbuild/statement.py +0 -1017
- jaclang/vendor/mypyc/irbuild/targets.py +0 -57
- jaclang/vendor/mypyc/irbuild/util.py +0 -189
- jaclang/vendor/mypyc/irbuild/visitor.py +0 -401
- jaclang/vendor/mypyc/irbuild/vtable.py +0 -82
- jaclang/vendor/mypyc/lib-rt/CPy.h +0 -638
- jaclang/vendor/mypyc/lib-rt/bytes_ops.c +0 -143
- jaclang/vendor/mypyc/lib-rt/dict_ops.c +0 -446
- jaclang/vendor/mypyc/lib-rt/exc_ops.c +0 -259
- jaclang/vendor/mypyc/lib-rt/float_ops.c +0 -192
- jaclang/vendor/mypyc/lib-rt/generic_ops.c +0 -64
- jaclang/vendor/mypyc/lib-rt/getargs.c +0 -450
- jaclang/vendor/mypyc/lib-rt/getargsfast.c +0 -569
- jaclang/vendor/mypyc/lib-rt/init.c +0 -13
- jaclang/vendor/mypyc/lib-rt/int_ops.c +0 -803
- jaclang/vendor/mypyc/lib-rt/list_ops.c +0 -335
- jaclang/vendor/mypyc/lib-rt/misc_ops.c +0 -942
- jaclang/vendor/mypyc/lib-rt/module_shim.tmpl +0 -18
- jaclang/vendor/mypyc/lib-rt/mypyc_util.h +0 -118
- jaclang/vendor/mypyc/lib-rt/pythoncapi_compat.h +0 -497
- jaclang/vendor/mypyc/lib-rt/pythonsupport.h +0 -533
- jaclang/vendor/mypyc/lib-rt/set_ops.c +0 -17
- jaclang/vendor/mypyc/lib-rt/setup.py +0 -70
- jaclang/vendor/mypyc/lib-rt/str_ops.c +0 -241
- jaclang/vendor/mypyc/lib-rt/test_capi.cc +0 -585
- jaclang/vendor/mypyc/lib-rt/tuple_ops.c +0 -61
- jaclang/vendor/mypyc/lower/__init__.py +0 -0
- jaclang/vendor/mypyc/lower/int_ops.py +0 -113
- jaclang/vendor/mypyc/lower/list_ops.py +0 -45
- jaclang/vendor/mypyc/lower/misc_ops.py +0 -12
- jaclang/vendor/mypyc/lower/registry.py +0 -26
- jaclang/vendor/mypyc/namegen.py +0 -115
- jaclang/vendor/mypyc/options.py +0 -32
- jaclang/vendor/mypyc/primitives/__init__.py +0 -0
- jaclang/vendor/mypyc/primitives/bytes_ops.py +0 -101
- jaclang/vendor/mypyc/primitives/dict_ops.py +0 -325
- jaclang/vendor/mypyc/primitives/exc_ops.py +0 -101
- jaclang/vendor/mypyc/primitives/float_ops.py +0 -168
- jaclang/vendor/mypyc/primitives/generic_ops.py +0 -384
- jaclang/vendor/mypyc/primitives/int_ops.py +0 -303
- jaclang/vendor/mypyc/primitives/list_ops.py +0 -310
- jaclang/vendor/mypyc/primitives/misc_ops.py +0 -267
- jaclang/vendor/mypyc/primitives/registry.py +0 -360
- jaclang/vendor/mypyc/primitives/set_ops.py +0 -121
- jaclang/vendor/mypyc/primitives/str_ops.py +0 -229
- jaclang/vendor/mypyc/primitives/tuple_ops.py +0 -83
- jaclang/vendor/mypyc/rt_subtype.py +0 -77
- jaclang/vendor/mypyc/sametype.py +0 -83
- jaclang/vendor/mypyc/subtype.py +0 -88
- jaclang/vendor/mypyc/test/__init__.py +0 -0
- jaclang/vendor/mypyc/test/config.py +0 -13
- jaclang/vendor/mypyc/test/test_alwaysdefined.py +0 -46
- jaclang/vendor/mypyc/test/test_analysis.py +0 -77
- jaclang/vendor/mypyc/test/test_cheader.py +0 -53
- jaclang/vendor/mypyc/test/test_commandline.py +0 -82
- jaclang/vendor/mypyc/test/test_emit.py +0 -69
- jaclang/vendor/mypyc/test/test_emitclass.py +0 -35
- jaclang/vendor/mypyc/test/test_emitfunc.py +0 -928
- jaclang/vendor/mypyc/test/test_emitwrapper.py +0 -60
- jaclang/vendor/mypyc/test/test_exceptions.py +0 -56
- jaclang/vendor/mypyc/test/test_external.py +0 -49
- jaclang/vendor/mypyc/test/test_irbuild.py +0 -87
- jaclang/vendor/mypyc/test/test_ircheck.py +0 -199
- jaclang/vendor/mypyc/test/test_literals.py +0 -90
- jaclang/vendor/mypyc/test/test_lowering.py +0 -56
- jaclang/vendor/mypyc/test/test_namegen.py +0 -48
- jaclang/vendor/mypyc/test/test_optimizations.py +0 -68
- jaclang/vendor/mypyc/test/test_pprint.py +0 -42
- jaclang/vendor/mypyc/test/test_rarray.py +0 -48
- jaclang/vendor/mypyc/test/test_refcount.py +0 -59
- jaclang/vendor/mypyc/test/test_run.py +0 -426
- jaclang/vendor/mypyc/test/test_serialization.py +0 -108
- jaclang/vendor/mypyc/test/test_struct.py +0 -112
- jaclang/vendor/mypyc/test/test_tuplename.py +0 -33
- jaclang/vendor/mypyc/test/test_typeops.py +0 -97
- jaclang/vendor/mypyc/test/testutil.py +0 -283
- jaclang/vendor/mypyc/test-data/alwaysdefined.test +0 -732
- jaclang/vendor/mypyc/test-data/analysis.test +0 -470
- jaclang/vendor/mypyc/test-data/commandline.test +0 -245
- jaclang/vendor/mypyc/test-data/driver/driver.py +0 -48
- jaclang/vendor/mypyc/test-data/exceptions-freq.test +0 -125
- jaclang/vendor/mypyc/test-data/exceptions.test +0 -699
- jaclang/vendor/mypyc/test-data/fixtures/ir.py +0 -373
- jaclang/vendor/mypyc/test-data/fixtures/testutil.py +0 -103
- jaclang/vendor/mypyc/test-data/fixtures/typing-full.pyi +0 -169
- jaclang/vendor/mypyc/test-data/irbuild-any.test +0 -236
- jaclang/vendor/mypyc/test-data/irbuild-basic.test +0 -3399
- jaclang/vendor/mypyc/test-data/irbuild-bool.test +0 -424
- jaclang/vendor/mypyc/test-data/irbuild-bytes.test +0 -181
- jaclang/vendor/mypyc/test-data/irbuild-classes.test +0 -1302
- jaclang/vendor/mypyc/test-data/irbuild-constant-fold.test +0 -480
- jaclang/vendor/mypyc/test-data/irbuild-dict.test +0 -584
- jaclang/vendor/mypyc/test-data/irbuild-dunders.test +0 -215
- jaclang/vendor/mypyc/test-data/irbuild-float.test +0 -497
- jaclang/vendor/mypyc/test-data/irbuild-generics.test +0 -150
- jaclang/vendor/mypyc/test-data/irbuild-glue-methods.test +0 -437
- jaclang/vendor/mypyc/test-data/irbuild-i16.test +0 -526
- jaclang/vendor/mypyc/test-data/irbuild-i32.test +0 -598
- jaclang/vendor/mypyc/test-data/irbuild-i64.test +0 -2144
- jaclang/vendor/mypyc/test-data/irbuild-int.test +0 -194
- jaclang/vendor/mypyc/test-data/irbuild-isinstance.test +0 -109
- jaclang/vendor/mypyc/test-data/irbuild-lists.test +0 -513
- jaclang/vendor/mypyc/test-data/irbuild-match.test +0 -1717
- jaclang/vendor/mypyc/test-data/irbuild-math.test +0 -64
- jaclang/vendor/mypyc/test-data/irbuild-nested.test +0 -807
- jaclang/vendor/mypyc/test-data/irbuild-optional.test +0 -536
- jaclang/vendor/mypyc/test-data/irbuild-set.test +0 -806
- jaclang/vendor/mypyc/test-data/irbuild-singledispatch.test +0 -257
- jaclang/vendor/mypyc/test-data/irbuild-statements.test +0 -1060
- jaclang/vendor/mypyc/test-data/irbuild-str.test +0 -312
- jaclang/vendor/mypyc/test-data/irbuild-strip-asserts.test +0 -12
- jaclang/vendor/mypyc/test-data/irbuild-try.test +0 -523
- jaclang/vendor/mypyc/test-data/irbuild-tuple.test +0 -386
- jaclang/vendor/mypyc/test-data/irbuild-u8.test +0 -543
- jaclang/vendor/mypyc/test-data/irbuild-unreachable.test +0 -241
- jaclang/vendor/mypyc/test-data/irbuild-vectorcall.test +0 -153
- jaclang/vendor/mypyc/test-data/lowering-int.test +0 -377
- jaclang/vendor/mypyc/test-data/lowering-list.test +0 -33
- jaclang/vendor/mypyc/test-data/opt-copy-propagation.test +0 -400
- jaclang/vendor/mypyc/test-data/opt-flag-elimination.test +0 -296
- jaclang/vendor/mypyc/test-data/refcount.test +0 -1482
- jaclang/vendor/mypyc/test-data/run-async.test +0 -173
- jaclang/vendor/mypyc/test-data/run-attrs.test +0 -318
- jaclang/vendor/mypyc/test-data/run-bench.test +0 -196
- jaclang/vendor/mypyc/test-data/run-bools.test +0 -229
- jaclang/vendor/mypyc/test-data/run-bytes.test +0 -302
- jaclang/vendor/mypyc/test-data/run-classes.test +0 -2505
- jaclang/vendor/mypyc/test-data/run-dicts.test +0 -334
- jaclang/vendor/mypyc/test-data/run-dunders.test +0 -945
- jaclang/vendor/mypyc/test-data/run-exceptions.test +0 -448
- jaclang/vendor/mypyc/test-data/run-floats.test +0 -516
- jaclang/vendor/mypyc/test-data/run-functions.test +0 -1310
- jaclang/vendor/mypyc/test-data/run-generators.test +0 -682
- jaclang/vendor/mypyc/test-data/run-i16.test +0 -338
- jaclang/vendor/mypyc/test-data/run-i32.test +0 -336
- jaclang/vendor/mypyc/test-data/run-i64.test +0 -1519
- jaclang/vendor/mypyc/test-data/run-imports.test +0 -265
- jaclang/vendor/mypyc/test-data/run-integers.test +0 -540
- jaclang/vendor/mypyc/test-data/run-lists.test +0 -411
- jaclang/vendor/mypyc/test-data/run-loops.test +0 -485
- jaclang/vendor/mypyc/test-data/run-match.test +0 -283
- jaclang/vendor/mypyc/test-data/run-math.test +0 -106
- jaclang/vendor/mypyc/test-data/run-misc.test +0 -1170
- jaclang/vendor/mypyc/test-data/run-multimodule.test +0 -887
- jaclang/vendor/mypyc/test-data/run-mypy-sim.test +0 -138
- jaclang/vendor/mypyc/test-data/run-primitives.test +0 -375
- jaclang/vendor/mypyc/test-data/run-python37.test +0 -159
- jaclang/vendor/mypyc/test-data/run-python38.test +0 -88
- jaclang/vendor/mypyc/test-data/run-sets.test +0 -150
- jaclang/vendor/mypyc/test-data/run-singledispatch.test +0 -698
- jaclang/vendor/mypyc/test-data/run-strings.test +0 -641
- jaclang/vendor/mypyc/test-data/run-traits.test +0 -411
- jaclang/vendor/mypyc/test-data/run-tuples.test +0 -258
- jaclang/vendor/mypyc/test-data/run-u8.test +0 -303
- jaclang/vendor/mypyc/transform/__init__.py +0 -0
- jaclang/vendor/mypyc/transform/copy_propagation.py +0 -94
- jaclang/vendor/mypyc/transform/exceptions.py +0 -182
- jaclang/vendor/mypyc/transform/flag_elimination.py +0 -108
- jaclang/vendor/mypyc/transform/ir_transform.py +0 -368
- jaclang/vendor/mypyc/transform/lower.py +0 -33
- jaclang/vendor/mypyc/transform/refcount.py +0 -294
- jaclang/vendor/mypyc/transform/uninit.py +0 -190
- jaclang/vendor/typing_extensions-4.12.2.dist-info/LICENSE +0 -279
- jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA +0 -67
- jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD +0 -5
- jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL +0 -4
- jaclang/vendor/typing_extensions.py +0 -3641
- jaclang-0.7.33.dist-info/RECORD +0 -1562
- /jaclang/{vendor/mypy/dmypy → compiler/larkparse}/__init__.py +0 -0
- /jaclang/{tests → compiler/passes/main/tests}/fixtures/access_checker.jac +0 -0
- /jaclang/{vendor/mypy/plugins/__init__.py → langserve/tests/fixtures/deep_check_crash.jac} +0 -0
- /jaclang/{vendor/mypy/server/__init__.py → langserve/tests/server_test/code_test.py} +0 -0
- /jaclang/{plugin → runtimelib}/tests/__init__.py +0 -0
- /jaclang/{plugin → runtimelib}/tests/fixtures/traversing_save.jac +0 -0
- /jaclang/{vendor/mypy/test → tests}/__init__.py +0 -0
- /jaclang/{vendor/mypy/test/meta → tests/fixtures}/__init__.py +0 -0
- /jaclang/tests/fixtures/{architype_def_bug.jac → archetype_def_bug.jac} +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/concurrent/__init__.pyi → attrs-25.3.0.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/licenses/LICENSE +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/distutils/command/__init__.pyi → cattrs-24.1.3.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/{cattrs-23.2.3.dist-info → cattrs-24.1.3.dist-info}/licenses/LICENSE +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/distutils/command/bdist_packager.pyi → lark-1.2.2.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/entry_points.txt +0 -0
- /jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/top_level.txt +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/email/mime/__init__.pyi → lsprotocol-2023.0.1.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/lsprotocol-2023.0.1.dist-info/{LICENSE → licenses/LICENSE} +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/lib2to3/__init__.pyi → pluggy-1.5.0.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/pluggy-1.5.0.dist-info/{LICENSE → licenses/LICENSE} +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/lib2to3/fixes/__init__.pyi → pygls-1.3.1.dist-info/REQUESTED} +0 -0
- {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.
|
|
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.
|
|
34
|
-
from jaclang.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
|
42
|
+
class UniNode:
|
|
42
43
|
"""Abstract syntax tree node for Jac."""
|
|
43
44
|
|
|
44
|
-
def __init__(self, kid: Sequence[
|
|
45
|
+
def __init__(self, kid: Sequence[UniNode]) -> None:
|
|
45
46
|
"""Initialize ast."""
|
|
46
|
-
self.parent: Optional[
|
|
47
|
-
self.kid: list[
|
|
48
|
-
self.
|
|
49
|
-
self.
|
|
50
|
-
self._in_mod_nodes: list[
|
|
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) ->
|
|
71
|
+
def sym_tab(self) -> UniScopeNode:
|
|
57
72
|
"""Get symbol table."""
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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,
|
|
74
|
-
|
|
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,
|
|
85
|
-
|
|
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[
|
|
96
|
-
) ->
|
|
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[
|
|
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:
|
|
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
|
|
172
|
+
from jaclang.compiler.passes import UniPass
|
|
156
173
|
|
|
157
|
-
return
|
|
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
|
|
178
|
+
from jaclang.compiler.passes import UniPass
|
|
162
179
|
|
|
163
|
-
return
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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(
|
|
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=
|
|
609
|
+
T = TypeVar("T", bound=UniNode)
|
|
298
610
|
|
|
299
611
|
|
|
300
|
-
class AstDocNode(
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
349
|
-
"""
|
|
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
|
|
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[
|
|
714
|
+
self._type_sym_tab: Optional[UniScopeNode] = None
|
|
356
715
|
|
|
357
716
|
@property
|
|
358
717
|
def expr_type(self) -> str:
|
|
359
|
-
|
|
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
|
-
|
|
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[
|
|
725
|
+
def type_sym_tab(self) -> Optional[UniScopeNode]:
|
|
369
726
|
"""Get type symbol table."""
|
|
370
|
-
return self.
|
|
727
|
+
return self._type_sym_tab
|
|
371
728
|
|
|
372
729
|
@type_sym_tab.setter
|
|
373
|
-
def type_sym_tab(self, type_sym_tab:
|
|
730
|
+
def type_sym_tab(self, type_sym_tab: UniScopeNode) -> None:
|
|
374
731
|
"""Set type symbol table."""
|
|
375
|
-
self.
|
|
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(
|
|
743
|
+
class ArchBlockStmt(UniNode):
|
|
387
744
|
"""ArchBlockStmt node type for Jac Ast."""
|
|
388
745
|
|
|
389
746
|
|
|
390
|
-
class EnumBlockStmt(
|
|
747
|
+
class EnumBlockStmt(UniNode):
|
|
391
748
|
"""EnumBlockStmt node type for Jac Ast."""
|
|
392
749
|
|
|
393
750
|
|
|
394
|
-
class CodeBlockStmt(
|
|
751
|
+
class CodeBlockStmt(UniCFGNode):
|
|
395
752
|
"""CodeBlockStmt node type for Jac Ast."""
|
|
396
753
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
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
|
-
"""
|
|
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
|
-
"""
|
|
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,
|
|
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
|
|
848
|
+
class ArchSpec(ElementStmt, CodeBlockStmt, AstSymbolNode, AstDocNode):
|
|
541
849
|
"""ArchSpec node type for Jac Ast."""
|
|
542
850
|
|
|
543
|
-
def __init__(
|
|
544
|
-
|
|
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(
|
|
859
|
+
class MatchPattern(UniNode):
|
|
549
860
|
"""MatchPattern node type for Jac Ast."""
|
|
550
861
|
|
|
551
862
|
|
|
552
|
-
class SubTag(
|
|
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[
|
|
869
|
+
kid: Sequence[UniNode],
|
|
559
870
|
) -> None:
|
|
560
|
-
|
|
561
|
-
self
|
|
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(
|
|
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[
|
|
891
|
+
kid: Sequence[UniNode],
|
|
583
892
|
left_enc: Optional[Token] = None,
|
|
584
893
|
right_enc: Optional[Token] = None,
|
|
585
894
|
) -> None:
|
|
586
|
-
|
|
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
|
-
|
|
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[
|
|
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:
|
|
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[
|
|
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.
|
|
640
|
-
self.
|
|
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
|
-
|
|
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[
|
|
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
|
|
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 |
|
|
701
|
-
if isinstance(node, (Module,
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
1151
|
+
"""ModuleCode node type for Jac Ast."""
|
|
817
1152
|
|
|
818
1153
|
def __init__(
|
|
819
1154
|
self,
|
|
820
|
-
name: Optional[
|
|
1155
|
+
name: Optional[Name],
|
|
821
1156
|
body: SubNodeList[CodeBlockStmt],
|
|
822
|
-
kid: Sequence[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
1185
|
+
"""PyInlineCode node type for Jac Ast."""
|
|
852
1186
|
|
|
853
1187
|
def __init__(
|
|
854
1188
|
self,
|
|
855
1189
|
code: Token,
|
|
856
|
-
kid: Sequence[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
1219
|
+
kid: Sequence[UniNode],
|
|
890
1220
|
doc: Optional[String] = None,
|
|
891
1221
|
) -> None:
|
|
892
|
-
|
|
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
|
-
|
|
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[
|
|
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.
|
|
1288
|
+
new_kid.append(self.gen_token(Tok.LBRACE))
|
|
962
1289
|
new_kid.append(self.items)
|
|
963
|
-
|
|
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[
|
|
1303
|
+
path: Optional[SubNodeList[Name]],
|
|
974
1304
|
level: int,
|
|
975
1305
|
alias: Optional[Name],
|
|
976
|
-
kid: Sequence[
|
|
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
|
-
|
|
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
|
|
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[
|
|
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
|
-
|
|
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[
|
|
1370
|
+
kid: Sequence[UniNode],
|
|
1074
1371
|
) -> None:
|
|
1075
|
-
"""Initialize module item node."""
|
|
1076
1372
|
self.name = name
|
|
1077
1373
|
self.alias = alias
|
|
1078
|
-
self
|
|
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[
|
|
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
|
|
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] |
|
|
1130
|
-
kid: Sequence[
|
|
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
|
-
|
|
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
|
|
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[
|
|
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.
|
|
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.
|
|
1509
|
+
new_kid.append(self.gen_token(Tok.RPAREN))
|
|
1208
1510
|
if self.body:
|
|
1209
|
-
if isinstance(self.body,
|
|
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
|
|
1220
|
-
"""
|
|
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
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
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[
|
|
1532
|
+
decl_link: Optional[UniNode] = None,
|
|
1229
1533
|
) -> None:
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
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
|
-
|
|
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[
|
|
1260
|
-
kid: Sequence[
|
|
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
|
-
|
|
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[
|
|
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,
|
|
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] |
|
|
1380
|
-
kid: Sequence[
|
|
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
|
-
|
|
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
|
-
|
|
1408
|
-
return self.signature.is_method
|
|
1700
|
+
return self.method_owner is not None
|
|
1409
1701
|
|
|
1410
1702
|
@property
|
|
1411
|
-
def
|
|
1412
|
-
|
|
1413
|
-
|
|
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, (
|
|
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,
|
|
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[
|
|
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(
|
|
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,
|
|
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
|
|
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[
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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(
|
|
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[
|
|
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
|
|
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
|
-
|
|
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
|
|
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[
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1728
|
-
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
|
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[
|
|
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
|
-
|
|
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
|
-
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
2045
|
+
kid: Sequence[UniNode],
|
|
1860
2046
|
) -> None:
|
|
1861
|
-
"""Initialize if statement node."""
|
|
1862
2047
|
self.condition = condition
|
|
1863
2048
|
self.body = body
|
|
1864
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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(
|
|
1907
|
-
"""
|
|
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[
|
|
2097
|
+
kid: Sequence[UniNode],
|
|
1913
2098
|
) -> None:
|
|
1914
|
-
"""Initialize else node."""
|
|
1915
2099
|
self.body = body
|
|
1916
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
2225
|
+
kid: Sequence[UniNode],
|
|
2043
2226
|
) -> None:
|
|
2044
|
-
"""Initialize finally statement node."""
|
|
2045
2227
|
self.body = body
|
|
2046
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
2342
|
+
kid: Sequence[UniNode],
|
|
2160
2343
|
) -> None:
|
|
2161
|
-
"""Initialize while statement node."""
|
|
2162
2344
|
self.condition = condition
|
|
2163
2345
|
self.body = body
|
|
2164
|
-
|
|
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[
|
|
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[
|
|
2373
|
+
kid: Sequence[UniNode],
|
|
2191
2374
|
) -> None:
|
|
2192
|
-
"""Initialize with statement node."""
|
|
2193
2375
|
self.exprs = exprs
|
|
2194
2376
|
self.body = body
|
|
2195
|
-
|
|
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[
|
|
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(
|
|
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[
|
|
2404
|
+
kid: Sequence[UniNode],
|
|
2225
2405
|
) -> None:
|
|
2226
|
-
"""Initialize module item node."""
|
|
2227
2406
|
self.expr = expr
|
|
2228
2407
|
self.alias = alias
|
|
2229
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
2485
|
+
"""CheckStmt node type for Jac Ast."""
|
|
2310
2486
|
|
|
2311
2487
|
def __init__(
|
|
2312
2488
|
self,
|
|
2313
2489
|
target: Expr,
|
|
2314
|
-
kid: Sequence[
|
|
2490
|
+
kid: Sequence[UniNode],
|
|
2315
2491
|
) -> None:
|
|
2316
|
-
"""Initialize delete statement node."""
|
|
2317
2492
|
self.target = target
|
|
2318
|
-
|
|
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[
|
|
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[
|
|
2515
|
+
kid: Sequence[UniNode],
|
|
2341
2516
|
) -> None:
|
|
2342
|
-
"""Initialize control statement node."""
|
|
2343
2517
|
self.ctrl = ctrl
|
|
2344
|
-
|
|
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[
|
|
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[
|
|
2536
|
+
kid: Sequence[UniNode],
|
|
2363
2537
|
) -> None:
|
|
2364
|
-
"""Initialize delete statement node."""
|
|
2365
2538
|
self.target = target
|
|
2366
|
-
|
|
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[
|
|
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[
|
|
2570
|
+
kid: Sequence[UniNode],
|
|
2389
2571
|
) -> None:
|
|
2390
|
-
"""Initialize report statement node."""
|
|
2391
2572
|
self.expr = expr
|
|
2392
|
-
|
|
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[
|
|
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[
|
|
2595
|
+
kid: Sequence[UniNode],
|
|
2415
2596
|
) -> None:
|
|
2416
|
-
"""Initialize return statement node."""
|
|
2417
2597
|
self.expr = expr
|
|
2418
|
-
|
|
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[
|
|
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[
|
|
2621
|
+
kid: Sequence[UniNode],
|
|
2442
2622
|
) -> None:
|
|
2443
|
-
"""Initialize ignore statement node."""
|
|
2444
2623
|
self.target = target
|
|
2445
|
-
|
|
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[
|
|
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
|
-
|
|
2646
|
+
insert_loc: Optional[Expr],
|
|
2468
2647
|
target: Expr,
|
|
2469
2648
|
else_body: Optional[ElseStmt],
|
|
2470
|
-
kid: Sequence[
|
|
2649
|
+
kid: Sequence[UniNode],
|
|
2471
2650
|
) -> None:
|
|
2472
|
-
|
|
2473
|
-
self.vis_type = vis_type
|
|
2651
|
+
self.insert_loc = insert_loc
|
|
2474
2652
|
self.target = target
|
|
2475
|
-
|
|
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.
|
|
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[
|
|
2664
|
+
new_kid: list[UniNode] = []
|
|
2487
2665
|
new_kid.append(self.gen_token(Tok.KW_VISIT))
|
|
2488
|
-
if self.
|
|
2666
|
+
if self.insert_loc:
|
|
2489
2667
|
new_kid.append(self.gen_token(Tok.COLON))
|
|
2490
|
-
new_kid.append(self.
|
|
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[
|
|
2684
|
+
kid: Sequence[UniNode],
|
|
2538
2685
|
) -> None:
|
|
2539
2686
|
"""Initialize disengage statement node."""
|
|
2540
|
-
|
|
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[
|
|
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
|
-
"""
|
|
2702
|
+
"""AwaitExpr node type for Jac Ast."""
|
|
2555
2703
|
|
|
2556
2704
|
def __init__(
|
|
2557
2705
|
self,
|
|
2558
2706
|
target: Expr,
|
|
2559
|
-
kid: Sequence[
|
|
2707
|
+
kid: Sequence[UniNode],
|
|
2560
2708
|
) -> None:
|
|
2561
|
-
"""Initialize sync statement node."""
|
|
2562
2709
|
self.target = target
|
|
2563
|
-
|
|
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[
|
|
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[
|
|
2731
|
+
kid: Sequence[UniNode],
|
|
2586
2732
|
) -> None:
|
|
2587
|
-
"""Initialize global statement node."""
|
|
2588
2733
|
self.target = target
|
|
2589
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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(
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
2911
|
+
kid: Sequence[UniNode],
|
|
2755
2912
|
) -> None:
|
|
2756
|
-
"""Initialize binary expression node."""
|
|
2757
2913
|
self.values = values
|
|
2758
2914
|
self.op = op
|
|
2759
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
2968
|
+
kid: Sequence[UniNode],
|
|
2819
2969
|
) -> None:
|
|
2820
|
-
"""Initialize unary expression node."""
|
|
2821
2970
|
self.operand = operand
|
|
2822
2971
|
self.op = op
|
|
2823
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
3024
|
+
kid: Sequence[UniNode],
|
|
2879
3025
|
) -> None:
|
|
2880
|
-
"""Initialize multi string expression node."""
|
|
2881
3026
|
self.strings = strings
|
|
2882
|
-
|
|
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[
|
|
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[
|
|
3049
|
+
kid: Sequence[UniNode],
|
|
2906
3050
|
) -> None:
|
|
2907
|
-
"""Initialize fstring expression node."""
|
|
2908
3051
|
self.parts = parts
|
|
2909
|
-
|
|
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[
|
|
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[
|
|
3089
|
+
kid: Sequence[UniNode],
|
|
2948
3090
|
) -> None:
|
|
2949
|
-
"""Initialize value node."""
|
|
2950
3091
|
self.values = values
|
|
2951
|
-
|
|
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[
|
|
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[
|
|
3116
|
+
kid: Sequence[UniNode],
|
|
2977
3117
|
) -> None:
|
|
2978
|
-
"""Initialize value node."""
|
|
2979
3118
|
self.values = values
|
|
2980
|
-
|
|
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[
|
|
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[
|
|
3143
|
+
kid: Sequence[UniNode],
|
|
3006
3144
|
) -> None:
|
|
3007
|
-
"""Initialize tuple value node."""
|
|
3008
3145
|
self.values = values
|
|
3009
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
3185
|
+
kid: Sequence[UniNode],
|
|
3050
3186
|
) -> None:
|
|
3051
|
-
"""Initialize dict expression node."""
|
|
3052
3187
|
self.kv_pairs = kv_pairs
|
|
3053
|
-
|
|
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[
|
|
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(
|
|
3076
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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(
|
|
3107
|
-
"""
|
|
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[
|
|
3245
|
+
kid: Sequence[UniNode],
|
|
3114
3246
|
) -> None:
|
|
3115
|
-
"""Initialize keyword pair expression node."""
|
|
3116
3247
|
self.key = key
|
|
3117
3248
|
self.value = value
|
|
3118
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
3467
|
+
kid: Sequence[UniNode],
|
|
3345
3468
|
) -> None:
|
|
3346
|
-
"""Initialize atom unit expression node."""
|
|
3347
3469
|
self.value = value
|
|
3348
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
|
3597
|
+
class TypeRef(AtomExpr):
|
|
3483
3598
|
"""ArchRef node type for Jac Ast."""
|
|
3484
3599
|
|
|
3485
3600
|
def __init__(
|
|
3486
3601
|
self,
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
kid: Sequence[AstNode],
|
|
3602
|
+
target: NameAtom,
|
|
3603
|
+
kid: Sequence[UniNode],
|
|
3490
3604
|
) -> None:
|
|
3491
|
-
|
|
3492
|
-
self
|
|
3493
|
-
self
|
|
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=
|
|
3499
|
-
name_spec=
|
|
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.
|
|
3508
|
-
new_kid: list[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
3699
|
+
"""DisconnectOp node type for Jac Ast."""
|
|
3593
3700
|
|
|
3594
3701
|
def __init__(
|
|
3595
3702
|
self,
|
|
3596
3703
|
edge_spec: EdgeOpRef,
|
|
3597
|
-
kid: Sequence[
|
|
3704
|
+
kid: Sequence[UniNode],
|
|
3598
3705
|
) -> None:
|
|
3599
|
-
"""Initialize disconnect op reference expression node."""
|
|
3600
3706
|
self.edge_spec = edge_spec
|
|
3601
|
-
|
|
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[
|
|
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(
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
3816
|
+
"""AssignCompr node type for Jac Ast."""
|
|
3716
3817
|
|
|
3717
3818
|
def __init__(
|
|
3718
3819
|
self,
|
|
3719
3820
|
assigns: SubNodeList[KWPair],
|
|
3720
|
-
kid: Sequence[
|
|
3821
|
+
kid: Sequence[UniNode],
|
|
3721
3822
|
) -> None:
|
|
3722
|
-
"""Initialize assign compr expression node."""
|
|
3723
3823
|
self.assigns = assigns
|
|
3724
|
-
|
|
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[
|
|
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[
|
|
3855
|
+
kid: Sequence[UniNode],
|
|
3757
3856
|
) -> None:
|
|
3758
|
-
"""Initialize match statement node."""
|
|
3759
3857
|
self.target = target
|
|
3760
3858
|
self.cases = cases
|
|
3761
|
-
|
|
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[
|
|
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(
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
3921
|
+
kid: Sequence[UniNode],
|
|
3825
3922
|
) -> None:
|
|
3826
|
-
"""Initialize match or node."""
|
|
3827
3923
|
self.patterns = patterns
|
|
3828
|
-
|
|
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[
|
|
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[
|
|
3947
|
+
kid: Sequence[UniNode],
|
|
3853
3948
|
) -> None:
|
|
3854
|
-
"""Initialize match as node."""
|
|
3855
3949
|
self.name = name
|
|
3856
3950
|
self.pattern = pattern
|
|
3857
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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
|
-
|
|
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[
|
|
3997
|
+
kid: Sequence[UniNode],
|
|
3905
3998
|
) -> None:
|
|
3906
|
-
"""Initialize match value node."""
|
|
3907
3999
|
self.value = value
|
|
3908
|
-
|
|
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[
|
|
4016
|
+
kid: Sequence[UniNode],
|
|
3926
4017
|
) -> None:
|
|
3927
|
-
"""Initialize match singleton node."""
|
|
3928
4018
|
self.value = value
|
|
3929
|
-
|
|
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[
|
|
4033
|
+
kid: Sequence[UniNode],
|
|
3945
4034
|
) -> None:
|
|
3946
|
-
"""Initialize match sequence node."""
|
|
3947
4035
|
self.values = values
|
|
3948
|
-
|
|
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[
|
|
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[
|
|
4059
|
+
kid: Sequence[UniNode],
|
|
3973
4060
|
) -> None:
|
|
3974
|
-
"""Initialize match mapping node."""
|
|
3975
4061
|
self.values = values
|
|
3976
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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
|
-
"""
|
|
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[
|
|
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
|
-
|
|
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[
|
|
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(
|
|
4167
|
+
class Token(UniNode):
|
|
4089
4168
|
"""Token node type for Jac Ast."""
|
|
4090
4169
|
|
|
4091
4170
|
def __init__(
|
|
4092
4171
|
self,
|
|
4093
|
-
orig_src:
|
|
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
|
-
|
|
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:
|
|
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
|
-
"""
|
|
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:
|
|
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
|
-
"""
|
|
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
|
-
"""
|
|
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:
|
|
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
|
|
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(
|
|
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:
|
|
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[
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|