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/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitProtExecAllocatorNetBSD.c
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
#define SLJIT_HAS_CHUNK_HEADER
|
|
28
|
+
#define SLJIT_HAS_EXECUTABLE_OFFSET
|
|
29
|
+
|
|
30
|
+
struct sljit_chunk_header {
|
|
31
|
+
void *executable;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* MAP_REMAPDUP is a NetBSD extension available sinde 8.0, make sure to
|
|
36
|
+
* adjust your feature macros (ex: -D_NETBSD_SOURCE) as needed
|
|
37
|
+
*/
|
|
38
|
+
static SLJIT_INLINE struct sljit_chunk_header* alloc_chunk(sljit_uw size)
|
|
39
|
+
{
|
|
40
|
+
struct sljit_chunk_header *retval;
|
|
41
|
+
|
|
42
|
+
retval = (struct sljit_chunk_header *)mmap(NULL, size,
|
|
43
|
+
PROT_READ | PROT_WRITE | PROT_MPROTECT(PROT_EXEC),
|
|
44
|
+
MAP_ANON | MAP_SHARED, -1, 0);
|
|
45
|
+
|
|
46
|
+
if (retval == MAP_FAILED)
|
|
47
|
+
return NULL;
|
|
48
|
+
|
|
49
|
+
retval->executable = mremap(retval, size, NULL, size, MAP_REMAPDUP);
|
|
50
|
+
if (retval->executable == MAP_FAILED) {
|
|
51
|
+
munmap((void *)retval, size);
|
|
52
|
+
return NULL;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (mprotect(retval->executable, size, PROT_READ | PROT_EXEC) == -1) {
|
|
56
|
+
munmap(retval->executable, size);
|
|
57
|
+
munmap((void *)retval, size);
|
|
58
|
+
return NULL;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return retval;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
|
|
65
|
+
{
|
|
66
|
+
struct sljit_chunk_header *header = ((struct sljit_chunk_header *)chunk) - 1;
|
|
67
|
+
|
|
68
|
+
munmap(header->executable, size);
|
|
69
|
+
munmap((void *)header, size);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#include "sljitExecAllocatorCore.c"
|
tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitProtExecAllocatorPosix.c
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
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
|
+
#define SLJIT_HAS_CHUNK_HEADER
|
|
28
|
+
#define SLJIT_HAS_EXECUTABLE_OFFSET
|
|
29
|
+
|
|
30
|
+
struct sljit_chunk_header {
|
|
31
|
+
void *executable;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
#include <sys/stat.h>
|
|
35
|
+
#include <fcntl.h>
|
|
36
|
+
#include <stdio.h>
|
|
37
|
+
#include <string.h>
|
|
38
|
+
|
|
39
|
+
#ifndef O_NOATIME
|
|
40
|
+
#define O_NOATIME 0
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
/* this is a linux extension available since kernel 3.11 */
|
|
44
|
+
#ifndef O_TMPFILE
|
|
45
|
+
#define O_TMPFILE 0x404000
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
#ifndef _GNU_SOURCE
|
|
49
|
+
char *secure_getenv(const char *name);
|
|
50
|
+
int mkostemp(char *template, int flags);
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
static SLJIT_INLINE int create_tempfile(void)
|
|
54
|
+
{
|
|
55
|
+
int fd;
|
|
56
|
+
char tmp_name[256];
|
|
57
|
+
size_t tmp_name_len = 0;
|
|
58
|
+
char *dir;
|
|
59
|
+
struct stat st;
|
|
60
|
+
#if defined(SLJIT_SINGLE_THREADED) && SLJIT_SINGLE_THREADED
|
|
61
|
+
mode_t mode;
|
|
62
|
+
#endif
|
|
63
|
+
|
|
64
|
+
#ifdef HAVE_MEMFD_CREATE
|
|
65
|
+
/* this is a GNU extension, make sure to use -D_GNU_SOURCE */
|
|
66
|
+
fd = memfd_create("sljit", MFD_CLOEXEC);
|
|
67
|
+
if (fd != -1) {
|
|
68
|
+
fchmod(fd, 0);
|
|
69
|
+
return fd;
|
|
70
|
+
}
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
dir = secure_getenv("TMPDIR");
|
|
74
|
+
|
|
75
|
+
if (dir) {
|
|
76
|
+
size_t len = strlen(dir);
|
|
77
|
+
if (len > 0 && len < sizeof(tmp_name)) {
|
|
78
|
+
if ((stat(dir, &st) == 0) && S_ISDIR(st.st_mode)) {
|
|
79
|
+
memcpy(tmp_name, dir, len + 1);
|
|
80
|
+
tmp_name_len = len;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
#ifdef P_tmpdir
|
|
86
|
+
if (!tmp_name_len) {
|
|
87
|
+
tmp_name_len = strlen(P_tmpdir);
|
|
88
|
+
if (tmp_name_len > 0 && tmp_name_len < sizeof(tmp_name))
|
|
89
|
+
strcpy(tmp_name, P_tmpdir);
|
|
90
|
+
}
|
|
91
|
+
#endif
|
|
92
|
+
if (!tmp_name_len) {
|
|
93
|
+
strcpy(tmp_name, "/tmp");
|
|
94
|
+
tmp_name_len = 4;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
SLJIT_ASSERT(tmp_name_len > 0 && tmp_name_len < sizeof(tmp_name));
|
|
98
|
+
|
|
99
|
+
if (tmp_name_len > 1 && tmp_name[tmp_name_len - 1] == '/')
|
|
100
|
+
tmp_name[--tmp_name_len] = '\0';
|
|
101
|
+
|
|
102
|
+
fd = open(tmp_name, O_TMPFILE | O_EXCL | O_RDWR | O_NOATIME | O_CLOEXEC, 0);
|
|
103
|
+
if (fd != -1)
|
|
104
|
+
return fd;
|
|
105
|
+
|
|
106
|
+
if (tmp_name_len >= sizeof(tmp_name) - 7)
|
|
107
|
+
return -1;
|
|
108
|
+
|
|
109
|
+
strcpy(tmp_name + tmp_name_len, "/XXXXXX");
|
|
110
|
+
#if defined(SLJIT_SINGLE_THREADED) && SLJIT_SINGLE_THREADED
|
|
111
|
+
mode = umask(0777);
|
|
112
|
+
#endif
|
|
113
|
+
fd = mkostemp(tmp_name, O_CLOEXEC | O_NOATIME);
|
|
114
|
+
#if defined(SLJIT_SINGLE_THREADED) && SLJIT_SINGLE_THREADED
|
|
115
|
+
umask(mode);
|
|
116
|
+
#else
|
|
117
|
+
fchmod(fd, 0);
|
|
118
|
+
#endif
|
|
119
|
+
|
|
120
|
+
if (fd == -1)
|
|
121
|
+
return -1;
|
|
122
|
+
|
|
123
|
+
if (unlink(tmp_name)) {
|
|
124
|
+
close(fd);
|
|
125
|
+
return -1;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return fd;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static SLJIT_INLINE struct sljit_chunk_header* alloc_chunk(sljit_uw size)
|
|
132
|
+
{
|
|
133
|
+
struct sljit_chunk_header *retval;
|
|
134
|
+
int fd;
|
|
135
|
+
|
|
136
|
+
fd = create_tempfile();
|
|
137
|
+
if (fd == -1)
|
|
138
|
+
return NULL;
|
|
139
|
+
|
|
140
|
+
if (ftruncate(fd, (off_t)size)) {
|
|
141
|
+
close(fd);
|
|
142
|
+
return NULL;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
retval = (struct sljit_chunk_header *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
|
146
|
+
|
|
147
|
+
if (retval == MAP_FAILED) {
|
|
148
|
+
close(fd);
|
|
149
|
+
return NULL;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
retval->executable = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0);
|
|
153
|
+
|
|
154
|
+
if (retval->executable == MAP_FAILED) {
|
|
155
|
+
munmap((void *)retval, size);
|
|
156
|
+
close(fd);
|
|
157
|
+
return NULL;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
close(fd);
|
|
161
|
+
return retval;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
|
|
165
|
+
{
|
|
166
|
+
struct sljit_chunk_header *header = ((struct sljit_chunk_header *)chunk) - 1;
|
|
167
|
+
|
|
168
|
+
munmap(header->executable, size);
|
|
169
|
+
munmap((void *)header, size);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
#include "sljitExecAllocatorCore.c"
|
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
This file contains a simple W^X executable memory allocator
|
|
29
|
+
|
|
30
|
+
In *NIX, MAP_ANON is required (that is considered a feature) so make
|
|
31
|
+
sure to set the right availability macros for your system or the code
|
|
32
|
+
will fail to build.
|
|
33
|
+
|
|
34
|
+
If your system doesn't support mapping of anonymous pages (ex: IRIX) it
|
|
35
|
+
is also likely that it doesn't need this allocator and should be using
|
|
36
|
+
the standard one instead.
|
|
37
|
+
|
|
38
|
+
It allocates a separate map for each code block and may waste a lot of
|
|
39
|
+
memory, because whatever was requested, will be rounded up to the page
|
|
40
|
+
size (minimum 4KB, but could be even bigger).
|
|
41
|
+
|
|
42
|
+
It changes the page permissions (RW <-> RX) as needed and therefore, if you
|
|
43
|
+
will be updating the code after it has been generated, need to make sure to
|
|
44
|
+
block any concurrent execution, or could result in a SIGBUS, that could
|
|
45
|
+
even manifest itself at a different address than the one that was being
|
|
46
|
+
modified.
|
|
47
|
+
|
|
48
|
+
Only use if you are unable to use the regular allocator because of security
|
|
49
|
+
restrictions and adding exceptions to your application or the system are
|
|
50
|
+
not possible.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
#include <sys/types.h>
|
|
54
|
+
#include <sys/mman.h>
|
|
55
|
+
|
|
56
|
+
#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) \
|
|
57
|
+
sljit_update_wx_flags((from), (to), (enable_exec))
|
|
58
|
+
|
|
59
|
+
#if !(defined SLJIT_SINGLE_THREADED && SLJIT_SINGLE_THREADED)
|
|
60
|
+
#include <pthread.h>
|
|
61
|
+
#define SLJIT_SE_LOCK() pthread_mutex_lock(&se_lock)
|
|
62
|
+
#define SLJIT_SE_UNLOCK() pthread_mutex_unlock(&se_lock)
|
|
63
|
+
#else
|
|
64
|
+
#define SLJIT_SE_LOCK()
|
|
65
|
+
#define SLJIT_SE_UNLOCK()
|
|
66
|
+
#endif /* !SLJIT_SINGLE_THREADED */
|
|
67
|
+
|
|
68
|
+
#define SLJIT_WX_IS_BLOCK(ptr, size) generic_check_is_wx_block(ptr, size)
|
|
69
|
+
|
|
70
|
+
static SLJIT_INLINE int generic_check_is_wx_block(void *ptr, sljit_uw size)
|
|
71
|
+
{
|
|
72
|
+
if (SLJIT_LIKELY(!mprotect(ptr, size, PROT_EXEC)))
|
|
73
|
+
return !!mprotect(ptr, size, PROT_READ | PROT_WRITE);
|
|
74
|
+
|
|
75
|
+
return 1;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
|
|
79
|
+
{
|
|
80
|
+
#if !(defined SLJIT_SINGLE_THREADED && SLJIT_SINGLE_THREADED)
|
|
81
|
+
static pthread_mutex_t se_lock = PTHREAD_MUTEX_INITIALIZER;
|
|
82
|
+
#endif
|
|
83
|
+
static int wx_block = -1;
|
|
84
|
+
int prot = PROT_READ | PROT_WRITE;
|
|
85
|
+
sljit_uw* ptr;
|
|
86
|
+
|
|
87
|
+
if (SLJIT_UNLIKELY(wx_block > 0))
|
|
88
|
+
return NULL;
|
|
89
|
+
|
|
90
|
+
#ifdef PROT_MAX
|
|
91
|
+
prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC);
|
|
92
|
+
#endif
|
|
93
|
+
|
|
94
|
+
size += sizeof(sljit_uw);
|
|
95
|
+
ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
|
|
96
|
+
|
|
97
|
+
if (ptr == MAP_FAILED)
|
|
98
|
+
return NULL;
|
|
99
|
+
|
|
100
|
+
if (SLJIT_UNLIKELY(wx_block < 0)) {
|
|
101
|
+
SLJIT_SE_LOCK();
|
|
102
|
+
wx_block = SLJIT_WX_IS_BLOCK(ptr, size);
|
|
103
|
+
SLJIT_SE_UNLOCK();
|
|
104
|
+
if (SLJIT_UNLIKELY(wx_block)) {
|
|
105
|
+
munmap((void *)ptr, size);
|
|
106
|
+
return NULL;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
*ptr++ = size;
|
|
111
|
+
return ptr;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
#undef SLJIT_SE_UNLOCK
|
|
115
|
+
#undef SLJIT_SE_LOCK
|
|
116
|
+
|
|
117
|
+
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
|
|
118
|
+
{
|
|
119
|
+
sljit_uw *start_ptr = ((sljit_uw*)ptr) - 1;
|
|
120
|
+
munmap((void*)start_ptr, *start_ptr);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
static void sljit_update_wx_flags(void *from, void *to, int enable_exec)
|
|
124
|
+
{
|
|
125
|
+
sljit_uw page_mask = (sljit_uw)get_page_alignment();
|
|
126
|
+
sljit_uw start = (sljit_uw)from;
|
|
127
|
+
sljit_uw end = (sljit_uw)to;
|
|
128
|
+
int prot = PROT_READ | (enable_exec ? PROT_EXEC : PROT_WRITE);
|
|
129
|
+
|
|
130
|
+
SLJIT_ASSERT(start < end);
|
|
131
|
+
|
|
132
|
+
start &= ~page_mask;
|
|
133
|
+
end = (end + page_mask) & ~page_mask;
|
|
134
|
+
|
|
135
|
+
mprotect((void*)start, end - start, prot);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
|
|
139
|
+
{
|
|
140
|
+
/* This allocator does not keep unused memory for future allocations. */
|
|
141
|
+
}
|
tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitWXExecAllocatorWindows.c
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
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
|
+
This file contains a simple W^X executable memory allocator
|
|
29
|
+
|
|
30
|
+
In *NIX, MAP_ANON is required (that is considered a feature) so make
|
|
31
|
+
sure to set the right availability macros for your system or the code
|
|
32
|
+
will fail to build.
|
|
33
|
+
|
|
34
|
+
If your system doesn't support mapping of anonymous pages (ex: IRIX) it
|
|
35
|
+
is also likely that it doesn't need this allocator and should be using
|
|
36
|
+
the standard one instead.
|
|
37
|
+
|
|
38
|
+
It allocates a separate map for each code block and may waste a lot of
|
|
39
|
+
memory, because whatever was requested, will be rounded up to the page
|
|
40
|
+
size (minimum 4KB, but could be even bigger).
|
|
41
|
+
|
|
42
|
+
It changes the page permissions (RW <-> RX) as needed and therefore, if you
|
|
43
|
+
will be updating the code after it has been generated, need to make sure to
|
|
44
|
+
block any concurrent execution, or could result in a SIGBUS, that could
|
|
45
|
+
even manifest itself at a different address than the one that was being
|
|
46
|
+
modified.
|
|
47
|
+
|
|
48
|
+
Only use if you are unable to use the regular allocator because of security
|
|
49
|
+
restrictions and adding exceptions to your application or the system are
|
|
50
|
+
not possible.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) \
|
|
54
|
+
sljit_update_wx_flags((from), (to), (enable_exec))
|
|
55
|
+
|
|
56
|
+
SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
|
|
57
|
+
{
|
|
58
|
+
sljit_uw *ptr;
|
|
59
|
+
|
|
60
|
+
size += sizeof(sljit_uw);
|
|
61
|
+
ptr = (sljit_uw*)VirtualAlloc(NULL, size,
|
|
62
|
+
MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
|
|
63
|
+
|
|
64
|
+
if (!ptr)
|
|
65
|
+
return NULL;
|
|
66
|
+
|
|
67
|
+
*ptr++ = size;
|
|
68
|
+
|
|
69
|
+
return ptr;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
|
|
73
|
+
{
|
|
74
|
+
sljit_uw start = (sljit_uw)ptr - sizeof(sljit_uw);
|
|
75
|
+
#if defined(SLJIT_DEBUG) && SLJIT_DEBUG
|
|
76
|
+
sljit_uw page_mask = (sljit_uw)get_page_alignment();
|
|
77
|
+
|
|
78
|
+
SLJIT_ASSERT(!(start & page_mask));
|
|
79
|
+
#endif
|
|
80
|
+
VirtualFree((void*)start, 0, MEM_RELEASE);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static void sljit_update_wx_flags(void *from, void *to, sljit_s32 enable_exec)
|
|
84
|
+
{
|
|
85
|
+
DWORD oldprot;
|
|
86
|
+
sljit_uw page_mask = (sljit_uw)get_page_alignment();
|
|
87
|
+
sljit_uw start = (sljit_uw)from;
|
|
88
|
+
sljit_uw end = (sljit_uw)to;
|
|
89
|
+
DWORD prot = enable_exec ? PAGE_EXECUTE : PAGE_READWRITE;
|
|
90
|
+
|
|
91
|
+
SLJIT_ASSERT(start < end);
|
|
92
|
+
|
|
93
|
+
start &= ~page_mask;
|
|
94
|
+
end = (end + page_mask) & ~page_mask;
|
|
95
|
+
|
|
96
|
+
VirtualProtect((void*)start, end - start, prot, &oldprot);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
|
|
100
|
+
{
|
|
101
|
+
/* This allocator does not keep unused memory for future allocations. */
|
|
102
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
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
|
+
#ifndef SLJIT_CONFIG_H_
|
|
28
|
+
#define SLJIT_CONFIG_H_
|
|
29
|
+
|
|
30
|
+
#ifdef __cplusplus
|
|
31
|
+
extern "C" {
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
This file contains the basic configuration options for the SLJIT compiler
|
|
36
|
+
and their default values. These options can be overridden in the
|
|
37
|
+
sljitConfigPre.h header file when SLJIT_HAVE_CONFIG_PRE is set to a
|
|
38
|
+
non-zero value.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/* --------------------------------------------------------------------- */
|
|
42
|
+
/* Utilities */
|
|
43
|
+
/* --------------------------------------------------------------------- */
|
|
44
|
+
|
|
45
|
+
/* Implements a stack like data structure (by using mmap / VirtualAlloc */
|
|
46
|
+
/* or a custom allocator). */
|
|
47
|
+
#ifndef SLJIT_UTIL_STACK
|
|
48
|
+
/* Enabled by default */
|
|
49
|
+
#define SLJIT_UTIL_STACK 1
|
|
50
|
+
#endif
|
|
51
|
+
|
|
52
|
+
/* Uses user provided allocator to allocate the stack (see SLJIT_UTIL_STACK) */
|
|
53
|
+
#ifndef SLJIT_UTIL_SIMPLE_STACK_ALLOCATION
|
|
54
|
+
/* Disabled by default */
|
|
55
|
+
#define SLJIT_UTIL_SIMPLE_STACK_ALLOCATION 0
|
|
56
|
+
#endif
|
|
57
|
+
|
|
58
|
+
/* Single threaded application. Does not require any locks. */
|
|
59
|
+
#ifndef SLJIT_SINGLE_THREADED
|
|
60
|
+
/* Disabled by default. */
|
|
61
|
+
#define SLJIT_SINGLE_THREADED 0
|
|
62
|
+
#endif
|
|
63
|
+
|
|
64
|
+
/* --------------------------------------------------------------------- */
|
|
65
|
+
/* Configuration */
|
|
66
|
+
/* --------------------------------------------------------------------- */
|
|
67
|
+
|
|
68
|
+
/* If SLJIT_STD_MACROS_DEFINED is not defined, the application should
|
|
69
|
+
define SLJIT_MALLOC, SLJIT_FREE, SLJIT_MEMCPY, and NULL. */
|
|
70
|
+
#ifndef SLJIT_STD_MACROS_DEFINED
|
|
71
|
+
/* Disabled by default. */
|
|
72
|
+
#define SLJIT_STD_MACROS_DEFINED 0
|
|
73
|
+
#endif
|
|
74
|
+
|
|
75
|
+
/* Executable code allocation:
|
|
76
|
+
If SLJIT_EXECUTABLE_ALLOCATOR is not defined, the application should
|
|
77
|
+
define SLJIT_MALLOC_EXEC and SLJIT_FREE_EXEC.
|
|
78
|
+
Optionally, depending on the implementation used for the allocator,
|
|
79
|
+
SLJIT_EXEC_OFFSET and SLJIT_UPDATE_WX_FLAGS might also be needed. */
|
|
80
|
+
#ifndef SLJIT_EXECUTABLE_ALLOCATOR
|
|
81
|
+
/* Enabled by default. */
|
|
82
|
+
#define SLJIT_EXECUTABLE_ALLOCATOR 1
|
|
83
|
+
|
|
84
|
+
/* When SLJIT_PROT_EXECUTABLE_ALLOCATOR is enabled SLJIT uses
|
|
85
|
+
an allocator which does not set writable and executable
|
|
86
|
+
permission flags at the same time.
|
|
87
|
+
Instead, it creates a shared memory segment (usually backed by a file)
|
|
88
|
+
and maps it twice, with different permissions, depending on the use
|
|
89
|
+
case.
|
|
90
|
+
The trade-off is increased use of virtual memory, incompatibility with
|
|
91
|
+
fork(), and some possible additional security risks by the use of
|
|
92
|
+
publicly accessible files for the generated code. */
|
|
93
|
+
#ifndef SLJIT_PROT_EXECUTABLE_ALLOCATOR
|
|
94
|
+
/* Disabled by default. */
|
|
95
|
+
#define SLJIT_PROT_EXECUTABLE_ALLOCATOR 0
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
/* When SLJIT_WX_EXECUTABLE_ALLOCATOR is enabled SLJIT uses an
|
|
99
|
+
allocator which does not set writable and executable permission
|
|
100
|
+
flags at the same time.
|
|
101
|
+
Instead, it creates a new independent map on each invocation and
|
|
102
|
+
switches permissions at the underlying pages as needed.
|
|
103
|
+
The trade-off is increased memory use and degraded performance. */
|
|
104
|
+
#ifndef SLJIT_WX_EXECUTABLE_ALLOCATOR
|
|
105
|
+
/* Disabled by default. */
|
|
106
|
+
#define SLJIT_WX_EXECUTABLE_ALLOCATOR 0
|
|
107
|
+
#endif
|
|
108
|
+
|
|
109
|
+
#endif /* !SLJIT_EXECUTABLE_ALLOCATOR */
|
|
110
|
+
|
|
111
|
+
/* Return with error when an invalid argument is passed. */
|
|
112
|
+
#ifndef SLJIT_ARGUMENT_CHECKS
|
|
113
|
+
/* Disabled by default */
|
|
114
|
+
#define SLJIT_ARGUMENT_CHECKS 0
|
|
115
|
+
#endif
|
|
116
|
+
|
|
117
|
+
/* Debug checks (assertions, etc.). */
|
|
118
|
+
#ifndef SLJIT_DEBUG
|
|
119
|
+
/* Enabled by default */
|
|
120
|
+
#define SLJIT_DEBUG 1
|
|
121
|
+
#endif
|
|
122
|
+
|
|
123
|
+
/* Verbose operations. */
|
|
124
|
+
#ifndef SLJIT_VERBOSE
|
|
125
|
+
/* Enabled by default */
|
|
126
|
+
#define SLJIT_VERBOSE 1
|
|
127
|
+
#endif
|
|
128
|
+
|
|
129
|
+
/*
|
|
130
|
+
SLJIT_IS_FPU_AVAILABLE
|
|
131
|
+
The availability of the FPU can be controlled by SLJIT_IS_FPU_AVAILABLE.
|
|
132
|
+
zero value - FPU is NOT present.
|
|
133
|
+
nonzero value - FPU is present.
|
|
134
|
+
*/
|
|
135
|
+
|
|
136
|
+
/* For further configurations, see the beginning of sljitConfigInternal.h */
|
|
137
|
+
|
|
138
|
+
#ifdef __cplusplus
|
|
139
|
+
} /* extern "C" */
|
|
140
|
+
#endif
|
|
141
|
+
|
|
142
|
+
#endif /* SLJIT_CONFIG_H_ */
|