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,344 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Stack-less Just-In-Time compiler
|
|
3
|
+
*
|
|
4
|
+
* Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* Redistribution and use in source and binary forms, with or without modification, are
|
|
7
|
+
* permitted provided that the following conditions are met:
|
|
8
|
+
*
|
|
9
|
+
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
10
|
+
* conditions and the following disclaimer.
|
|
11
|
+
*
|
|
12
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
13
|
+
* of conditions and the following disclaimer in the documentation and/or other materials
|
|
14
|
+
* provided with the distribution.
|
|
15
|
+
*
|
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY
|
|
17
|
+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
18
|
+
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
|
19
|
+
* SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
20
|
+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
|
21
|
+
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
|
22
|
+
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
23
|
+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
24
|
+
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/* ------------------------------------------------------------------------ */
|
|
28
|
+
/* Locks */
|
|
29
|
+
/* ------------------------------------------------------------------------ */
|
|
30
|
+
|
|
31
|
+
/* Executable Allocator */
|
|
32
|
+
|
|
33
|
+
#if (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR) \
|
|
34
|
+
&& !(defined SLJIT_WX_EXECUTABLE_ALLOCATOR && SLJIT_WX_EXECUTABLE_ALLOCATOR)
|
|
35
|
+
#if (defined SLJIT_SINGLE_THREADED && SLJIT_SINGLE_THREADED)
|
|
36
|
+
#define SLJIT_ALLOCATOR_LOCK()
|
|
37
|
+
#define SLJIT_ALLOCATOR_UNLOCK()
|
|
38
|
+
#elif !(defined _WIN32)
|
|
39
|
+
#include <pthread.h>
|
|
40
|
+
|
|
41
|
+
static pthread_mutex_t allocator_lock = PTHREAD_MUTEX_INITIALIZER;
|
|
42
|
+
|
|
43
|
+
#define SLJIT_ALLOCATOR_LOCK() pthread_mutex_lock(&allocator_lock)
|
|
44
|
+
#define SLJIT_ALLOCATOR_UNLOCK() pthread_mutex_unlock(&allocator_lock)
|
|
45
|
+
#else /* windows */
|
|
46
|
+
static HANDLE allocator_lock;
|
|
47
|
+
|
|
48
|
+
static SLJIT_INLINE void allocator_grab_lock(void)
|
|
49
|
+
{
|
|
50
|
+
HANDLE lock;
|
|
51
|
+
if (SLJIT_UNLIKELY(!InterlockedCompareExchangePointer(&allocator_lock, NULL, NULL))) {
|
|
52
|
+
lock = CreateMutex(NULL, FALSE, NULL);
|
|
53
|
+
if (InterlockedCompareExchangePointer(&allocator_lock, lock, NULL))
|
|
54
|
+
CloseHandle(lock);
|
|
55
|
+
}
|
|
56
|
+
WaitForSingleObject(allocator_lock, INFINITE);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#define SLJIT_ALLOCATOR_LOCK() allocator_grab_lock()
|
|
60
|
+
#define SLJIT_ALLOCATOR_UNLOCK() ReleaseMutex(allocator_lock)
|
|
61
|
+
#endif /* thread implementation */
|
|
62
|
+
#endif /* SLJIT_EXECUTABLE_ALLOCATOR && !SLJIT_WX_EXECUTABLE_ALLOCATOR */
|
|
63
|
+
|
|
64
|
+
/* ------------------------------------------------------------------------ */
|
|
65
|
+
/* Stack */
|
|
66
|
+
/* ------------------------------------------------------------------------ */
|
|
67
|
+
|
|
68
|
+
#if ((defined SLJIT_UTIL_STACK && SLJIT_UTIL_STACK) \
|
|
69
|
+
&& !(defined SLJIT_UTIL_SIMPLE_STACK_ALLOCATION && SLJIT_UTIL_SIMPLE_STACK_ALLOCATION)) \
|
|
70
|
+
|| ((defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR) \
|
|
71
|
+
&& !((defined SLJIT_PROT_EXECUTABLE_ALLOCATOR && SLJIT_PROT_EXECUTABLE_ALLOCATOR) \
|
|
72
|
+
|| (defined SLJIT_WX_EXECUTABLE_ALLOCATOR && SLJIT_WX_EXECUTABLE_ALLOCATOR)))
|
|
73
|
+
|
|
74
|
+
#ifndef _WIN32
|
|
75
|
+
/* Provides mmap function. */
|
|
76
|
+
#include <sys/types.h>
|
|
77
|
+
#include <sys/mman.h>
|
|
78
|
+
|
|
79
|
+
#ifndef MAP_ANON
|
|
80
|
+
#ifdef MAP_ANONYMOUS
|
|
81
|
+
#define MAP_ANON MAP_ANONYMOUS
|
|
82
|
+
#endif /* MAP_ANONYMOUS */
|
|
83
|
+
#endif /* !MAP_ANON */
|
|
84
|
+
|
|
85
|
+
#ifndef MAP_ANON
|
|
86
|
+
|
|
87
|
+
#include <fcntl.h>
|
|
88
|
+
|
|
89
|
+
#ifdef O_CLOEXEC
|
|
90
|
+
#define SLJIT_CLOEXEC O_CLOEXEC
|
|
91
|
+
#else /* !O_CLOEXEC */
|
|
92
|
+
#define SLJIT_CLOEXEC 0
|
|
93
|
+
#endif /* O_CLOEXEC */
|
|
94
|
+
|
|
95
|
+
/* Some old systems do not have MAP_ANON. */
|
|
96
|
+
static int dev_zero = -1;
|
|
97
|
+
|
|
98
|
+
#if (defined SLJIT_SINGLE_THREADED && SLJIT_SINGLE_THREADED)
|
|
99
|
+
|
|
100
|
+
static SLJIT_INLINE int open_dev_zero(void)
|
|
101
|
+
{
|
|
102
|
+
dev_zero = open("/dev/zero", O_RDWR | SLJIT_CLOEXEC);
|
|
103
|
+
|
|
104
|
+
return dev_zero < 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
#else /* !SLJIT_SINGLE_THREADED */
|
|
108
|
+
|
|
109
|
+
#include <pthread.h>
|
|
110
|
+
|
|
111
|
+
static pthread_mutex_t dev_zero_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
112
|
+
|
|
113
|
+
static SLJIT_INLINE int open_dev_zero(void)
|
|
114
|
+
{
|
|
115
|
+
pthread_mutex_lock(&dev_zero_mutex);
|
|
116
|
+
if (SLJIT_UNLIKELY(dev_zero < 0))
|
|
117
|
+
dev_zero = open("/dev/zero", O_RDWR | SLJIT_CLOEXEC);
|
|
118
|
+
|
|
119
|
+
pthread_mutex_unlock(&dev_zero_mutex);
|
|
120
|
+
return dev_zero < 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
#endif /* SLJIT_SINGLE_THREADED */
|
|
124
|
+
#undef SLJIT_CLOEXEC
|
|
125
|
+
#endif /* !MAP_ANON */
|
|
126
|
+
#endif /* !_WIN32 */
|
|
127
|
+
#endif /* open_dev_zero */
|
|
128
|
+
|
|
129
|
+
#if (defined SLJIT_UTIL_STACK && SLJIT_UTIL_STACK) \
|
|
130
|
+
|| (defined SLJIT_EXECUTABLE_ALLOCATOR && SLJIT_EXECUTABLE_ALLOCATOR)
|
|
131
|
+
|
|
132
|
+
#ifdef _WIN32
|
|
133
|
+
|
|
134
|
+
static SLJIT_INLINE sljit_uw get_page_alignment(void) {
|
|
135
|
+
SYSTEM_INFO si;
|
|
136
|
+
static sljit_uw sljit_page_align = 0;
|
|
137
|
+
if (!sljit_page_align) {
|
|
138
|
+
GetSystemInfo(&si);
|
|
139
|
+
sljit_page_align = (sljit_uw)si.dwPageSize - 1;
|
|
140
|
+
}
|
|
141
|
+
return sljit_page_align;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
#else
|
|
145
|
+
|
|
146
|
+
#include <unistd.h>
|
|
147
|
+
|
|
148
|
+
static SLJIT_INLINE sljit_uw get_page_alignment(void) {
|
|
149
|
+
static sljit_uw sljit_page_align = 0;
|
|
150
|
+
|
|
151
|
+
sljit_sw align;
|
|
152
|
+
|
|
153
|
+
if (!sljit_page_align) {
|
|
154
|
+
#ifdef _SC_PAGESIZE
|
|
155
|
+
align = sysconf(_SC_PAGESIZE);
|
|
156
|
+
#else
|
|
157
|
+
align = getpagesize();
|
|
158
|
+
#endif
|
|
159
|
+
/* Should never happen. */
|
|
160
|
+
if (align < 0)
|
|
161
|
+
align = 4096;
|
|
162
|
+
sljit_page_align = (sljit_uw)align - 1;
|
|
163
|
+
}
|
|
164
|
+
return sljit_page_align;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
#endif /* _WIN32 */
|
|
168
|
+
|
|
169
|
+
#endif /* get_page_alignment() */
|
|
170
|
+
|
|
171
|
+
#if (defined SLJIT_UTIL_STACK && SLJIT_UTIL_STACK)
|
|
172
|
+
|
|
173
|
+
#if (defined SLJIT_UTIL_SIMPLE_STACK_ALLOCATION && SLJIT_UTIL_SIMPLE_STACK_ALLOCATION)
|
|
174
|
+
|
|
175
|
+
SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(sljit_uw start_size, sljit_uw max_size, void *allocator_data)
|
|
176
|
+
{
|
|
177
|
+
struct sljit_stack *stack;
|
|
178
|
+
void *ptr;
|
|
179
|
+
|
|
180
|
+
SLJIT_UNUSED_ARG(allocator_data);
|
|
181
|
+
|
|
182
|
+
if (start_size > max_size || start_size < 1)
|
|
183
|
+
return NULL;
|
|
184
|
+
|
|
185
|
+
stack = (struct sljit_stack*)SLJIT_MALLOC(sizeof(struct sljit_stack), allocator_data);
|
|
186
|
+
if (stack == NULL)
|
|
187
|
+
return NULL;
|
|
188
|
+
|
|
189
|
+
ptr = SLJIT_MALLOC(max_size, allocator_data);
|
|
190
|
+
if (ptr == NULL) {
|
|
191
|
+
SLJIT_FREE(stack, allocator_data);
|
|
192
|
+
return NULL;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
stack->min_start = (sljit_u8 *)ptr;
|
|
196
|
+
stack->end = stack->min_start + max_size;
|
|
197
|
+
stack->start = stack->end - start_size;
|
|
198
|
+
stack->top = stack->end;
|
|
199
|
+
return stack;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data)
|
|
203
|
+
{
|
|
204
|
+
SLJIT_UNUSED_ARG(allocator_data);
|
|
205
|
+
SLJIT_FREE((void*)stack->min_start, allocator_data);
|
|
206
|
+
SLJIT_FREE(stack, allocator_data);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_stack *stack, sljit_u8 *new_start)
|
|
210
|
+
{
|
|
211
|
+
if ((new_start < stack->min_start) || (new_start >= stack->end))
|
|
212
|
+
return NULL;
|
|
213
|
+
stack->start = new_start;
|
|
214
|
+
return new_start;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
#else /* !SLJIT_UTIL_SIMPLE_STACK_ALLOCATION */
|
|
218
|
+
|
|
219
|
+
#ifdef _WIN32
|
|
220
|
+
|
|
221
|
+
SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data)
|
|
222
|
+
{
|
|
223
|
+
SLJIT_UNUSED_ARG(allocator_data);
|
|
224
|
+
VirtualFree((void*)stack->min_start, 0, MEM_RELEASE);
|
|
225
|
+
SLJIT_FREE(stack, allocator_data);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
#else /* !_WIN32 */
|
|
229
|
+
|
|
230
|
+
SLJIT_API_FUNC_ATTRIBUTE void SLJIT_FUNC sljit_free_stack(struct sljit_stack *stack, void *allocator_data)
|
|
231
|
+
{
|
|
232
|
+
SLJIT_UNUSED_ARG(allocator_data);
|
|
233
|
+
munmap((void*)stack->min_start, (size_t)(stack->end - stack->min_start));
|
|
234
|
+
SLJIT_FREE(stack, allocator_data);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
#endif /* _WIN32 */
|
|
238
|
+
|
|
239
|
+
SLJIT_API_FUNC_ATTRIBUTE struct sljit_stack* SLJIT_FUNC sljit_allocate_stack(sljit_uw start_size, sljit_uw max_size, void *allocator_data)
|
|
240
|
+
{
|
|
241
|
+
struct sljit_stack *stack;
|
|
242
|
+
void *ptr;
|
|
243
|
+
sljit_uw page_align;
|
|
244
|
+
|
|
245
|
+
SLJIT_UNUSED_ARG(allocator_data);
|
|
246
|
+
|
|
247
|
+
if (start_size > max_size || start_size < 1)
|
|
248
|
+
return NULL;
|
|
249
|
+
|
|
250
|
+
stack = (struct sljit_stack*)SLJIT_MALLOC(sizeof(struct sljit_stack), allocator_data);
|
|
251
|
+
if (stack == NULL)
|
|
252
|
+
return NULL;
|
|
253
|
+
|
|
254
|
+
/* Align max_size. */
|
|
255
|
+
page_align = get_page_alignment();
|
|
256
|
+
max_size = (max_size + page_align) & ~page_align;
|
|
257
|
+
|
|
258
|
+
#ifdef _WIN32
|
|
259
|
+
ptr = VirtualAlloc(NULL, max_size, MEM_RESERVE, PAGE_READWRITE);
|
|
260
|
+
if (!ptr) {
|
|
261
|
+
SLJIT_FREE(stack, allocator_data);
|
|
262
|
+
return NULL;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
stack->min_start = (sljit_u8 *)ptr;
|
|
266
|
+
stack->end = stack->min_start + max_size;
|
|
267
|
+
stack->start = stack->end;
|
|
268
|
+
|
|
269
|
+
if (sljit_stack_resize(stack, stack->end - start_size) == NULL) {
|
|
270
|
+
sljit_free_stack(stack, allocator_data);
|
|
271
|
+
return NULL;
|
|
272
|
+
}
|
|
273
|
+
#else /* !_WIN32 */
|
|
274
|
+
#ifdef MAP_ANON
|
|
275
|
+
ptr = mmap(NULL, max_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
|
|
276
|
+
#else /* !MAP_ANON */
|
|
277
|
+
if (SLJIT_UNLIKELY((dev_zero < 0) && open_dev_zero())) {
|
|
278
|
+
SLJIT_FREE(stack, allocator_data);
|
|
279
|
+
return NULL;
|
|
280
|
+
}
|
|
281
|
+
ptr = mmap(NULL, max_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, dev_zero, 0);
|
|
282
|
+
#endif /* MAP_ANON */
|
|
283
|
+
if (ptr == MAP_FAILED) {
|
|
284
|
+
SLJIT_FREE(stack, allocator_data);
|
|
285
|
+
return NULL;
|
|
286
|
+
}
|
|
287
|
+
stack->min_start = (sljit_u8 *)ptr;
|
|
288
|
+
stack->end = stack->min_start + max_size;
|
|
289
|
+
stack->start = stack->end - start_size;
|
|
290
|
+
#endif /* _WIN32 */
|
|
291
|
+
|
|
292
|
+
stack->top = stack->end;
|
|
293
|
+
return stack;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_stack *stack, sljit_u8 *new_start)
|
|
297
|
+
{
|
|
298
|
+
#if defined _WIN32 || defined(POSIX_MADV_DONTNEED)
|
|
299
|
+
sljit_uw aligned_old_start;
|
|
300
|
+
sljit_uw aligned_new_start;
|
|
301
|
+
sljit_uw page_align;
|
|
302
|
+
#endif
|
|
303
|
+
|
|
304
|
+
if ((new_start < stack->min_start) || (new_start >= stack->end))
|
|
305
|
+
return NULL;
|
|
306
|
+
|
|
307
|
+
#ifdef _WIN32
|
|
308
|
+
page_align = get_page_alignment();
|
|
309
|
+
|
|
310
|
+
aligned_new_start = (sljit_uw)new_start & ~page_align;
|
|
311
|
+
aligned_old_start = ((sljit_uw)stack->start) & ~page_align;
|
|
312
|
+
if (aligned_new_start != aligned_old_start) {
|
|
313
|
+
if (aligned_new_start < aligned_old_start) {
|
|
314
|
+
if (!VirtualAlloc((void*)aligned_new_start, aligned_old_start - aligned_new_start, MEM_COMMIT, PAGE_READWRITE))
|
|
315
|
+
return NULL;
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
if (!VirtualFree((void*)aligned_old_start, aligned_new_start - aligned_old_start, MEM_DECOMMIT))
|
|
319
|
+
return NULL;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
#elif defined(POSIX_MADV_DONTNEED)
|
|
323
|
+
if (stack->start < new_start) {
|
|
324
|
+
page_align = get_page_alignment();
|
|
325
|
+
|
|
326
|
+
aligned_new_start = (sljit_uw)new_start & ~page_align;
|
|
327
|
+
aligned_old_start = ((sljit_uw)stack->start) & ~page_align;
|
|
328
|
+
|
|
329
|
+
if (aligned_new_start > aligned_old_start) {
|
|
330
|
+
posix_madvise((void*)aligned_old_start, aligned_new_start - aligned_old_start, POSIX_MADV_DONTNEED);
|
|
331
|
+
#ifdef MADV_FREE
|
|
332
|
+
madvise((void*)aligned_old_start, aligned_new_start - aligned_old_start, MADV_FREE);
|
|
333
|
+
#endif /* MADV_FREE */
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
#endif /* _WIN32 */
|
|
337
|
+
|
|
338
|
+
stack->start = new_start;
|
|
339
|
+
return new_start;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
#endif /* SLJIT_UTIL_SIMPLE_STACK_ALLOCATION */
|
|
343
|
+
|
|
344
|
+
#endif /* SLJIT_UTIL_STACK */
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# PCRE2 8-bit build sources.
|
|
2
|
+
#
|
|
3
|
+
# Canonical list for libpcre2-8, taken from PCRE2's upstream
|
|
4
|
+
# NON-AUTOTOOLS-BUILD documentation. tpyc/build/pcre2.py reads this file
|
|
5
|
+
# to drive compilation when PCRE2 is built in bundled mode. Keep in
|
|
6
|
+
# sync with upstream when bumping the vendored PCRE2 version.
|
|
7
|
+
#
|
|
8
|
+
# Files in src/ NOT listed here and why they're excluded:
|
|
9
|
+
# * Standalone tools with their own main():
|
|
10
|
+
# pcre2grep.c, pcre2test.c, pcre2demo.c
|
|
11
|
+
# * Test harnesses:
|
|
12
|
+
# pcre2_jit_test.c, pcre2posix_test.c, pcre2_fuzzsupport.c
|
|
13
|
+
# * Build helpers (we ship the pre-generated output):
|
|
14
|
+
# pcre2_dftables.c (generates pcre2_chartables.c at build time)
|
|
15
|
+
# * Separate library (POSIX wrapper, different .a):
|
|
16
|
+
# pcre2posix.c
|
|
17
|
+
# * Files meant to be `#include`d from other .c files, not compiled
|
|
18
|
+
# directly -- compiling them would produce duplicate symbols:
|
|
19
|
+
# pcre2_printint.c (#include'd by pcre2test, pcre2_dftables)
|
|
20
|
+
# pcre2_jit_match.c (#include'd by pcre2_jit_compile.c)
|
|
21
|
+
# pcre2_jit_misc.c (#include'd by pcre2_jit_compile.c)
|
|
22
|
+
# pcre2_ucptables.c (#include'd by pcre2_tables.c)
|
|
23
|
+
#
|
|
24
|
+
# Format: one filename per line, relative to the vendored `src/` dir.
|
|
25
|
+
# Blank lines and `#` comments ignored.
|
|
26
|
+
|
|
27
|
+
pcre2_auto_possess.c
|
|
28
|
+
pcre2_chartables.c
|
|
29
|
+
pcre2_chkdint.c
|
|
30
|
+
pcre2_compile.c
|
|
31
|
+
pcre2_config.c
|
|
32
|
+
pcre2_context.c
|
|
33
|
+
pcre2_convert.c
|
|
34
|
+
pcre2_dfa_match.c
|
|
35
|
+
pcre2_error.c
|
|
36
|
+
pcre2_extuni.c
|
|
37
|
+
pcre2_find_bracket.c
|
|
38
|
+
pcre2_jit_compile.c
|
|
39
|
+
pcre2_maketables.c
|
|
40
|
+
pcre2_match.c
|
|
41
|
+
pcre2_match_data.c
|
|
42
|
+
pcre2_newline.c
|
|
43
|
+
pcre2_ord2utf.c
|
|
44
|
+
pcre2_pattern_info.c
|
|
45
|
+
pcre2_script_run.c
|
|
46
|
+
pcre2_serialize.c
|
|
47
|
+
pcre2_string_utils.c
|
|
48
|
+
pcre2_study.c
|
|
49
|
+
pcre2_substitute.c
|
|
50
|
+
pcre2_substring.c
|
|
51
|
+
pcre2_tables.c
|
|
52
|
+
pcre2_ucd.c
|
|
53
|
+
pcre2_valid_utf.c
|
|
54
|
+
pcre2_xclass.c
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pcre2",
|
|
3
|
+
"version": "10.44",
|
|
4
|
+
"url": "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.44/pcre2-10.44.tar.gz",
|
|
5
|
+
"sha256": "86b9cb0aa3bcb7994faa88018292bc704cdbb708e785f7c74352ff6ea7d3175b",
|
|
6
|
+
"vendored_at": "2026-04-20T00:00:00+00:00"
|
|
7
|
+
}
|
tpyc/build/__init__.py
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""Build-side helpers for tpyc: third-party dependency resolution, etc.
|
|
2
|
+
|
|
3
|
+
This package hosts modules that deal with the boundary between generated
|
|
4
|
+
C++ and external build inputs (third-party libraries, bundled sources,
|
|
5
|
+
CMake snippet emission). Kept separate from `tpyc/compiler.py` so the
|
|
6
|
+
build concerns don't accumulate there.
|
|
7
|
+
"""
|
tpyc/build/pcre2.py
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"""PCRE2-specific build wiring. Registered in
|
|
2
|
+
``tpyc/build/third_party.py::_FACTORIES``.
|
|
3
|
+
|
|
4
|
+
PCRE2 ships a "non-autotools" build path: rename a few ``.generic`` /
|
|
5
|
+
``.dist`` template files, then compile the .c files with
|
|
6
|
+
``-DPCRE2_CODE_UNIT_WIDTH=8`` and ``-DHAVE_CONFIG_H``. We pre-materialize
|
|
7
|
+
the templates at vendoring time (``scripts/vendor_pcre2.py``), so all
|
|
8
|
+
the direct-compile path does here is:
|
|
9
|
+
|
|
10
|
+
* enumerate the .c files (from the sidecar manifest
|
|
11
|
+
``runtime/cpp/third_party/pcre2.sources.txt``, next to the vendored
|
|
12
|
+
tree to keep the upstream tree pristine);
|
|
13
|
+
* emit the fixed -I / -D flags;
|
|
14
|
+
* point dependents at the include dir that holds pcre2.h.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
from .third_party import ThirdPartyLib, read_source_manifest
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Manifest lives next to the vendored tree, not inside it, so the
|
|
25
|
+
# upstream tree stays pristine (same reason pcre2.vendor.json lives
|
|
26
|
+
# outside). Filename mirrors the vendor.json sidecar.
|
|
27
|
+
_SOURCE_MANIFEST = "pcre2.sources.txt"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _source_files(lib: ThirdPartyLib) -> list[Path]:
|
|
31
|
+
"""Return the list of PCRE2 .c files to compile into libpcre2-8.
|
|
32
|
+
|
|
33
|
+
Reads the sidecar manifest next to the vendored source tree rather
|
|
34
|
+
than globbing -- globbing would sweep in files that aren't meant to
|
|
35
|
+
be compiled directly (standalone tools, test harnesses, .c files
|
|
36
|
+
that exist only to be #included by others). The manifest is the
|
|
37
|
+
canonical source list from upstream PCRE2's NON-AUTOTOOLS-BUILD doc.
|
|
38
|
+
"""
|
|
39
|
+
if lib.bundled_source_dir is None:
|
|
40
|
+
raise RuntimeError(f"{lib.name}: no bundled source dir configured")
|
|
41
|
+
src_dir = lib.bundled_source_dir / "src"
|
|
42
|
+
if not src_dir.is_dir():
|
|
43
|
+
raise FileNotFoundError(
|
|
44
|
+
f"{lib.name}: bundled src/ not found at {src_dir}"
|
|
45
|
+
)
|
|
46
|
+
manifest = lib.bundled_source_dir.parent / _SOURCE_MANIFEST
|
|
47
|
+
if not manifest.is_file():
|
|
48
|
+
raise FileNotFoundError(
|
|
49
|
+
f"{lib.name}: source manifest not found at {manifest}"
|
|
50
|
+
)
|
|
51
|
+
paths: list[Path] = []
|
|
52
|
+
for name in read_source_manifest(manifest):
|
|
53
|
+
p = src_dir / name
|
|
54
|
+
if not p.is_file():
|
|
55
|
+
raise FileNotFoundError(
|
|
56
|
+
f"{lib.name}: expected source file missing: {p} "
|
|
57
|
+
f"(listed in {manifest})"
|
|
58
|
+
)
|
|
59
|
+
paths.append(p)
|
|
60
|
+
return paths
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _compile_flags(lib: ThirdPartyLib) -> list[str]:
|
|
64
|
+
"""C-compiler flags needed to build a PCRE2 .c file.
|
|
65
|
+
|
|
66
|
+
-I<src_dir> is required so PCRE2's internal headers (pcre2_internal.h,
|
|
67
|
+
pcre2.h, config.h) resolve. -DHAVE_CONFIG_H tells PCRE2 to include
|
|
68
|
+
config.h (which we materialized from config.h.generic at vendoring
|
|
69
|
+
time with SUPPORT_PCRE2_8 / SUPPORT_JIT / SUPPORT_UNICODE enabled).
|
|
70
|
+
"""
|
|
71
|
+
if lib.bundled_source_dir is None:
|
|
72
|
+
raise RuntimeError(f"{lib.name}: no bundled source dir configured")
|
|
73
|
+
return [
|
|
74
|
+
"-DHAVE_CONFIG_H",
|
|
75
|
+
"-DPCRE2_CODE_UNIT_WIDTH=8",
|
|
76
|
+
f"-I{lib.bundled_source_dir / 'src'}",
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _user_include_dir(lib: ThirdPartyLib) -> Path:
|
|
81
|
+
"""Path containing pcre2.h for user code to ``#include``.
|
|
82
|
+
Same dir as the source files; PCRE2 keeps everything in ``src/``."""
|
|
83
|
+
if lib.bundled_source_dir is None:
|
|
84
|
+
raise RuntimeError(f"{lib.name}: no bundled source dir configured")
|
|
85
|
+
return lib.bundled_source_dir / "src"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def factory(runtime_cpp_dir: Path) -> ThirdPartyLib:
|
|
89
|
+
"""Build the PCRE2 ``ThirdPartyLib`` declaration.
|
|
90
|
+
|
|
91
|
+
Vendored build options picked for TPy's use:
|
|
92
|
+
* 8-bit only -- Python str maps to UTF-8 bytes; 16/32-bit unused.
|
|
93
|
+
* JIT on -- ~10x match-time speedup, widely supported.
|
|
94
|
+
* Tests + pcre2grep off -- we validate via our own test cases, and
|
|
95
|
+
the grep CLI utility doesn't belong in a runtime build.
|
|
96
|
+
"""
|
|
97
|
+
return ThirdPartyLib(
|
|
98
|
+
name="pcre2",
|
|
99
|
+
cli_flag="--pcre2",
|
|
100
|
+
cmake_var="TPY_PCRE2",
|
|
101
|
+
default_mode="bundled",
|
|
102
|
+
min_version="10.35",
|
|
103
|
+
find_package_name="PCRE2",
|
|
104
|
+
find_package_components=("8BIT",),
|
|
105
|
+
find_package_target="PCRE2::8BIT",
|
|
106
|
+
pkgconfig_name="libpcre2-8",
|
|
107
|
+
system_link_flags=("-lpcre2-8",),
|
|
108
|
+
bundled_source_dir=runtime_cpp_dir / "third_party" / "pcre2",
|
|
109
|
+
bundled_cmake_vars={
|
|
110
|
+
"PCRE2_BUILD_PCRE2_8": "ON",
|
|
111
|
+
"PCRE2_BUILD_PCRE2_16": "OFF",
|
|
112
|
+
"PCRE2_BUILD_PCRE2_32": "OFF",
|
|
113
|
+
"PCRE2_SUPPORT_JIT": "ON",
|
|
114
|
+
"PCRE2_BUILD_TESTS": "OFF",
|
|
115
|
+
"PCRE2_BUILD_PCRE2GREP": "OFF",
|
|
116
|
+
},
|
|
117
|
+
bundled_static_target="pcre2-8-static",
|
|
118
|
+
license_file="LICENCE",
|
|
119
|
+
bundled_source_files=_source_files,
|
|
120
|
+
bundled_compile_flags=_compile_flags,
|
|
121
|
+
bundled_user_include_dir=_user_include_dir,
|
|
122
|
+
)
|