tpy-lang 0.3.0.dev0__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.
- tpy_lang-0.3.0.dev0.dist-info/METADATA +151 -0
- tpy_lang-0.3.0.dev0.dist-info/RECORD +333 -0
- tpy_lang-0.3.0.dev0.dist-info/WHEEL +4 -0
- tpy_lang-0.3.0.dev0.dist-info/entry_points.txt +3 -0
- tpyc/__init__.py +104 -0
- tpyc/__main__.py +6 -0
- tpyc/_buildinfo.py +1 -0
- tpyc/_data/docs/LANGUAGE_FEATURES.md +6278 -0
- tpyc/_data/docs/STDLIB_ROADMAP.md +1258 -0
- tpyc/_data/docs/TPY_FOR_AGENTS.md +556 -0
- tpyc/_data/lib/tpy/_bindings/__init__.py +6 -0
- tpyc/_data/lib/tpy/_bindings/pcre2.py +173 -0
- tpyc/_data/lib/tpy/_bindings/posix_socket.py +161 -0
- tpyc/_data/lib/tpy/_functools_macros.py +80 -0
- tpyc/_data/lib/tpy/_macro_helpers.py +161 -0
- tpyc/_data/lib/tpy/argparse.py +2062 -0
- tpyc/_data/lib/tpy/asyncio/__init__.py +744 -0
- tpyc/_data/lib/tpy/asyncio/_executor.py +515 -0
- tpyc/_data/lib/tpy/base64.py +410 -0
- tpyc/_data/lib/tpy/bisect.py +39 -0
- tpyc/_data/lib/tpy/builtins.py +38 -0
- tpyc/_data/lib/tpy/dataclasses.py +354 -0
- tpyc/_data/lib/tpy/enum.py +23 -0
- tpyc/_data/lib/tpy/functools.py +33 -0
- tpyc/_data/lib/tpy/hashlib.py +206 -0
- tpyc/_data/lib/tpy/heapq.py +118 -0
- tpyc/_data/lib/tpy/io.py +395 -0
- tpyc/_data/lib/tpy/json.py +221 -0
- tpyc/_data/lib/tpy/math.py +406 -0
- tpyc/_data/lib/tpy/random.py +597 -0
- tpyc/_data/lib/tpy/re.py +467 -0
- tpyc/_data/lib/tpy/socket.py +379 -0
- tpyc/_data/lib/tpy/struct.py +178 -0
- tpyc/_data/lib/tpy/sys.py +40 -0
- tpyc/_data/lib/tpy/time.py +39 -0
- tpyc/_data/lib/tpy/tpy/__init__.py +78 -0
- tpyc/_data/lib/tpy/tpy/_bootstrap/__init__.py +10 -0
- tpyc/_data/lib/tpy/tpy/_bootstrap/_decorators.py +37 -0
- tpyc/_data/lib/tpy/tpy/_bootstrap/_extern.py +64 -0
- tpyc/_data/lib/tpy/tpy/_builtins/__init__.py +11 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_bytes.py +378 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_dict.py +151 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_exceptions.py +125 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_funcs.py +681 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_io.py +97 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_list.py +127 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_range.py +52 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_set.py +139 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_super.py +11 -0
- tpyc/_data/lib/tpy/tpy/_builtins/_types.py +661 -0
- tpyc/_data/lib/tpy/tpy/_core/__init__.py +23 -0
- tpyc/_data/lib/tpy/tpy/_core/_bytes_view.py +129 -0
- tpyc/_data/lib/tpy/tpy/_core/_containers.py +137 -0
- tpyc/_data/lib/tpy/tpy/_core/_functions.py +40 -0
- tpyc/_data/lib/tpy/tpy/_core/_types.py +2061 -0
- tpyc/_data/lib/tpy/tpy/_typing/__init__.py +77 -0
- tpyc/_data/lib/tpy/tpy/_version.py +29 -0
- tpyc/_data/lib/tpy/tpy/bits.py +28 -0
- tpyc/_data/lib/tpy/tpy/coro/__init__.py +127 -0
- tpyc/_data/lib/tpy/tpy/extern.py +8 -0
- tpyc/_data/lib/tpy/tpy/mem.py +49 -0
- tpyc/_data/lib/tpy/tpy/unsafe.py +195 -0
- tpyc/_data/lib/tpy/tpy/version.py +21 -0
- tpyc/_data/lib/tpy/typing.py +13 -0
- tpyc/_data/runtime/cpp/include/tpy/any.hpp +461 -0
- tpyc/_data/runtime/cpp/include/tpy/as_ostream.hpp +117 -0
- tpyc/_data/runtime/cpp/include/tpy/async.hpp +76 -0
- tpyc/_data/runtime/cpp/include/tpy/bigint.hpp +1343 -0
- tpyc/_data/runtime/cpp/include/tpy/builtins.hpp +400 -0
- tpyc/_data/runtime/cpp/include/tpy/bytes_ops.hpp +469 -0
- tpyc/_data/runtime/cpp/include/tpy/container_ops.hpp +487 -0
- tpyc/_data/runtime/cpp/include/tpy/copy_iter.hpp +82 -0
- tpyc/_data/runtime/cpp/include/tpy/core.hpp +558 -0
- tpyc/_data/runtime/cpp/include/tpy/dict_ops.hpp +289 -0
- tpyc/_data/runtime/cpp/include/tpy/dunder.hpp +750 -0
- tpyc/_data/runtime/cpp/include/tpy/dynamic.hpp +44 -0
- tpyc/_data/runtime/cpp/include/tpy/enum.hpp +40 -0
- tpyc/_data/runtime/cpp/include/tpy/file.hpp +245 -0
- tpyc/_data/runtime/cpp/include/tpy/fixed_int.hpp +317 -0
- tpyc/_data/runtime/cpp/include/tpy/format.hpp +954 -0
- tpyc/_data/runtime/cpp/include/tpy/frame_slot.hpp +120 -0
- tpyc/_data/runtime/cpp/include/tpy/generator.hpp +47 -0
- tpyc/_data/runtime/cpp/include/tpy/iterable_ops.hpp +122 -0
- tpyc/_data/runtime/cpp/include/tpy/itertools.hpp +749 -0
- tpyc/_data/runtime/cpp/include/tpy/next_iter.hpp +82 -0
- tpyc/_data/runtime/cpp/include/tpy/ordered_map.hpp +518 -0
- tpyc/_data/runtime/cpp/include/tpy/ordered_set.hpp +337 -0
- tpyc/_data/runtime/cpp/include/tpy/own_iter.hpp +54 -0
- tpyc/_data/runtime/cpp/include/tpy/pascal_graph_sdl.hpp +192 -0
- tpyc/_data/runtime/cpp/include/tpy/printing.hpp +302 -0
- tpyc/_data/runtime/cpp/include/tpy/protocols.hpp +61 -0
- tpyc/_data/runtime/cpp/include/tpy/range.hpp +115 -0
- tpyc/_data/runtime/cpp/include/tpy/ranges.hpp +212 -0
- tpyc/_data/runtime/cpp/include/tpy/set_ops.hpp +265 -0
- tpyc/_data/runtime/cpp/include/tpy/slice.hpp +47 -0
- tpyc/_data/runtime/cpp/include/tpy/span_iter.hpp +42 -0
- tpyc/_data/runtime/cpp/include/tpy/stdlib/math.hpp +41 -0
- tpyc/_data/runtime/cpp/include/tpy/stdlib/pcre2_h.hpp +96 -0
- tpyc/_data/runtime/cpp/include/tpy/stdlib/random.hpp +25 -0
- tpyc/_data/runtime/cpp/include/tpy/stdlib/socket_h.hpp +145 -0
- tpyc/_data/runtime/cpp/include/tpy/stdlib/time.hpp +62 -0
- tpyc/_data/runtime/cpp/include/tpy/system.hpp +121 -0
- tpyc/_data/runtime/cpp/include/tpy/throwable.hpp +55 -0
- tpyc/_data/runtime/cpp/include/tpy/tpy.hpp +156 -0
- tpyc/_data/runtime/cpp/include/tpy/type_name.hpp +77 -0
- tpyc/_data/runtime/cpp/include/tpy/type_traits.hpp +240 -0
- tpyc/_data/runtime/cpp/include/tpy/uninit_array_storage.hpp +250 -0
- tpyc/_data/runtime/cpp/include/tpy/uninit_heap_storage.hpp +277 -0
- tpyc/_data/runtime/cpp/include/tpy/varargs.hpp +174 -0
- tpyc/_data/runtime/cpp/include/tpy/variant_ref.hpp +118 -0
- tpyc/_data/runtime/cpp/src/stdlib/socket_impl.cpp +104 -0
- tpyc/_data/runtime/cpp/third_party/README.md +58 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/AUTHORS +36 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/CMakeLists.txt +1233 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/COPYING +5 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/ChangeLog +3097 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/HACKING +853 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/INSTALL +368 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/LICENCE +94 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/NEWS +492 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/NON-AUTOTOOLS-BUILD +430 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/README +956 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/cmake/COPYING-CMAKE-SCRIPTS +22 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindEditline.cmake +16 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindPackageHandleStandardArgs.cmake +58 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindReadline.cmake +29 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/cmake/pcre2-config-version.cmake.in +15 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/cmake/pcre2-config.cmake.in +148 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/config-cmake.h.in +56 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-16.pc.in +13 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-32.pc.in +13 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-8.pc.in +13 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-posix.pc.in +13 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/pcre2-config.in +121 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h +483 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h.generic +483 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h.in +460 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h +1010 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h.generic +1010 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h.in +1010 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_auto_possess.c +1371 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chartables.c +196 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chartables.c.dist +196 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chkdint.c +96 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_compile.c +11001 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_config.c +252 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_context.c +510 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_convert.c +1189 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_dfa_match.c +4119 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_dftables.c +297 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_error.c +345 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_extuni.c +162 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_find_bracket.c +219 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_fuzzsupport.c +792 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_internal.h +2084 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_intmodedep.h +940 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_compile.c +14972 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_match.c +200 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_misc.c +234 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_neon_inc.h +354 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_simd_inc.h +2355 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_test.c +2528 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_maketables.c +165 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_match.c +7777 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_match_data.c +185 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_newline.c +243 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ord2utf.c +120 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_pattern_info.c +432 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_printint.c +886 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_script_run.c +344 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_serialize.c +286 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_string_utils.c +237 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_study.c +1915 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_substitute.c +1009 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_substring.c +550 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_tables.c +234 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucd.c +5460 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucp.h +396 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucptables.c +1533 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_valid_utf.c +398 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_xclass.c +308 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2demo.c +497 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2grep.c +4606 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix.c +425 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix.h +187 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix_test.c +209 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2test.c +9708 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorApple.c +137 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorCore.c +327 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorFreeBSD.c +89 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorPosix.c +62 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorWindows.c +40 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitProtExecAllocatorNetBSD.c +72 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitProtExecAllocatorPosix.c +172 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitWXExecAllocatorPosix.c +141 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitWXExecAllocatorWindows.c +102 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfig.h +142 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfigCPU.h +188 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfigInternal.h +907 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitLir.c +3561 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitLir.h +2466 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_32.c +4636 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_64.c +3491 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_T2_32.c +4302 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeLOONGARCH_64.c +3765 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_32.c +472 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_64.c +387 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_common.c +4259 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_32.c +485 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_64.c +719 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_common.c +3161 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_32.c +142 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_64.c +222 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_common.c +3121 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeS390X.c +4526 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_32.c +1685 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_64.c +1398 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_common.c +5001 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitSerialize.c +516 -0
- tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitUtils.c +344 -0
- tpyc/_data/runtime/cpp/third_party/pcre2.sources.txt +54 -0
- tpyc/_data/runtime/cpp/third_party/pcre2.vendor.json +7 -0
- tpyc/build/__init__.py +7 -0
- tpyc/build/pcre2.py +122 -0
- tpyc/build/third_party.py +413 -0
- tpyc/cli.py +822 -0
- tpyc/codegen_cpp/__init__.py +18 -0
- tpyc/codegen_cpp/builtins.py +484 -0
- tpyc/codegen_cpp/context.py +2064 -0
- tpyc/codegen_cpp/expressions.py +5940 -0
- tpyc/codegen_cpp/functions.py +1913 -0
- tpyc/codegen_cpp/gen_async.py +3258 -0
- tpyc/codegen_cpp/gen_generators.py +657 -0
- tpyc/codegen_cpp/generator.py +2258 -0
- tpyc/codegen_cpp/match.py +1997 -0
- tpyc/codegen_cpp/param_const.py +172 -0
- tpyc/codegen_cpp/protocols.py +907 -0
- tpyc/codegen_cpp/records.py +1654 -0
- tpyc/codegen_cpp/resumable_cfg.py +1651 -0
- tpyc/codegen_cpp/statements.py +4963 -0
- tpyc/codegen_cpp/string_dispatch.py +76 -0
- tpyc/codegen_cpp/test_context.py +46 -0
- tpyc/codegen_cpp/test_param_const.py +113 -0
- tpyc/codegen_cpp/test_resumable_cfg.py +182 -0
- tpyc/codegen_cpp/type_resolution.py +53 -0
- tpyc/codegen_cpp/types.py +436 -0
- tpyc/codegen_cpp/variant_access.py +135 -0
- tpyc/coercions.py +749 -0
- tpyc/compilation_context.py +57 -0
- tpyc/compiler.py +3945 -0
- tpyc/cycle_detection.py +358 -0
- tpyc/diagnostics.py +135 -0
- tpyc/dump_types.py +353 -0
- tpyc/frontend_diagnostics.py +47 -0
- tpyc/frontend_ir/__init__.py +140 -0
- tpyc/frontend_ir/lower.py +1098 -0
- tpyc/frontend_ir/nodes.py +718 -0
- tpyc/frontend_ir/resolver_adapter.py +151 -0
- tpyc/frontend_plugin.py +209 -0
- tpyc/install_docs.py +81 -0
- tpyc/liveness.py +756 -0
- tpyc/macro_api.py +1724 -0
- tpyc/macro_loader.py +497 -0
- tpyc/module_names.py +64 -0
- tpyc/modules/__init__.py +31 -0
- tpyc/modules/defs.py +89 -0
- tpyc/modules/registry.py +36 -0
- tpyc/modules/resolver.py +192 -0
- tpyc/modules/type_resolution.py +629 -0
- tpyc/namespace.py +172 -0
- tpyc/parse/__init__.py +84 -0
- tpyc/parse/imports.py +490 -0
- tpyc/parse/nodes.py +1732 -0
- tpyc/parse/parser.py +4043 -0
- tpyc/parse/resolve_refs.py +466 -0
- tpyc/parse/type_resolver.py +1060 -0
- tpyc/prescan.py +254 -0
- tpyc/qnames.py +149 -0
- tpyc/repl.py +529 -0
- tpyc/repl_backends.py +848 -0
- tpyc/sema/__init__.py +21 -0
- tpyc/sema/analyzer.py +3625 -0
- tpyc/sema/bound_check.py +72 -0
- tpyc/sema/builder_trace.py +684 -0
- tpyc/sema/calls.py +5406 -0
- tpyc/sema/compatibility.py +2107 -0
- tpyc/sema/context.py +1243 -0
- tpyc/sema/expressions.py +3737 -0
- tpyc/sema/flow_facts.py +199 -0
- tpyc/sema/init_tracker.py +150 -0
- tpyc/sema/list_literals.py +69 -0
- tpyc/sema/literal_utils.py +27 -0
- tpyc/sema/local_deduction.py +1088 -0
- tpyc/sema/macros.py +179 -0
- tpyc/sema/match.py +1177 -0
- tpyc/sema/method_expansion.py +347 -0
- tpyc/sema/methods.py +2197 -0
- tpyc/sema/mutation_propagation.py +268 -0
- tpyc/sema/narrowing.py +857 -0
- tpyc/sema/numeric_lattice.py +160 -0
- tpyc/sema/operators.py +402 -0
- tpyc/sema/overloads.py +841 -0
- tpyc/sema/protocols.py +1209 -0
- tpyc/sema/reach_analysis.py +202 -0
- tpyc/sema/registration.py +3156 -0
- tpyc/sema/scope_tracker.py +193 -0
- tpyc/sema/statements.py +4426 -0
- tpyc/sema/type_ops.py +1879 -0
- tpyc/sema/value_range.py +181 -0
- tpyc/symbol_binding.py +259 -0
- tpyc/test_c3_mro.py +208 -0
- tpyc/test_cli_argv.py +52 -0
- tpyc/test_compiler.py +559 -0
- tpyc/test_contains_type_param.py +101 -0
- tpyc/test_cycle_detection.py +221 -0
- tpyc/test_dump_types.py +225 -0
- tpyc/test_install_docs.py +65 -0
- tpyc/test_local_cpp_form.py +135 -0
- tpyc/test_macro_loader.py +76 -0
- tpyc/test_method_expansion.py +254 -0
- tpyc/test_nominal_identity.py +182 -0
- tpyc/test_overloads.py +410 -0
- tpyc/test_parse.py +303 -0
- tpyc/test_parse_type_ref.py +506 -0
- tpyc/test_parse_version_info.py +58 -0
- tpyc/test_reach_analysis.py +72 -0
- tpyc/test_ref_type.py +216 -0
- tpyc/test_send_sync_substitution.py +276 -0
- tpyc/test_tuple_mutation_propagation.py +206 -0
- tpyc/test_type_def_registry.py +1729 -0
- tpyc/test_union_types.py +195 -0
- tpyc/type_def_registry.py +975 -0
- tpyc/typesys.py +5104 -0
tpyc/dump_types.py
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Dump documentation for builtin types in markdown format.
|
|
3
|
+
|
|
4
|
+
Walks the .py stubs under lib/tpy/ and prints a module-by-module summary
|
|
5
|
+
of public classes, protocols, functions, and type aliases. Uses Python's
|
|
6
|
+
ast module -- not tpyc's parser -- because the goal is to show what the
|
|
7
|
+
source says, not to resolve types through sema.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import ast as pyast
|
|
13
|
+
import io
|
|
14
|
+
import re
|
|
15
|
+
from contextlib import redirect_stdout
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from . import get_lib_dir
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def dump_builtin_types() -> None:
|
|
22
|
+
"""Print markdown documentation for all public stubs under lib/tpy/.
|
|
23
|
+
|
|
24
|
+
Covers user-facing API surface: builtins (`tpy`), TPy-native types
|
|
25
|
+
(`tplib.*`), and bundled stdlib modules (`re`, `math`, `argparse`, ...).
|
|
26
|
+
Internal `_bindings.*` raw native layers are excluded.
|
|
27
|
+
"""
|
|
28
|
+
print("# TurboPython API Reference\n")
|
|
29
|
+
print(
|
|
30
|
+
"Auto-generated from .py stubs under `lib/tpy/`. Covers builtins, "
|
|
31
|
+
"`tplib.*` TPy-native types, and bundled stdlib modules.\n"
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Collect rendered module sections first so we can emit a TOC ahead of
|
|
35
|
+
# them, then print everything. Only modules with public content end up
|
|
36
|
+
# in `sections`.
|
|
37
|
+
lib_dir = get_lib_dir() / "tpy"
|
|
38
|
+
sections: list[tuple[str, str]] = [] # (module_name, rendered_body)
|
|
39
|
+
for py_file in sorted(lib_dir.rglob("*.py")):
|
|
40
|
+
if _should_skip(py_file, lib_dir):
|
|
41
|
+
continue
|
|
42
|
+
rendered = _render_module(py_file, lib_dir)
|
|
43
|
+
if rendered is not None:
|
|
44
|
+
sections.append(rendered)
|
|
45
|
+
|
|
46
|
+
if sections:
|
|
47
|
+
print("## Modules\n")
|
|
48
|
+
for module_name, _ in sections:
|
|
49
|
+
anchor = _gfm_anchor(f"`{module_name}`")
|
|
50
|
+
print(f"- [`{module_name}`](#{anchor})")
|
|
51
|
+
print()
|
|
52
|
+
|
|
53
|
+
for _, body in sections:
|
|
54
|
+
print(body, end="")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# ---------------------------------------------------------------------------
|
|
58
|
+
# Module-level filtering
|
|
59
|
+
# ---------------------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
# Files that exist but are internal infrastructure, not user-facing API.
|
|
62
|
+
_SKIP_BASENAMES: frozenset[str] = frozenset({
|
|
63
|
+
"_version.py", # compile-time macro module (internal)
|
|
64
|
+
"_macro_helpers.py", # shared helpers for @dataclass-style macros
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
# Top-level packages under lib/tpy/ that are internal implementation details
|
|
68
|
+
# and should never appear in user-facing API docs. `_bindings/` holds raw
|
|
69
|
+
# @native layers (PCRE2, posix sockets) that stdlib modules wrap -- users
|
|
70
|
+
# import the stdlib facade (`re`, `socket`), never the bindings directly.
|
|
71
|
+
_SKIP_TOP_PACKAGES: frozenset[str] = frozenset({
|
|
72
|
+
"_bindings",
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _should_skip(path: Path, lib_dir: Path) -> bool:
|
|
77
|
+
if "__pycache__" in path.parts:
|
|
78
|
+
return True
|
|
79
|
+
if path.name in _SKIP_BASENAMES:
|
|
80
|
+
return True
|
|
81
|
+
rel_parts = path.relative_to(lib_dir).parts
|
|
82
|
+
if rel_parts and rel_parts[0] in _SKIP_TOP_PACKAGES:
|
|
83
|
+
return True
|
|
84
|
+
return False
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
# ---------------------------------------------------------------------------
|
|
88
|
+
# Per-module dump
|
|
89
|
+
# ---------------------------------------------------------------------------
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _render_module(path: Path, lib_dir: Path) -> tuple[str, str] | None:
|
|
93
|
+
"""Render a single module to markdown. Returns (module_name, body) or None
|
|
94
|
+
if the module has no public content worth documenting."""
|
|
95
|
+
source = path.read_text(encoding="utf-8")
|
|
96
|
+
try:
|
|
97
|
+
tree = pyast.parse(source)
|
|
98
|
+
except SyntaxError:
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
allow = _extract_all_whitelist(tree)
|
|
102
|
+
classes = [n for n in tree.body if isinstance(n, pyast.ClassDef)]
|
|
103
|
+
functions = [n for n in tree.body
|
|
104
|
+
if isinstance(n, (pyast.FunctionDef, pyast.AsyncFunctionDef))]
|
|
105
|
+
type_aliases = [n for n in tree.body if isinstance(n, pyast.TypeAlias)]
|
|
106
|
+
# Typed module-level constants: e.g. `__version__: str = ...` in
|
|
107
|
+
# tpy/version.py. User-visible, surface them like type aliases.
|
|
108
|
+
ann_constants = [n for n in tree.body
|
|
109
|
+
if isinstance(n, pyast.AnnAssign)
|
|
110
|
+
and isinstance(n.target, pyast.Name)]
|
|
111
|
+
|
|
112
|
+
classes = [c for c in classes if _is_public(c.name, allow)]
|
|
113
|
+
functions = [f for f in functions if _is_public(f.name, allow)]
|
|
114
|
+
type_aliases = [t for t in type_aliases
|
|
115
|
+
if isinstance(t.name, pyast.Name) and _is_public(t.name.id, allow)]
|
|
116
|
+
ann_constants = [a for a in ann_constants
|
|
117
|
+
if isinstance(a.target, pyast.Name) and _is_public(a.target.id, allow)]
|
|
118
|
+
|
|
119
|
+
if not (classes or functions or type_aliases or ann_constants):
|
|
120
|
+
return None
|
|
121
|
+
|
|
122
|
+
rel = path.relative_to(lib_dir).as_posix()
|
|
123
|
+
module_name = _path_to_module(rel)
|
|
124
|
+
|
|
125
|
+
buf = io.StringIO()
|
|
126
|
+
with redirect_stdout(buf):
|
|
127
|
+
print(f"## `{module_name}`\n")
|
|
128
|
+
module_doc = _get_docstring(tree)
|
|
129
|
+
if module_doc:
|
|
130
|
+
print(module_doc + "\n")
|
|
131
|
+
for alias in type_aliases:
|
|
132
|
+
_print_type_alias(alias)
|
|
133
|
+
for const in ann_constants:
|
|
134
|
+
_print_ann_constant(const)
|
|
135
|
+
for cls in classes:
|
|
136
|
+
_print_class(cls)
|
|
137
|
+
for fn in functions:
|
|
138
|
+
_print_function(fn)
|
|
139
|
+
|
|
140
|
+
return module_name, buf.getvalue()
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _get_docstring(node: pyast.AST) -> str | None:
|
|
144
|
+
"""Return the node's docstring, or None.
|
|
145
|
+
|
|
146
|
+
Applies to modules, classes, and functions -- anything
|
|
147
|
+
pyast.get_docstring accepts. `clean=True` applies inspect.cleandoc
|
|
148
|
+
(dedents + strips leading/trailing blank lines), so we don't need
|
|
149
|
+
further normalisation here.
|
|
150
|
+
"""
|
|
151
|
+
if not isinstance(node, (pyast.Module, pyast.ClassDef,
|
|
152
|
+
pyast.FunctionDef, pyast.AsyncFunctionDef)):
|
|
153
|
+
return None
|
|
154
|
+
raw = pyast.get_docstring(node, clean=True)
|
|
155
|
+
return raw or None
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _indent(text: str, prefix: str) -> str:
|
|
159
|
+
"""Prefix every line of text; used to render docstrings under list items."""
|
|
160
|
+
return "\n".join(prefix + line if line else line for line in text.splitlines())
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# GFM-style anchor derivation: lowercase, strip characters that aren't
|
|
164
|
+
# letters/digits/spaces/hyphens, replace spaces with hyphens. Matches what
|
|
165
|
+
# GitHub / glow / most markdown renderers produce for a header.
|
|
166
|
+
_ANCHOR_STRIP = re.compile(r"[^\w\s-]", flags=re.UNICODE)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _gfm_anchor(header_text: str) -> str:
|
|
170
|
+
text = header_text.lower()
|
|
171
|
+
text = _ANCHOR_STRIP.sub("", text)
|
|
172
|
+
return text.replace(" ", "-")
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def _extract_all_whitelist(tree: pyast.Module) -> frozenset[str] | None:
|
|
176
|
+
"""Return the set of names in __all__, or None if __all__ is not defined."""
|
|
177
|
+
for stmt in tree.body:
|
|
178
|
+
if (isinstance(stmt, pyast.Assign)
|
|
179
|
+
and len(stmt.targets) == 1
|
|
180
|
+
and isinstance(stmt.targets[0], pyast.Name)
|
|
181
|
+
and stmt.targets[0].id == "__all__"
|
|
182
|
+
and isinstance(stmt.value, (pyast.List, pyast.Tuple))):
|
|
183
|
+
names: list[str] = []
|
|
184
|
+
for elt in stmt.value.elts:
|
|
185
|
+
if isinstance(elt, pyast.Constant) and isinstance(elt.value, str):
|
|
186
|
+
names.append(elt.value)
|
|
187
|
+
return frozenset(names)
|
|
188
|
+
return None
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def _is_public(name: str, allow: frozenset[str] | None) -> bool:
|
|
192
|
+
if allow is not None:
|
|
193
|
+
return name in allow
|
|
194
|
+
# Dunder names (__foo__) are public-by-convention module metadata
|
|
195
|
+
# (e.g. __version__, __all__). Treat them as public here.
|
|
196
|
+
if name.startswith("__") and name.endswith("__"):
|
|
197
|
+
return True
|
|
198
|
+
return not name.startswith("_")
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def _path_to_module(rel: str) -> str:
|
|
202
|
+
if rel.endswith("/__init__.py"):
|
|
203
|
+
rel = rel[: -len("/__init__.py")]
|
|
204
|
+
elif rel.endswith(".py"):
|
|
205
|
+
rel = rel[:-3]
|
|
206
|
+
return rel.replace("/", ".")
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
# ---------------------------------------------------------------------------
|
|
210
|
+
# Printers
|
|
211
|
+
# ---------------------------------------------------------------------------
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def _print_type_alias(alias: pyast.TypeAlias) -> None:
|
|
215
|
+
if not isinstance(alias.name, pyast.Name):
|
|
216
|
+
return
|
|
217
|
+
name = alias.name.id
|
|
218
|
+
value = _unparse(alias.value)
|
|
219
|
+
print(f"- type `{name}` = `{value}`\n")
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def _print_ann_constant(const: pyast.AnnAssign) -> None:
|
|
223
|
+
"""Render a module-level typed constant (e.g. `__version__: str = ...`)."""
|
|
224
|
+
if not isinstance(const.target, pyast.Name):
|
|
225
|
+
return
|
|
226
|
+
name = const.target.id
|
|
227
|
+
annotation = _unparse(const.annotation)
|
|
228
|
+
print(f"- `{name}: {annotation}`\n")
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def _print_class(cls: pyast.ClassDef) -> None:
|
|
232
|
+
name = cls.name
|
|
233
|
+
bases = [_unparse(b) for b in cls.bases]
|
|
234
|
+
is_protocol = any("Protocol" in b for b in bases)
|
|
235
|
+
decorators = [_unparse(d) for d in cls.decorator_list]
|
|
236
|
+
suffix = " (protocol)" if is_protocol else ""
|
|
237
|
+
|
|
238
|
+
header_prefix = " ".join(f"@{d}" for d in decorators)
|
|
239
|
+
header_prefix = f"{header_prefix} " if header_prefix else ""
|
|
240
|
+
print(f"### {header_prefix}{name}{suffix}\n")
|
|
241
|
+
|
|
242
|
+
if bases:
|
|
243
|
+
print(f"Extends: `{', '.join(bases)}`\n")
|
|
244
|
+
|
|
245
|
+
doc = _get_docstring(cls)
|
|
246
|
+
if doc:
|
|
247
|
+
print(doc + "\n")
|
|
248
|
+
|
|
249
|
+
methods: list[pyast.FunctionDef | pyast.AsyncFunctionDef] = [
|
|
250
|
+
n for n in cls.body
|
|
251
|
+
if isinstance(n, (pyast.FunctionDef, pyast.AsyncFunctionDef))
|
|
252
|
+
]
|
|
253
|
+
# All `__init__` overloads go under Constructor; everything else
|
|
254
|
+
# visible goes under Methods.
|
|
255
|
+
inits = [m for m in methods if m.name == "__init__"]
|
|
256
|
+
other_methods = [m for m in methods
|
|
257
|
+
if m.name != "__init__" and _method_is_visible(m)]
|
|
258
|
+
|
|
259
|
+
if inits:
|
|
260
|
+
print("**Constructor:**\n")
|
|
261
|
+
for init in inits:
|
|
262
|
+
_print_callable_item(name, init, is_method=True, skip_self=True)
|
|
263
|
+
print()
|
|
264
|
+
|
|
265
|
+
if other_methods:
|
|
266
|
+
print("**Methods:**\n")
|
|
267
|
+
for m in other_methods:
|
|
268
|
+
_print_callable_item(m.name, m, is_method=True)
|
|
269
|
+
print()
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def _method_is_visible(m: pyast.FunctionDef | pyast.AsyncFunctionDef) -> bool:
|
|
273
|
+
# Show dunder methods (__len__, __iter__, __str__, ...) but hide private
|
|
274
|
+
# helpers (_foo) and the __init__ already printed as Constructor.
|
|
275
|
+
if m.name.startswith("__") and m.name.endswith("__"):
|
|
276
|
+
return True
|
|
277
|
+
return not m.name.startswith("_")
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def _print_function(fn: pyast.FunctionDef | pyast.AsyncFunctionDef) -> None:
|
|
281
|
+
decorators = [_unparse(d) for d in fn.decorator_list]
|
|
282
|
+
prefix = " ".join(f"@{d}" for d in decorators)
|
|
283
|
+
prefix = f"{prefix} " if prefix else ""
|
|
284
|
+
print(f"### {prefix}{fn.name}()\n")
|
|
285
|
+
_print_callable_item(fn.name, fn)
|
|
286
|
+
print()
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def _print_callable_item(
|
|
290
|
+
name: str,
|
|
291
|
+
fn: pyast.FunctionDef | pyast.AsyncFunctionDef,
|
|
292
|
+
*,
|
|
293
|
+
is_method: bool = False,
|
|
294
|
+
skip_self: bool = False,
|
|
295
|
+
) -> None:
|
|
296
|
+
"""Render one list-item line for a callable, with docstring below when
|
|
297
|
+
present. Docstring is indented two spaces so markdown renderers keep it
|
|
298
|
+
as a continuation of the list item. Trailing blank line ensures the
|
|
299
|
+
next list item isn't parsed as a continuation paragraph of this one
|
|
300
|
+
(CommonMark "loose list" requirement once any item has block content).
|
|
301
|
+
"""
|
|
302
|
+
sig = _format_function_signature(name, fn, is_method=is_method, skip_self=skip_self)
|
|
303
|
+
print(f"- `{sig}`")
|
|
304
|
+
doc = _get_docstring(fn)
|
|
305
|
+
if doc:
|
|
306
|
+
print()
|
|
307
|
+
print(_indent(doc, " "))
|
|
308
|
+
print()
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def _format_function_signature(
|
|
312
|
+
name: str,
|
|
313
|
+
fn: pyast.FunctionDef | pyast.AsyncFunctionDef,
|
|
314
|
+
*,
|
|
315
|
+
is_method: bool = False,
|
|
316
|
+
skip_self: bool = False,
|
|
317
|
+
) -> str:
|
|
318
|
+
parts: list[str] = []
|
|
319
|
+
args = fn.args
|
|
320
|
+
positional = list(args.posonlyargs) + list(args.args)
|
|
321
|
+
for i, arg in enumerate(positional):
|
|
322
|
+
if skip_self and is_method and i == 0 and arg.arg in ("self", "cls"):
|
|
323
|
+
continue
|
|
324
|
+
parts.append(_format_arg(arg))
|
|
325
|
+
if args.vararg is not None:
|
|
326
|
+
parts.append("*" + _format_arg(args.vararg))
|
|
327
|
+
elif args.kwonlyargs:
|
|
328
|
+
# Bare `*` separator marks the start of keyword-only parameters
|
|
329
|
+
# when there's no *args to absorb positional overflow. Required
|
|
330
|
+
# for correct rendering of e.g. dataclasses.field(*, default, ...).
|
|
331
|
+
parts.append("*")
|
|
332
|
+
for arg in args.kwonlyargs:
|
|
333
|
+
parts.append(_format_arg(arg))
|
|
334
|
+
if args.kwarg is not None:
|
|
335
|
+
parts.append("**" + _format_arg(args.kwarg))
|
|
336
|
+
|
|
337
|
+
ret = _unparse(fn.returns) if fn.returns is not None else "..."
|
|
338
|
+
return f"{name}({', '.join(parts)}) -> {ret}"
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
def _format_arg(arg: pyast.arg) -> str:
|
|
342
|
+
if arg.annotation is not None:
|
|
343
|
+
return f"{arg.arg}: {_unparse(arg.annotation)}"
|
|
344
|
+
return arg.arg
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def _unparse(node: pyast.AST | None) -> str:
|
|
348
|
+
if node is None:
|
|
349
|
+
return "..."
|
|
350
|
+
try:
|
|
351
|
+
return pyast.unparse(node)
|
|
352
|
+
except Exception:
|
|
353
|
+
return "<?>"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Diagnostics envelope for the frontend plugin pipeline.
|
|
2
|
+
|
|
3
|
+
Wraps a regular `Diagnostic` with plugin-frontend-specific category and
|
|
4
|
+
metadata. Kept out of `diagnostics.py` so that core diagnostics stays
|
|
5
|
+
free of plugin coupling.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from dataclasses import dataclass
|
|
11
|
+
from enum import Enum
|
|
12
|
+
|
|
13
|
+
from .diagnostics import Diagnostic
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class FrontendDiagnosticCategory(Enum):
|
|
17
|
+
"""Why a frontend-pipeline diagnostic was emitted.
|
|
18
|
+
|
|
19
|
+
- PLUGIN_REPORTED: the plugin returned it in FrontendOutput.diagnostics.
|
|
20
|
+
- PLUGIN_IR_INVALID: lowering caught a structural problem in the IR
|
|
21
|
+
(unknown discriminator, missing required field, etc.). Blames the
|
|
22
|
+
plugin with a clear local error.
|
|
23
|
+
- LOWERING_INTERNAL: lowering hit an impossible-state condition
|
|
24
|
+
after structural validation passed. This is a TPy compiler bug,
|
|
25
|
+
not a plugin bug; the renderer prefixes the message with an
|
|
26
|
+
"internal compiler error" banner.
|
|
27
|
+
"""
|
|
28
|
+
PLUGIN_REPORTED = "PLUGIN_REPORTED"
|
|
29
|
+
PLUGIN_IR_INVALID = "PLUGIN_IR_INVALID"
|
|
30
|
+
LOWERING_INTERNAL = "LOWERING_INTERNAL"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class FrontendDiagnostic:
|
|
35
|
+
"""Plugin-pipeline envelope around a regular Diagnostic."""
|
|
36
|
+
diagnostic: Diagnostic
|
|
37
|
+
category: FrontendDiagnosticCategory
|
|
38
|
+
plugin_name: str | None = None
|
|
39
|
+
source_language: str | None = None
|
|
40
|
+
plugin_diagnostic_code: str | None = None
|
|
41
|
+
|
|
42
|
+
def format(self, filename: str = "<unknown>") -> str:
|
|
43
|
+
base = self.diagnostic.format(filename)
|
|
44
|
+
if self.category == FrontendDiagnosticCategory.LOWERING_INTERNAL:
|
|
45
|
+
return ("internal compiler error: " + base
|
|
46
|
+
+ " (please file an issue)")
|
|
47
|
+
return base
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Frontend plugin IR.
|
|
2
|
+
|
|
3
|
+
Plain-dataclass intermediate representation that frontend plugins emit and
|
|
4
|
+
lowering converts into a `TpyModule`. See `docs/FRONTEND_PLUGIN_DESIGN.md`
|
|
5
|
+
for the design contract.
|
|
6
|
+
|
|
7
|
+
M1 scope: only the nodes needed to express a Pascal "Hello, World!"
|
|
8
|
+
program end-to-end. Additional nodes land milestone-by-milestone.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from .nodes import (
|
|
12
|
+
API_VERSION,
|
|
13
|
+
Assign,
|
|
14
|
+
Attr,
|
|
15
|
+
BinOp,
|
|
16
|
+
BinOpKind,
|
|
17
|
+
BoolLit,
|
|
18
|
+
Break,
|
|
19
|
+
Call,
|
|
20
|
+
CallableType,
|
|
21
|
+
CmpOpKind,
|
|
22
|
+
Compare,
|
|
23
|
+
Continue,
|
|
24
|
+
Enum,
|
|
25
|
+
EnumValue,
|
|
26
|
+
Expr,
|
|
27
|
+
ExprStmt,
|
|
28
|
+
Field,
|
|
29
|
+
FloatLit,
|
|
30
|
+
ForEach,
|
|
31
|
+
ForRange,
|
|
32
|
+
FrontendDirectives,
|
|
33
|
+
FrontendModule,
|
|
34
|
+
FromImport,
|
|
35
|
+
Function,
|
|
36
|
+
If,
|
|
37
|
+
Import,
|
|
38
|
+
ImportDecl,
|
|
39
|
+
ImportName,
|
|
40
|
+
IntLit,
|
|
41
|
+
IntTypeArg,
|
|
42
|
+
ListLit,
|
|
43
|
+
Loc,
|
|
44
|
+
Match,
|
|
45
|
+
MatchCase,
|
|
46
|
+
MatchClass,
|
|
47
|
+
MatchPattern,
|
|
48
|
+
MatchValue,
|
|
49
|
+
MatchWildcard,
|
|
50
|
+
Name,
|
|
51
|
+
NamedType,
|
|
52
|
+
NoneLit,
|
|
53
|
+
Param,
|
|
54
|
+
PointerType,
|
|
55
|
+
Raise,
|
|
56
|
+
RangeDir,
|
|
57
|
+
Record,
|
|
58
|
+
RepeatUntil,
|
|
59
|
+
Return,
|
|
60
|
+
SetLit,
|
|
61
|
+
StarImport,
|
|
62
|
+
Stmt,
|
|
63
|
+
StrLit,
|
|
64
|
+
Subscript,
|
|
65
|
+
TypeArg,
|
|
66
|
+
TypeExpr,
|
|
67
|
+
TypeTypeArg,
|
|
68
|
+
UnaryOp,
|
|
69
|
+
UnaryOpKind,
|
|
70
|
+
UnionType,
|
|
71
|
+
VarDecl,
|
|
72
|
+
While,
|
|
73
|
+
)
|
|
74
|
+
from .lower import LoweredFrontend, lower_module
|
|
75
|
+
|
|
76
|
+
__all__ = [
|
|
77
|
+
"API_VERSION",
|
|
78
|
+
"Assign",
|
|
79
|
+
"Attr",
|
|
80
|
+
"BinOp",
|
|
81
|
+
"BinOpKind",
|
|
82
|
+
"BoolLit",
|
|
83
|
+
"Break",
|
|
84
|
+
"Call",
|
|
85
|
+
"CallableType",
|
|
86
|
+
"CmpOpKind",
|
|
87
|
+
"Compare",
|
|
88
|
+
"Continue",
|
|
89
|
+
"Enum",
|
|
90
|
+
"EnumValue",
|
|
91
|
+
"Expr",
|
|
92
|
+
"ExprStmt",
|
|
93
|
+
"Field",
|
|
94
|
+
"FloatLit",
|
|
95
|
+
"ForEach",
|
|
96
|
+
"ForRange",
|
|
97
|
+
"FrontendDirectives",
|
|
98
|
+
"FrontendModule",
|
|
99
|
+
"FromImport",
|
|
100
|
+
"Function",
|
|
101
|
+
"If",
|
|
102
|
+
"Import",
|
|
103
|
+
"ImportDecl",
|
|
104
|
+
"ImportName",
|
|
105
|
+
"IntLit",
|
|
106
|
+
"IntTypeArg",
|
|
107
|
+
"ListLit",
|
|
108
|
+
"Loc",
|
|
109
|
+
"LoweredFrontend",
|
|
110
|
+
"Match",
|
|
111
|
+
"MatchCase",
|
|
112
|
+
"MatchClass",
|
|
113
|
+
"MatchPattern",
|
|
114
|
+
"MatchValue",
|
|
115
|
+
"MatchWildcard",
|
|
116
|
+
"Name",
|
|
117
|
+
"NamedType",
|
|
118
|
+
"NoneLit",
|
|
119
|
+
"Param",
|
|
120
|
+
"PointerType",
|
|
121
|
+
"Raise",
|
|
122
|
+
"RangeDir",
|
|
123
|
+
"Record",
|
|
124
|
+
"RepeatUntil",
|
|
125
|
+
"Return",
|
|
126
|
+
"SetLit",
|
|
127
|
+
"StarImport",
|
|
128
|
+
"Stmt",
|
|
129
|
+
"StrLit",
|
|
130
|
+
"Subscript",
|
|
131
|
+
"TypeArg",
|
|
132
|
+
"TypeExpr",
|
|
133
|
+
"TypeTypeArg",
|
|
134
|
+
"UnaryOp",
|
|
135
|
+
"UnaryOpKind",
|
|
136
|
+
"UnionType",
|
|
137
|
+
"VarDecl",
|
|
138
|
+
"While",
|
|
139
|
+
"lower_module",
|
|
140
|
+
]
|