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
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TurboPython Runtime - frame_slot
|
|
3
|
+
*
|
|
4
|
+
* Uninitialized aligned storage for a single T, used as a generator /
|
|
5
|
+
* coroutine state-machine frame field. Defers T's construction until
|
|
6
|
+
* the source code's first assignment (vs. C++'s default behavior of
|
|
7
|
+
* default-constructing every non-static member of a struct).
|
|
8
|
+
*
|
|
9
|
+
* TPy sema enforces no-read-before-write, so the slot only needs to
|
|
10
|
+
* worry about destruction correctness: a runtime `alive_` flag tracks
|
|
11
|
+
* whether the payload exists, and the slot's destructor runs `~T()`
|
|
12
|
+
* iff alive.
|
|
13
|
+
*
|
|
14
|
+
* Not copyable; move-constructible (required so coro structs can be
|
|
15
|
+
* wrapped into `Adapter<...>` via `make_unique<Adapter<...>>(std::move(coro))`);
|
|
16
|
+
* not move-assignable. Move-construct transfers the alive payload and
|
|
17
|
+
* leaves the source dead.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
#pragma once
|
|
21
|
+
|
|
22
|
+
#include <new>
|
|
23
|
+
#include <type_traits>
|
|
24
|
+
#include <utility>
|
|
25
|
+
|
|
26
|
+
#include "core.hpp"
|
|
27
|
+
|
|
28
|
+
namespace tpy {
|
|
29
|
+
|
|
30
|
+
template <typename T>
|
|
31
|
+
class frame_slot {
|
|
32
|
+
public:
|
|
33
|
+
frame_slot() noexcept = default;
|
|
34
|
+
|
|
35
|
+
frame_slot(const frame_slot&) = delete;
|
|
36
|
+
frame_slot& operator=(const frame_slot&) = delete;
|
|
37
|
+
frame_slot& operator=(frame_slot&&) = delete;
|
|
38
|
+
|
|
39
|
+
// Move ctor is required: async coro structs get wrapped into an
|
|
40
|
+
// `Adapter<...>` via `make_unique<Adapter<...>>(std::move(coro))`
|
|
41
|
+
// which forwards through inner's move ctor; if any frame field's
|
|
42
|
+
// move ctor is deleted the whole coro struct becomes immovable.
|
|
43
|
+
// Transfers the live payload and leaves the source dead.
|
|
44
|
+
frame_slot(frame_slot&& other)
|
|
45
|
+
noexcept(std::is_nothrow_move_constructible_v<T>) {
|
|
46
|
+
if (other.alive_) {
|
|
47
|
+
::new (static_cast<void*>(&storage_)) T(std::move(*other.ptr()));
|
|
48
|
+
alive_ = true;
|
|
49
|
+
other.ptr()->~T();
|
|
50
|
+
other.alive_ = false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
~frame_slot() {
|
|
55
|
+
if (alive_) {
|
|
56
|
+
ptr()->~T();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
template <typename... Args>
|
|
61
|
+
T& emplace(Args&&... args) {
|
|
62
|
+
if (alive_) {
|
|
63
|
+
ptr()->~T();
|
|
64
|
+
// Mark dead between destroy and placement-new so a throwing
|
|
65
|
+
// T ctor doesn't leave alive_=true over destroyed storage
|
|
66
|
+
// (would cause the dtor to double-destroy).
|
|
67
|
+
alive_ = false;
|
|
68
|
+
}
|
|
69
|
+
::new (static_cast<void*>(&storage_)) T(std::forward<Args>(args)...);
|
|
70
|
+
alive_ = true;
|
|
71
|
+
return *ptr();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// No operator= for arbitrary T values. Codegen emits explicit
|
|
75
|
+
// `name.emplace(expr)` for every assignment to a frame slot --
|
|
76
|
+
// makes the first-init vs rebind invariant visible in the source,
|
|
77
|
+
// and avoids the `name = {}` ambiguity that plagues template
|
|
78
|
+
// overload resolution against deleted copy/move assigns.
|
|
79
|
+
|
|
80
|
+
void reset() {
|
|
81
|
+
if (alive_) {
|
|
82
|
+
ptr()->~T();
|
|
83
|
+
alive_ = false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
bool has_value() const noexcept { return alive_; }
|
|
88
|
+
explicit operator bool() const noexcept { return alive_; }
|
|
89
|
+
|
|
90
|
+
T& get() & {
|
|
91
|
+
#ifndef NDEBUG
|
|
92
|
+
if (!alive_) {
|
|
93
|
+
tpy_panic("frame_slot::get on dead slot");
|
|
94
|
+
}
|
|
95
|
+
#endif
|
|
96
|
+
return *ptr();
|
|
97
|
+
}
|
|
98
|
+
const T& get() const & {
|
|
99
|
+
#ifndef NDEBUG
|
|
100
|
+
if (!alive_) {
|
|
101
|
+
tpy_panic("frame_slot::get on dead slot");
|
|
102
|
+
}
|
|
103
|
+
#endif
|
|
104
|
+
return *ptr();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
T& operator*() & { return get(); }
|
|
108
|
+
const T& operator*() const & { return get(); }
|
|
109
|
+
T* operator->() { return &get(); }
|
|
110
|
+
const T* operator->() const { return &get(); }
|
|
111
|
+
|
|
112
|
+
private:
|
|
113
|
+
T* ptr() noexcept { return std::launder(reinterpret_cast<T*>(&storage_)); }
|
|
114
|
+
const T* ptr() const noexcept { return std::launder(reinterpret_cast<const T*>(&storage_)); }
|
|
115
|
+
|
|
116
|
+
alignas(T) unsigned char storage_[sizeof(T)];
|
|
117
|
+
bool alive_ = false;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
} // namespace tpy
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TurboPython Runtime - Generator Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Wraps a callable returning optional<T> into an iterator with __next__()
|
|
5
|
+
* and __iter__(), used for generator expressions.
|
|
6
|
+
*
|
|
7
|
+
* Depends on: <optional>, <expected>
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#pragma once
|
|
11
|
+
|
|
12
|
+
#include "core.hpp"
|
|
13
|
+
#include "next_iter.hpp"
|
|
14
|
+
|
|
15
|
+
#include <expected>
|
|
16
|
+
#include <optional>
|
|
17
|
+
|
|
18
|
+
namespace tpy {
|
|
19
|
+
|
|
20
|
+
// Generator expression wrapper: stores a mutable callable returning optional<T>,
|
|
21
|
+
// provides __next__() and __iter__() so it integrates with direct __next__() loops.
|
|
22
|
+
// Inherits begin()/end() from next_iter_mixin so C++ range-for works too.
|
|
23
|
+
template<typename T, typename F>
|
|
24
|
+
class generator_wrapper : public next_iter_mixin<generator_wrapper<T, F>, T> {
|
|
25
|
+
F fn_;
|
|
26
|
+
public:
|
|
27
|
+
explicit generator_wrapper(F&& fn) : fn_(std::move(fn)) {}
|
|
28
|
+
|
|
29
|
+
std::expected<T, StopIteration> __next__() {
|
|
30
|
+
auto opt = fn_();
|
|
31
|
+
if (opt.has_value()) return *std::move(opt);
|
|
32
|
+
return tpy::make_unexpected(StopIteration{});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
generator_wrapper& __iter__() { return *this; }
|
|
36
|
+
|
|
37
|
+
friend std::ostream& operator<<(std::ostream& os, const generator_wrapper&) {
|
|
38
|
+
return os << "<generator>";
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
template<typename T, typename F>
|
|
43
|
+
generator_wrapper<T, F> make_generator(F&& fn) {
|
|
44
|
+
return generator_wrapper<T, F>(std::forward<F>(fn));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
} // namespace tpy
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TurboPython Runtime - Iterable Operations
|
|
3
|
+
*
|
|
4
|
+
* Non-range overloads for container operations (list_extend, str_join, etc.)
|
|
5
|
+
* that accept Iterable types (types with tpy::__iter__() but no begin()/end()).
|
|
6
|
+
*
|
|
7
|
+
* Uses tpy::__iter__() + __next__() to iterate non-range types.
|
|
8
|
+
* The primary (range-based) overloads live in container_ops.hpp and format.hpp.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#pragma once
|
|
12
|
+
|
|
13
|
+
#include <ranges>
|
|
14
|
+
#include <string>
|
|
15
|
+
#include <string_view>
|
|
16
|
+
#include <type_traits>
|
|
17
|
+
#include <vector>
|
|
18
|
+
|
|
19
|
+
#include "container_ops.hpp"
|
|
20
|
+
#include "dunder.hpp"
|
|
21
|
+
#include "ordered_map.hpp"
|
|
22
|
+
|
|
23
|
+
namespace tpy {
|
|
24
|
+
|
|
25
|
+
// Forwarding-ref overloads: accept both lvalue containers (user iterables)
|
|
26
|
+
// and rvalue temporaries (generator expressions). The requires clause
|
|
27
|
+
// excludes standard ranges so these never compete with the primary overloads
|
|
28
|
+
// in container_ops.hpp / format.hpp.
|
|
29
|
+
|
|
30
|
+
// -- list_extend for non-range iterables ------------------------------------
|
|
31
|
+
|
|
32
|
+
template<typename T, typename Container>
|
|
33
|
+
requires (!std::ranges::input_range<std::remove_reference_t<Container>>)
|
|
34
|
+
void list_extend(std::vector<T>& v, Container&& other) {
|
|
35
|
+
auto __iter = tpy::__iter__(other);
|
|
36
|
+
for (;;) {
|
|
37
|
+
auto __r = __iter.__next__();
|
|
38
|
+
if (!__r.has_value()) break;
|
|
39
|
+
v.push_back(unwrap_ref(*__r));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// -- list_set_slice for non-range iterables ---------------------------------
|
|
44
|
+
|
|
45
|
+
template<typename T, typename Container>
|
|
46
|
+
requires (!std::ranges::input_range<std::remove_reference_t<Container>>)
|
|
47
|
+
void list_set_slice(std::vector<T>& vec, BasicSlice sl, Container&& other) {
|
|
48
|
+
std::vector<T> tmp;
|
|
49
|
+
auto __iter = tpy::__iter__(other);
|
|
50
|
+
for (;;) {
|
|
51
|
+
auto __r = __iter.__next__();
|
|
52
|
+
if (!__r.has_value()) break;
|
|
53
|
+
tmp.push_back(unwrap_ref(*__r));
|
|
54
|
+
}
|
|
55
|
+
list_set_slice(vec, sl, tmp);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// -- list_set_stepped_slice for non-range iterables -------------------------
|
|
59
|
+
|
|
60
|
+
template<typename T, typename Container>
|
|
61
|
+
requires (!std::ranges::input_range<std::remove_reference_t<Container>>)
|
|
62
|
+
void list_set_stepped_slice(std::vector<T>& vec, Slice sl, Container&& other) {
|
|
63
|
+
std::vector<T> tmp;
|
|
64
|
+
auto __iter = tpy::__iter__(other);
|
|
65
|
+
for (;;) {
|
|
66
|
+
auto __r = __iter.__next__();
|
|
67
|
+
if (!__r.has_value()) break;
|
|
68
|
+
tmp.push_back(unwrap_ref(*__r));
|
|
69
|
+
}
|
|
70
|
+
list_set_stepped_slice(vec, sl, tmp);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// -- str_join for non-range iterables ---------------------------------------
|
|
74
|
+
|
|
75
|
+
template<typename Container>
|
|
76
|
+
requires (!std::ranges::input_range<std::remove_reference_t<Container>>)
|
|
77
|
+
inline std::string str_join(std::string_view sep, Container&& items) {
|
|
78
|
+
std::string result;
|
|
79
|
+
bool first = true;
|
|
80
|
+
auto __iter = tpy::__iter__(items);
|
|
81
|
+
for (;;) {
|
|
82
|
+
auto __r = __iter.__next__();
|
|
83
|
+
if (!__r.has_value()) break;
|
|
84
|
+
if (!first) result.append(sep);
|
|
85
|
+
result.append(std::string_view(unwrap_ref(*__r)));
|
|
86
|
+
first = false;
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// -- from_range for non-range iterables -------------------------------------
|
|
92
|
+
|
|
93
|
+
template<typename Container, typename Iterable>
|
|
94
|
+
requires (!std::ranges::input_range<std::remove_reference_t<Iterable>>)
|
|
95
|
+
Container from_range(Iterable&& iterable) {
|
|
96
|
+
Container result;
|
|
97
|
+
auto __iter = tpy::__iter__(iterable);
|
|
98
|
+
for (;;) {
|
|
99
|
+
auto __r = __iter.__next__();
|
|
100
|
+
if (!__r.has_value()) break;
|
|
101
|
+
result.push_back(unwrap_ref(*__r));
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// -- dict_from_pairs for non-range iterables --------------------------------
|
|
107
|
+
|
|
108
|
+
template<typename K, typename V, typename Iterable>
|
|
109
|
+
requires (!std::ranges::input_range<std::remove_reference_t<Iterable>>)
|
|
110
|
+
ordered_map<K, V> dict_from_pairs(Iterable&& iterable) {
|
|
111
|
+
ordered_map<K, V> result;
|
|
112
|
+
auto __iter = tpy::__iter__(iterable);
|
|
113
|
+
for (;;) {
|
|
114
|
+
auto __r = __iter.__next__();
|
|
115
|
+
if (!__r.has_value()) break;
|
|
116
|
+
auto&& __item = unwrap_ref_move(*__r);
|
|
117
|
+
result.insert_or_assign(std::get<0>(std::move(__item)), std::get<1>(std::move(__item)));
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
} // namespace tpy
|