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/prescan.py
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"""Pre-scan utilities for TurboPython function bodies.
|
|
2
|
+
|
|
3
|
+
Pure AST walking -- no type registry or analysis context needed.
|
|
4
|
+
Run once in sema; results consumed by both sema and codegen.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from dataclasses import dataclass, field, fields as dc_fields
|
|
10
|
+
|
|
11
|
+
from .parse import (
|
|
12
|
+
TpyStmt, TpyExpr, TpyVarDecl, TpyTupleUnpack, TpyAssign, TpyAugAssign,
|
|
13
|
+
TpyForEach, TpyWith, TpyName, TpySubscript,
|
|
14
|
+
TpyCall, TpyBinOp, TpyChainedCompare, TpyUnaryOp, TpyMethodCall,
|
|
15
|
+
TpyIntLiteral, TpyFloatLiteral, TpyStrLiteral,
|
|
16
|
+
TpyBoolLiteral, TpyNoneLiteral, TpyArrayLiteral, TpyListRepeat,
|
|
17
|
+
TpyCoerce, TpyFieldAccess, TpyIfExpr, TpyNamedExpr,
|
|
18
|
+
TpyNestedDef,
|
|
19
|
+
TpyFStringValue, TpyComprehensionGenerator,
|
|
20
|
+
TpyDictLiteral, TpySetLiteral, TpyTupleLiteral, TpyFString,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass
|
|
25
|
+
class ScanResult:
|
|
26
|
+
"""Result of pre-scanning a function body for reassigned variables."""
|
|
27
|
+
reassigned: set[str] = field(default_factory=set)
|
|
28
|
+
rvalue_reassigned: set[str] = field(default_factory=set)
|
|
29
|
+
lvalue_reassigned: set[str] = field(default_factory=set)
|
|
30
|
+
aug_assigned: set[str] = field(default_factory=set)
|
|
31
|
+
# alias_name -> source_name for lvalue-initialized, non-reassigned variables
|
|
32
|
+
# with simple TpyName init (T& reference candidates).
|
|
33
|
+
alias_sources: dict[str, str] = field(default_factory=dict)
|
|
34
|
+
# Variables initially aliased from another name (before reassignment cleanup).
|
|
35
|
+
# Used by del codegen to avoid destroying through a pointer that may
|
|
36
|
+
# still point at the source variable's storage.
|
|
37
|
+
initial_alias_names: set[str] = field(default_factory=set)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def scan_reassigned_vars(stmts: list[TpyStmt],
|
|
41
|
+
pre_declared: set[str] | None = None) -> ScanResult:
|
|
42
|
+
"""Pre-scan a function body to find variables that are reassigned after first declaration.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
stmts: The statements to scan.
|
|
46
|
+
pre_declared: Names already in scope (e.g. function parameters).
|
|
47
|
+
Assignment to these names counts as reassignment.
|
|
48
|
+
|
|
49
|
+
Returns a ScanResult with:
|
|
50
|
+
- reassigned: variables with a second TpyVarDecl or TpyAssign after first declaration
|
|
51
|
+
- rvalue_reassigned: subset of reassigned with at least one rvalue reassignment
|
|
52
|
+
- lvalue_reassigned: subset of reassigned with at least one lvalue reassignment
|
|
53
|
+
- aug_assigned: variables targeted by augmented assignment (+=, -=, etc.)
|
|
54
|
+
"""
|
|
55
|
+
declared: set[str] = set(pre_declared) if pre_declared else set()
|
|
56
|
+
result = ScanResult()
|
|
57
|
+
_scan_stmts(stmts, declared, result)
|
|
58
|
+
result.initial_alias_names = set(result.alias_sources.keys())
|
|
59
|
+
# Reassigned vars become T* pointers, not T& refs -- remove from alias map
|
|
60
|
+
for name in result.reassigned:
|
|
61
|
+
result.alias_sources.pop(name, None)
|
|
62
|
+
return result
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _expr_to_narrowing_key(expr: TpyExpr) -> str | None:
|
|
66
|
+
"""Convert an expression to a narrowing key string.
|
|
67
|
+
|
|
68
|
+
Returns a simple name for TpyName, or a dotted path for multi-level
|
|
69
|
+
TpyFieldAccess (e.g. "obj.field", "obj.inner.field").
|
|
70
|
+
Returns None for unsupported expressions.
|
|
71
|
+
"""
|
|
72
|
+
if isinstance(expr, TpyName):
|
|
73
|
+
return expr.name
|
|
74
|
+
if isinstance(expr, TpyNamedExpr):
|
|
75
|
+
return expr.target
|
|
76
|
+
if isinstance(expr, TpyFieldAccess):
|
|
77
|
+
obj_key = _expr_to_narrowing_key(expr.obj)
|
|
78
|
+
if obj_key is not None:
|
|
79
|
+
return f"{obj_key}.{expr.field}"
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# A deref-view narrowing rides `narrowed_types` under a distinct key: it
|
|
84
|
+
# narrows the polymorphic payload reached through an owning wrapper's
|
|
85
|
+
# reference-returning __deref__ (`if isinstance(rc, Dog): rc.bark()` resolves
|
|
86
|
+
# `bark` against Dog through the deref, while `rc.clone()` stays an Rc method).
|
|
87
|
+
# Keying it apart from the wrapper variable's own narrowing key leaves the
|
|
88
|
+
# wrapper type untouched and lets the existing save/restore/merge-at-joins
|
|
89
|
+
# machinery for narrowed_types apply unchanged -- exactly like field-path
|
|
90
|
+
# narrowing keys. The NUL suffix cannot collide with any source-level dotted
|
|
91
|
+
# path produced by _expr_to_narrowing_key.
|
|
92
|
+
#
|
|
93
|
+
# INVARIANT: a deref-view key is NOT a `name.`-dotted field path, so the
|
|
94
|
+
# field-path prefix sweeps (NarrowingTracker._invalidate_field_facts and
|
|
95
|
+
# friends) do NOT cover it. Any code that invalidates narrowed_types on a
|
|
96
|
+
# write/mutation of `name` must also drop deref_view_key(name) explicitly (see
|
|
97
|
+
# update_after_write); a prefix-scan alone silently leaves the deref-view fact
|
|
98
|
+
# stale -- the bug class that null-derefs a reassigned wrapper.
|
|
99
|
+
_DEREF_VIEW_SUFFIX = "\x00deref"
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def deref_view_key(narrowing_key: str) -> str:
|
|
103
|
+
"""Map a receiver narrowing key to its deref-view narrowing key."""
|
|
104
|
+
return narrowing_key + _DEREF_VIEW_SUFFIX
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def parse_deref_view_key(key: str) -> 'str | None':
|
|
108
|
+
"""If `key` is a deref-view narrowing key, return the receiver key it wraps;
|
|
109
|
+
otherwise None."""
|
|
110
|
+
if key.endswith(_DEREF_VIEW_SUFFIX):
|
|
111
|
+
return key[:-len(_DEREF_VIEW_SUFFIX)]
|
|
112
|
+
return None
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def match_is_none(expr: TpyExpr) -> tuple[str, bool] | None:
|
|
116
|
+
"""Match `v is None`, `v is not None`, `None is v`, `None is not v`.
|
|
117
|
+
|
|
118
|
+
Also matches dotted field access at any depth: `obj.field is None`,
|
|
119
|
+
`obj.a.b is None`, etc.
|
|
120
|
+
Returns (key, is_not_none) or None if the pattern doesn't match.
|
|
121
|
+
The key is a simple name or a dotted path ("obj.field", "obj.a.b").
|
|
122
|
+
"""
|
|
123
|
+
if not isinstance(expr, TpyBinOp) or expr.op not in ("is", "is not"):
|
|
124
|
+
return None
|
|
125
|
+
key: str | None = None
|
|
126
|
+
if isinstance(expr.right, TpyNoneLiteral):
|
|
127
|
+
key = _expr_to_narrowing_key(expr.left)
|
|
128
|
+
elif isinstance(expr.left, TpyNoneLiteral):
|
|
129
|
+
key = _expr_to_narrowing_key(expr.right)
|
|
130
|
+
if key is None:
|
|
131
|
+
return None
|
|
132
|
+
return key, expr.op == "is not"
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def is_scan_rvalue(expr: TpyExpr | None) -> bool:
|
|
136
|
+
"""Conservative rvalue check for pre-scan (no type registry needed)."""
|
|
137
|
+
if expr is None:
|
|
138
|
+
return False
|
|
139
|
+
if isinstance(expr, TpyCoerce):
|
|
140
|
+
return is_scan_rvalue(expr.expr)
|
|
141
|
+
if isinstance(expr, (TpyName, TpySubscript)):
|
|
142
|
+
return False
|
|
143
|
+
if isinstance(expr, TpyFieldAccess):
|
|
144
|
+
return is_scan_rvalue(expr.obj)
|
|
145
|
+
if isinstance(expr, TpyNamedExpr):
|
|
146
|
+
return is_scan_rvalue(expr.value)
|
|
147
|
+
return isinstance(expr, (TpyCall, TpyBinOp, TpyChainedCompare, TpyUnaryOp, TpyMethodCall,
|
|
148
|
+
TpyIntLiteral, TpyFloatLiteral, TpyStrLiteral,
|
|
149
|
+
TpyBoolLiteral, TpyNoneLiteral, TpyArrayLiteral, TpyListRepeat,
|
|
150
|
+
TpyDictLiteral, TpySetLiteral, TpyTupleLiteral, TpyFString,
|
|
151
|
+
TpyIfExpr))
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _scan_walrus_in_expr(expr: TpyExpr | None, declared: set[str],
|
|
155
|
+
result: ScanResult) -> None:
|
|
156
|
+
"""Walk an expression tree to find walrus operator bindings.
|
|
157
|
+
|
|
158
|
+
Uses generic dataclass field introspection so new expression types
|
|
159
|
+
are handled automatically without manual enumeration.
|
|
160
|
+
"""
|
|
161
|
+
if expr is None:
|
|
162
|
+
return
|
|
163
|
+
if isinstance(expr, TpyNamedExpr):
|
|
164
|
+
if expr.target in declared:
|
|
165
|
+
result.reassigned.add(expr.target)
|
|
166
|
+
result.rvalue_reassigned.add(expr.target)
|
|
167
|
+
else:
|
|
168
|
+
declared.add(expr.target)
|
|
169
|
+
for f in dc_fields(expr):
|
|
170
|
+
val = getattr(expr, f.name)
|
|
171
|
+
if isinstance(val, TpyExpr):
|
|
172
|
+
_scan_walrus_in_expr(val, declared, result)
|
|
173
|
+
elif isinstance(val, TpyComprehensionGenerator):
|
|
174
|
+
_scan_walrus_in_expr(val.iterable, declared, result)
|
|
175
|
+
for cond in val.conditions:
|
|
176
|
+
_scan_walrus_in_expr(cond, declared, result)
|
|
177
|
+
elif isinstance(val, list):
|
|
178
|
+
for item in val:
|
|
179
|
+
if isinstance(item, TpyExpr):
|
|
180
|
+
_scan_walrus_in_expr(item, declared, result)
|
|
181
|
+
elif isinstance(item, TpyFStringValue):
|
|
182
|
+
_scan_walrus_in_expr(item.expr, declared, result)
|
|
183
|
+
elif isinstance(val, dict):
|
|
184
|
+
for v in val.values():
|
|
185
|
+
if isinstance(v, TpyExpr):
|
|
186
|
+
_scan_walrus_in_expr(v, declared, result)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _scan_walrus_in_stmt(stmt: TpyStmt, declared: set[str],
|
|
190
|
+
result: ScanResult) -> None:
|
|
191
|
+
"""Scan expressions within a statement for walrus bindings."""
|
|
192
|
+
for expr in stmt.exprs():
|
|
193
|
+
_scan_walrus_in_expr(expr, declared, result)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def _scan_stmts(stmts: list[TpyStmt], declared: set[str],
|
|
197
|
+
result: ScanResult) -> None:
|
|
198
|
+
for stmt in stmts:
|
|
199
|
+
# Scan for walrus bindings inside expressions before normal stmt scanning
|
|
200
|
+
_scan_walrus_in_stmt(stmt, declared, result)
|
|
201
|
+
if isinstance(stmt, TpyVarDecl):
|
|
202
|
+
if stmt.name in declared:
|
|
203
|
+
result.reassigned.add(stmt.name)
|
|
204
|
+
if is_scan_rvalue(stmt.init):
|
|
205
|
+
result.rvalue_reassigned.add(stmt.name)
|
|
206
|
+
else:
|
|
207
|
+
result.lvalue_reassigned.add(stmt.name)
|
|
208
|
+
else:
|
|
209
|
+
declared.add(stmt.name)
|
|
210
|
+
if (stmt.init is not None
|
|
211
|
+
and isinstance(stmt.init, TpyName)
|
|
212
|
+
and stmt.init.name != stmt.name):
|
|
213
|
+
result.alias_sources[stmt.name] = stmt.init.name
|
|
214
|
+
elif isinstance(stmt, TpyAssign):
|
|
215
|
+
if isinstance(stmt.target, TpyName) and stmt.target.name in declared:
|
|
216
|
+
result.reassigned.add(stmt.target.name)
|
|
217
|
+
if is_scan_rvalue(stmt.value):
|
|
218
|
+
result.rvalue_reassigned.add(stmt.target.name)
|
|
219
|
+
else:
|
|
220
|
+
result.lvalue_reassigned.add(stmt.target.name)
|
|
221
|
+
elif isinstance(stmt, TpyTupleUnpack):
|
|
222
|
+
for name in stmt.targets:
|
|
223
|
+
if name is None:
|
|
224
|
+
continue
|
|
225
|
+
if name in declared:
|
|
226
|
+
result.reassigned.add(name)
|
|
227
|
+
# std::get<i>(tmp) is always an rvalue
|
|
228
|
+
result.rvalue_reassigned.add(name)
|
|
229
|
+
else:
|
|
230
|
+
declared.add(name)
|
|
231
|
+
elif isinstance(stmt, TpyAugAssign):
|
|
232
|
+
if isinstance(stmt.target, TpyName) and stmt.target.name in declared:
|
|
233
|
+
result.aug_assigned.add(stmt.target.name)
|
|
234
|
+
elif isinstance(stmt, TpyNestedDef):
|
|
235
|
+
name = stmt.func.name
|
|
236
|
+
if name in declared:
|
|
237
|
+
result.reassigned.add(name)
|
|
238
|
+
result.rvalue_reassigned.add(name)
|
|
239
|
+
else:
|
|
240
|
+
declared.add(name)
|
|
241
|
+
# Do NOT recurse into nested body (separate scope)
|
|
242
|
+
# Recurse into sub-bodies (if/while/for/with)
|
|
243
|
+
if isinstance(stmt, TpyForEach):
|
|
244
|
+
declared.add(stmt.var)
|
|
245
|
+
if isinstance(stmt, TpyWith):
|
|
246
|
+
for item in stmt.items:
|
|
247
|
+
if item.target is not None:
|
|
248
|
+
if item.target in declared:
|
|
249
|
+
result.reassigned.add(item.target)
|
|
250
|
+
result.rvalue_reassigned.add(item.target)
|
|
251
|
+
else:
|
|
252
|
+
declared.add(item.target)
|
|
253
|
+
for body in stmt.sub_bodies():
|
|
254
|
+
_scan_stmts(body, declared, result)
|
tpyc/qnames.py
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Qualified name constants for compiler-known types, decorators, and protocols.
|
|
3
|
+
|
|
4
|
+
These constants are the canonical identifiers used by the parser and sema to
|
|
5
|
+
dispatch on well-known names. They match the @builtin_type("...") and
|
|
6
|
+
@builtin_decorator("...") annotations in .py stubs under lib/tpy/.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
# -- Builtin types --
|
|
10
|
+
BOOL = "builtins.bool"
|
|
11
|
+
INT = "builtins.int"
|
|
12
|
+
FLOAT = "builtins.float"
|
|
13
|
+
STR = "builtins.str"
|
|
14
|
+
TUPLE = "builtins.tuple"
|
|
15
|
+
BASIC_SLICE = "tpy.basic_slice"
|
|
16
|
+
SLICE = "builtins.slice"
|
|
17
|
+
TYPE = "builtins.type"
|
|
18
|
+
NONE = "builtins.None"
|
|
19
|
+
LIST = "builtins.list"
|
|
20
|
+
DICT = "builtins.dict"
|
|
21
|
+
DICT_KEYS = "builtins.dict_keys"
|
|
22
|
+
DICT_VALUES = "builtins.dict_values"
|
|
23
|
+
DICT_ITEMS = "builtins.dict_items"
|
|
24
|
+
SET = "builtins.set"
|
|
25
|
+
RANGE = "builtins.Range"
|
|
26
|
+
EXCEPTION = "builtins.Exception"
|
|
27
|
+
BASE_EXCEPTION = "builtins.BaseException"
|
|
28
|
+
STOP_ITERATION = "builtins.StopIteration"
|
|
29
|
+
|
|
30
|
+
# -- tpy types --
|
|
31
|
+
PTR = "tpy.Ptr"
|
|
32
|
+
OWN = "tpy.Own"
|
|
33
|
+
FN = "tpy.Fn"
|
|
34
|
+
SPAN = "tpy.Span"
|
|
35
|
+
ARRAY = "tpy.Array"
|
|
36
|
+
SPAN_ITER = "tpy.SpanIter"
|
|
37
|
+
CHAR = "tpy.Char"
|
|
38
|
+
FLOAT32 = "tpy.Float32"
|
|
39
|
+
STRING = "tpy.String"
|
|
40
|
+
STRVIEW = "tpy.StrView"
|
|
41
|
+
|
|
42
|
+
# Fixed-width integers
|
|
43
|
+
INT8 = "tpy.Int8"
|
|
44
|
+
INT16 = "tpy.Int16"
|
|
45
|
+
INT32 = "tpy.Int32"
|
|
46
|
+
INT64 = "tpy.Int64"
|
|
47
|
+
UINT8 = "tpy.UInt8"
|
|
48
|
+
UINT16 = "tpy.UInt16"
|
|
49
|
+
UINT32 = "tpy.UInt32"
|
|
50
|
+
UINT64 = "tpy.UInt64"
|
|
51
|
+
|
|
52
|
+
# Map from qualified name to short name for all fixed ints
|
|
53
|
+
FIXED_INT_NAMES = {
|
|
54
|
+
INT8: "Int8", INT16: "Int16", INT32: "Int32", INT64: "Int64",
|
|
55
|
+
UINT8: "UInt8", UINT16: "UInt16", UINT32: "UInt32", UINT64: "UInt64",
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# -- tpy decorators / type modifiers --
|
|
59
|
+
READONLY = "tpy.readonly"
|
|
60
|
+
NOALLOC = "tpy.noalloc"
|
|
61
|
+
NOCOPY = "tpy.nocopy"
|
|
62
|
+
PURE = "tpy.pure"
|
|
63
|
+
INLINE = "tpy.inline"
|
|
64
|
+
DYNAMIC = "tpy.dynamic"
|
|
65
|
+
ERROR_RETURN = "tpy.error_return"
|
|
66
|
+
AUTO_READONLY = "tpy.auto_readonly"
|
|
67
|
+
AUTO_OWN = "tpy.auto_own"
|
|
68
|
+
|
|
69
|
+
# -- typing --
|
|
70
|
+
PROTOCOL = "typing.Protocol"
|
|
71
|
+
SELF = "typing.Self"
|
|
72
|
+
OPTIONAL = "typing.Optional"
|
|
73
|
+
FINAL = "typing.Final"
|
|
74
|
+
CLASSVAR = "typing.ClassVar"
|
|
75
|
+
CALLABLE = "typing.Callable"
|
|
76
|
+
OVERLOAD = "typing.overload"
|
|
77
|
+
OVERRIDE = "typing.override"
|
|
78
|
+
LITERAL = "typing.Literal"
|
|
79
|
+
TYPED_DICT = "typing.TypedDict"
|
|
80
|
+
UNPACK = "typing.Unpack"
|
|
81
|
+
|
|
82
|
+
# -- typing protocols --
|
|
83
|
+
ITERATOR = "typing.Iterator"
|
|
84
|
+
ITERABLE = "typing.Iterable"
|
|
85
|
+
SIZED = "typing.Sized"
|
|
86
|
+
SEQUENCE = "typing.Sequence"
|
|
87
|
+
|
|
88
|
+
# -- tpy.coro / asyncio --
|
|
89
|
+
AWAITABLE = "tpy.coro.Awaitable"
|
|
90
|
+
CANCELLABLE = "tpy.coro.Cancellable"
|
|
91
|
+
POLL = "tpy.coro.Poll"
|
|
92
|
+
ASYNCIO_RUN = "asyncio.run"
|
|
93
|
+
ASYNCIO_CREATE_TASK = "asyncio.create_task"
|
|
94
|
+
|
|
95
|
+
# -- tpy @builtin_function names with bespoke codegen emission --
|
|
96
|
+
COPY = "tpy.copy"
|
|
97
|
+
COPY_ITER = "tpy.copy_iter"
|
|
98
|
+
OWN_ITER = "tpy.own_iter"
|
|
99
|
+
TRY_PARSE = "tpy.try_parse"
|
|
100
|
+
|
|
101
|
+
# -- tpy protocols --
|
|
102
|
+
NATIVE_ITERABLE = "tpy.NativeIterable"
|
|
103
|
+
NATIVE_RANGE_CONSTRUCTIBLE = "tpy.NativeRangeConstructible"
|
|
104
|
+
SPANNABLE = "tpy.Spannable"
|
|
105
|
+
VALUE_TYPE = "tpy.ValueType"
|
|
106
|
+
COPYABLE = "tpy.Copyable"
|
|
107
|
+
SEND = "tpy.Send"
|
|
108
|
+
SYNC = "tpy.Sync"
|
|
109
|
+
DEFAULT = "tpy.Default"
|
|
110
|
+
COVARIANT = "tpy.Covariant"
|
|
111
|
+
RETURN_EXCEPTION = "tpy.ReturnException"
|
|
112
|
+
THROWABLE = "tpy.Throwable"
|
|
113
|
+
# Phase 20: methods auto-emitted by codegen on every concrete Throwable
|
|
114
|
+
# subclass (clone returns a heap-allocated polymorphic copy at the
|
|
115
|
+
# concrete type, __raise__ throws *this, what reads the message field).
|
|
116
|
+
# Sema rejects user-defined overrides of these names on Throwable
|
|
117
|
+
# subclasses to prevent a C++ redefinition collision.
|
|
118
|
+
THROWABLE_ABI_METHODS = ("clone", "__raise__", "what")
|
|
119
|
+
HASHABLE = "tpy.Hashable"
|
|
120
|
+
COMPARABLE = "tpy.Comparable"
|
|
121
|
+
EQUATABLE = "tpy.Equatable"
|
|
122
|
+
DEREF = "tpy.Deref"
|
|
123
|
+
TRUTHY = "tpy.Truthy"
|
|
124
|
+
STRINGABLE = "tpy.Stringable"
|
|
125
|
+
REPRESENTABLE = "tpy.Representable"
|
|
126
|
+
ANY_FIXED_INT = "tpy.AnyFixedInt"
|
|
127
|
+
ANY_FIXED_SIGNED = "tpy.AnyFixedSigned"
|
|
128
|
+
ANY_FIXED_UNSIGNED = "tpy.AnyFixedUnsigned"
|
|
129
|
+
|
|
130
|
+
# -- tpy.extern decorators --
|
|
131
|
+
NATIVE = "tpy.extern.native"
|
|
132
|
+
EXPORT = "tpy.extern.export"
|
|
133
|
+
CPP_TEMPLATE = "tpy.extern.cpp_template"
|
|
134
|
+
BUILTIN_TYPE = "tpy.extern.builtin_type"
|
|
135
|
+
BUILTIN_DECORATOR = "tpy.extern.builtin_decorator"
|
|
136
|
+
VALUE_PTR_COERCION = "tpy.extern.value_ptr_coercion"
|
|
137
|
+
NATIVE_PRESERVES_REFS = "tpy.extern.native_preserves_refs"
|
|
138
|
+
TYPE_PARAM_DEFAULT = "tpy.extern.type_param_default"
|
|
139
|
+
BUILTIN_FUNCTION = "tpy.extern.builtin_function"
|
|
140
|
+
DEFAULT_INT = "tpy.extern.DefaultInt"
|
|
141
|
+
|
|
142
|
+
# -- enum --
|
|
143
|
+
ENUM = "enum.Enum"
|
|
144
|
+
INT_ENUM = "enum.IntEnum"
|
|
145
|
+
ENUM_AUTO = "enum.auto"
|
|
146
|
+
|
|
147
|
+
# -- builtins special --
|
|
148
|
+
STATICMETHOD = "builtins.staticmethod"
|
|
149
|
+
PROPERTY = "builtins.property"
|