pytron-kit 0.3.12__py3-none-macosx_11_0_universal2.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.
- pytron/__init__.py +112 -0
- pytron/application.py +562 -0
- pytron/apputils/__init__.py +0 -0
- pytron/apputils/chrome_ipc.py +203 -0
- pytron/apputils/codegen.py +261 -0
- pytron/apputils/config.py +303 -0
- pytron/apputils/deadmansswitch.py +47 -0
- pytron/apputils/extras.py +76 -0
- pytron/apputils/native.py +148 -0
- pytron/apputils/shell.py +73 -0
- pytron/apputils/windows.py +286 -0
- pytron/cli.py +384 -0
- pytron/commands/__init__.py +0 -0
- pytron/commands/android.py +28 -0
- pytron/commands/build.py +26 -0
- pytron/commands/doctor.py +221 -0
- pytron/commands/engine.py +23 -0
- pytron/commands/frontend.py +60 -0
- pytron/commands/harvest.py +112 -0
- pytron/commands/helpers.py +239 -0
- pytron/commands/info.py +50 -0
- pytron/commands/init.py +521 -0
- pytron/commands/install.py +294 -0
- pytron/commands/login.py +130 -0
- pytron/commands/package.py +228 -0
- pytron/commands/plugin.py +442 -0
- pytron/commands/run.py +312 -0
- pytron/commands/scan.py +210 -0
- pytron/commands/show.py +23 -0
- pytron/commands/uninstall.py +150 -0
- pytron/commands/utils.py +42 -0
- pytron/commands/workflow.py +95 -0
- pytron/console.py +133 -0
- pytron/core.py +18 -0
- pytron/dependencies/WebView2Loader.dll +0 -0
- pytron/dependencies/__init__.py +1 -0
- pytron/dependencies/pytron_native.so +0 -0
- pytron/engines/chrome/adapter.py +445 -0
- pytron/engines/chrome/engine.py +576 -0
- pytron/engines/chrome/forge.py +147 -0
- pytron/engines/chrome/shell/package.json +8 -0
- pytron/engines/chrome/shell/preload.js +12 -0
- pytron/engines/chrome/shell/shell.js +534 -0
- pytron/exceptions.py +36 -0
- pytron/inspector.py +201 -0
- pytron/inspector_ui.py +512 -0
- pytron/installer/Installation.nsi +236 -0
- pytron/installer/header.bmp +0 -0
- pytron/installer/pytron.ico +0 -0
- pytron/installer/sidebar.bmp +0 -0
- pytron/llms.md +98 -0
- pytron/manifests/README.md +29 -0
- pytron/manifests/windows-utf8.manifest +44 -0
- pytron/menu.py +128 -0
- pytron/nsis-setup.exe +0 -0
- pytron/pack/__init__.py +0 -0
- pytron/pack/assets.py +131 -0
- pytron/pack/compilers.py +289 -0
- pytron/pack/crystal.py +297 -0
- pytron/pack/graph.py +377 -0
- pytron/pack/inference.py +157 -0
- pytron/pack/installers.py +402 -0
- pytron/pack/introspect.py +357 -0
- pytron/pack/metadata.py +213 -0
- pytron/pack/modules.py +618 -0
- pytron/pack/nuitka.py +108 -0
- pytron/pack/pipeline.py +107 -0
- pytron/pack/pyinstaller.py +176 -0
- pytron/pack/rust_engine.py +273 -0
- pytron/pack/secure.py +309 -0
- pytron/pack/secure_loader/bin/pytron_rust_bootloader +0 -0
- pytron/pack/secure_loader/icon.ico +0 -0
- pytron/pack/utils.py +110 -0
- pytron/pack/virtual_root.py +124 -0
- pytron/platforms/__init__.py +0 -0
- pytron/platforms/android/__init__.py +3 -0
- pytron/platforms/android/android.py +103 -0
- pytron/platforms/android/builder.py +736 -0
- pytron/platforms/android/ops/build.py +79 -0
- pytron/platforms/android/ops/init.py +63 -0
- pytron/platforms/android/ops/run.py +79 -0
- pytron/platforms/android/ops/sync.py +770 -0
- pytron/platforms/android/ops/utils.py +8 -0
- pytron/platforms/android/shell/README.md +30 -0
- pytron/platforms/android/shell/app/build.gradle +64 -0
- pytron/platforms/android/shell/app/src/main/AndroidManifest.xml +29 -0
- pytron/platforms/android/shell/app/src/main/assets/python/main.py +86 -0
- pytron/platforms/android/shell/app/src/main/assets/python/python314.zip +0 -0
- pytron/platforms/android/shell/app/src/main/cpp/CMakeLists.txt +25 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/Python.h +155 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/abstract.h +915 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/audit.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bltinmodule.h +14 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/boolobject.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bytearrayobject.h +44 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bytesobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/ceval.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/codecs.h +176 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/compile.h +22 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/complexobject.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/abstract.h +104 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/audit.h +8 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/bytearrayobject.h +38 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/bytesobject.h +42 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/cellobject.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/ceval.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/classobject.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/code.h +340 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/compile.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/complexobject.h +33 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/context.h +107 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/critical_section.h +154 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/descrobject.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/dictobject.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/fileobject.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/fileutils.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/floatobject.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/frameobject.h +35 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/funcobject.h +185 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/genobject.h +56 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/import.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/initconfig.h +334 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/listobject.h +53 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/lock.h +74 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/longintrepr.h +184 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/longobject.h +89 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/memoryobject.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/methodobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/modsupport.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/monitoring.h +269 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/object.h +493 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/objimpl.h +104 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/odictobject.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/picklebufobject.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pthread_stubs.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic.h +614 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_gcc.h +615 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_msc.h +1197 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_std.h +1112 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyctype.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pydebug.h +38 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyerrors.h +132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyfpe.h +15 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyframe.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyhash.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pylifecycle.h +89 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pymem.h +84 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pystate.h +275 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pystats.h +194 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pythonrun.h +96 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pythread.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pytime.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/setobject.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/traceback.h +13 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/tracemalloc.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/tupleobject.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/unicodeobject.h +773 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/warnings.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/weakrefobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/critical_section.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/datetime.h +267 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/descrobject.h +100 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/dictobject.h +108 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/dynamic_annotations.h +499 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/enumobject.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/errcode.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/exports.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/fileobject.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/fileutils.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/floatobject.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/frameobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/genericaliasobject.h +14 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/import.h +103 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/atomic.h +392 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/internal.h +969 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/prim.h +329 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/track.h +147 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/types.h +721 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc.h +565 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_abstract.h +61 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_asdl.h +112 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ast.h +945 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ast_state.h +271 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_atexit.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_audit.h +35 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_backoff.h +133 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bitutils.h +186 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_blocks_output_buffer.h +321 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_brc.h +73 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bytes_methods.h +82 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bytesobject.h +149 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_c_array.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_call.h +206 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_capsule.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_cell.h +75 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ceval.h +390 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ceval_state.h +48 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_code.h +671 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_codecs.h +76 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_compile.h +230 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_complexobject.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_condvar.h +93 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_context.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_critical_section.h +237 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_crossinterp.h +406 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_crossinterp_data_registry.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_debug_offsets.h +379 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_descrobject.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dict.h +410 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dict_state.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dtoa.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_emscripten_signal.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_emscripten_trampoline.h +70 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_exceptions.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_faulthandler.h +100 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_fileutils.h +320 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_fileutils_windows.h +98 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_floatobject.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_flowgraph.h +47 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_format.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_frame.h +61 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_freelist.h +111 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_freelist_state.h +70 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_function.h +53 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_gc.h +378 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_genobject.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_getopt.h +22 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_gil.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_objects.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_objects_fini_generated.h +1592 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_strings.h +854 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_hamt.h +113 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_hashtable.h +150 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_import.h +141 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_importdl.h +139 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_index_pool.h +36 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_initconfig.h +197 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_instruction_sequence.h +83 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_instruments.h +127 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interp.h +109 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interp_structs.h +977 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpframe.h +401 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpframe_structs.h +95 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpolation.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_intrinsics.h +51 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_jit.h +29 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_list.h +81 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_llist.h +106 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_lock.h +236 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_long.h +319 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_magic_number.h +305 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_memoryobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_mimalloc.h +69 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_modsupport.h +99 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_moduleobject.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_namespace.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object.h +1029 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_alloc.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_deferred.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_stack.h +95 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_state.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_obmalloc.h +702 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_obmalloc_init.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_opcode_metadata.h +2117 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_opcode_utils.h +90 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_optimizer.h +318 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_parking_lot.h +97 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_parser.h +78 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pathconfig.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyarena.h +68 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyatomic_ft_wrappers.h +174 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pybuffer.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyerrors.h +213 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyhash.h +91 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pylifecycle.h +136 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymath.h +205 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymem.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymem_init.h +103 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pystate.h +339 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pystats.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pythonrun.h +68 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pythread.h +172 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_qsbr.h +172 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_range.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime.h +63 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_init.h +239 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_init_generated.h +1589 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_structs.h +310 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_semaphore.h +67 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_setobject.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_signal.h +108 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_sliceobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_stackref.h +791 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_stats.h +97 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_strhex.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_structs.h +88 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_structseq.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_symtable.h +201 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_sysmodule.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_template.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_time.h +334 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_token.h +110 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_traceback.h +111 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tracemalloc.h +164 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tstate.h +88 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tuple.h +75 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typedefs.h +18 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typeobject.h +155 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typevarobject.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ucnhash.h +36 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unicodeobject.h +308 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unicodeobject_generated.h +3132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unionobject.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uniqueid.h +57 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uop_ids.h +335 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uop_metadata.h +1204 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_warnings.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_weakref.h +133 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/intrcheck.h +23 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/iterobject.h +24 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/listobject.h +55 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/lock.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/longobject.h +178 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/marshal.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/memoryobject.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/methodobject.h +146 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/modsupport.h +146 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/moduleobject.h +122 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/monitoring.h +18 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/object.h +828 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/objimpl.h +211 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/opcode.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/opcode_ids.h +259 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/osdefs.h +57 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/osmodule.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/patchlevel.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/py_curses.h +117 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyatomic.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pybuffer.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pycapsule.h +58 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyconfig.h +2088 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pydtrace.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyerrors.h +335 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyexpat.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyframe.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyhash.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pylifecycle.h +80 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymacconfig.h +91 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymacro.h +243 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymath.h +65 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymem.h +110 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyport.h +710 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystate.h +132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystats.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystrcmp.h +23 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystrtod.h +37 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pythonrun.h +42 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pythread.h +131 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pytypedefs.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/rangeobject.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/refcount.h +555 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/setobject.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/sliceobject.h +69 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/structmember.h +56 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/structseq.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/sysmodule.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/traceback.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/tupleobject.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/typeslots.h +96 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/unicodeobject.h +1029 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/warnings.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/weakrefobject.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/pytron_bridge.cpp +224 -0
- pytron/platforms/android/shell/app/src/main/java/com/pytron/shell/MainActivity.kt +208 -0
- pytron/platforms/android/shell/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- pytron/platforms/android/shell/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- pytron/platforms/android/shell/build.gradle +11 -0
- pytron/platforms/android/shell/gradle/wrapper/gradle-wrapper.jar +0 -0
- pytron/platforms/android/shell/gradle/wrapper/gradle-wrapper.properties +5 -0
- pytron/platforms/android/shell/gradle.properties +2 -0
- pytron/platforms/android/shell/gradlew.bat +85 -0
- pytron/platforms/android/shell/settings.gradle +16 -0
- pytron/platforms/darwin.py +82 -0
- pytron/platforms/darwin_ops/libs.py +31 -0
- pytron/platforms/darwin_ops/system.py +182 -0
- pytron/platforms/darwin_ops/utils.py +85 -0
- pytron/platforms/darwin_ops/webview.py +5 -0
- pytron/platforms/darwin_ops/window.py +102 -0
- pytron/platforms/interface.py +152 -0
- pytron/platforms/linux.py +82 -0
- pytron/platforms/linux_ops/libs.py +49 -0
- pytron/platforms/linux_ops/system.py +316 -0
- pytron/platforms/linux_ops/utils.py +19 -0
- pytron/platforms/linux_ops/webview.py +5 -0
- pytron/platforms/linux_ops/window.py +115 -0
- pytron/platforms/windows.py +136 -0
- pytron/platforms/windows_ops/__init__.py +0 -0
- pytron/platforms/windows_ops/constants.py +126 -0
- pytron/platforms/windows_ops/system.py +518 -0
- pytron/platforms/windows_ops/utils.py +3 -0
- pytron/platforms/windows_ops/webview.py +5 -0
- pytron/platforms/windows_ops/window.py +361 -0
- pytron/plugin.py +467 -0
- pytron/rcedit-x64.exe +0 -0
- pytron/router.py +146 -0
- pytron/serializer.py +240 -0
- pytron/shortcuts.py +279 -0
- pytron/state.py +76 -0
- pytron/tray.py +399 -0
- pytron/updater.py +181 -0
- pytron/utf8_hook.py +112 -0
- pytron/utils.py +44 -0
- pytron/webview.py +722 -0
- pytron_kit-0.3.12.dist-info/METADATA +131 -0
- pytron_kit-0.3.12.dist-info/RECORD +419 -0
- pytron_kit-0.3.12.dist-info/WHEEL +5 -0
- pytron_kit-0.3.12.dist-info/entry_points.txt +2 -0
- pytron_kit-0.3.12.dist-info/licenses/LICENSE +201 -0
- pytron_kit-0.3.12.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#ifndef Py_CPYTHON_PTRHEAD_STUBS_H
|
|
2
|
+
#define Py_CPYTHON_PTRHEAD_STUBS_H
|
|
3
|
+
|
|
4
|
+
#if !defined(HAVE_PTHREAD_STUBS)
|
|
5
|
+
# error "this header file requires stubbed pthreads."
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
#ifndef _POSIX_THREADS
|
|
9
|
+
# define _POSIX_THREADS 1
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
/* Minimal pthread stubs for CPython.
|
|
13
|
+
*
|
|
14
|
+
* The stubs implement the minimum pthread API for CPython.
|
|
15
|
+
* - pthread_create() fails.
|
|
16
|
+
* - pthread_exit() calls exit(0).
|
|
17
|
+
* - pthread_key_*() functions implement minimal TSS without destructor.
|
|
18
|
+
* - all other functions do nothing and return 0.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#ifdef __wasi__
|
|
22
|
+
// WASI's bits/alltypes.h provides type definitions when __NEED_ is set.
|
|
23
|
+
// The header file can be included multiple times.
|
|
24
|
+
//
|
|
25
|
+
// <sys/types.h> may also define these macros.
|
|
26
|
+
# ifndef __NEED_pthread_cond_t
|
|
27
|
+
# define __NEED_pthread_cond_t 1
|
|
28
|
+
# endif
|
|
29
|
+
# ifndef __NEED_pthread_condattr_t
|
|
30
|
+
# define __NEED_pthread_condattr_t 1
|
|
31
|
+
# endif
|
|
32
|
+
# ifndef __NEED_pthread_mutex_t
|
|
33
|
+
# define __NEED_pthread_mutex_t 1
|
|
34
|
+
# endif
|
|
35
|
+
# ifndef __NEED_pthread_mutexattr_t
|
|
36
|
+
# define __NEED_pthread_mutexattr_t 1
|
|
37
|
+
# endif
|
|
38
|
+
# ifndef __NEED_pthread_key_t
|
|
39
|
+
# define __NEED_pthread_key_t 1
|
|
40
|
+
# endif
|
|
41
|
+
# ifndef __NEED_pthread_t
|
|
42
|
+
# define __NEED_pthread_t 1
|
|
43
|
+
# endif
|
|
44
|
+
# ifndef __NEED_pthread_attr_t
|
|
45
|
+
# define __NEED_pthread_attr_t 1
|
|
46
|
+
# endif
|
|
47
|
+
# include <bits/alltypes.h>
|
|
48
|
+
#else
|
|
49
|
+
typedef struct { void *__x; } pthread_cond_t;
|
|
50
|
+
typedef struct { unsigned __attr; } pthread_condattr_t;
|
|
51
|
+
typedef struct { void *__x; } pthread_mutex_t;
|
|
52
|
+
typedef struct { unsigned __attr; } pthread_mutexattr_t;
|
|
53
|
+
typedef unsigned pthread_key_t;
|
|
54
|
+
typedef unsigned pthread_t;
|
|
55
|
+
typedef struct { unsigned __attr; } pthread_attr_t;
|
|
56
|
+
#endif
|
|
57
|
+
|
|
58
|
+
// mutex
|
|
59
|
+
PyAPI_FUNC(int) pthread_mutex_init(pthread_mutex_t *restrict mutex,
|
|
60
|
+
const pthread_mutexattr_t *restrict attr);
|
|
61
|
+
PyAPI_FUNC(int) pthread_mutex_destroy(pthread_mutex_t *mutex);
|
|
62
|
+
PyAPI_FUNC(int) pthread_mutex_trylock(pthread_mutex_t *mutex);
|
|
63
|
+
PyAPI_FUNC(int) pthread_mutex_lock(pthread_mutex_t *mutex);
|
|
64
|
+
PyAPI_FUNC(int) pthread_mutex_unlock(pthread_mutex_t *mutex);
|
|
65
|
+
|
|
66
|
+
// condition
|
|
67
|
+
PyAPI_FUNC(int) pthread_cond_init(pthread_cond_t *restrict cond,
|
|
68
|
+
const pthread_condattr_t *restrict attr);
|
|
69
|
+
PyAPI_FUNC(int) pthread_cond_destroy(pthread_cond_t *cond);
|
|
70
|
+
PyAPI_FUNC(int) pthread_cond_wait(pthread_cond_t *restrict cond,
|
|
71
|
+
pthread_mutex_t *restrict mutex);
|
|
72
|
+
PyAPI_FUNC(int) pthread_cond_timedwait(pthread_cond_t *restrict cond,
|
|
73
|
+
pthread_mutex_t *restrict mutex,
|
|
74
|
+
const struct timespec *restrict abstime);
|
|
75
|
+
PyAPI_FUNC(int) pthread_cond_signal(pthread_cond_t *cond);
|
|
76
|
+
PyAPI_FUNC(int) pthread_condattr_init(pthread_condattr_t *attr);
|
|
77
|
+
PyAPI_FUNC(int) pthread_condattr_setclock(
|
|
78
|
+
pthread_condattr_t *attr, clockid_t clock_id);
|
|
79
|
+
|
|
80
|
+
// pthread
|
|
81
|
+
PyAPI_FUNC(int) pthread_create(pthread_t *restrict thread,
|
|
82
|
+
const pthread_attr_t *restrict attr,
|
|
83
|
+
void *(*start_routine)(void *),
|
|
84
|
+
void *restrict arg);
|
|
85
|
+
PyAPI_FUNC(int) pthread_detach(pthread_t thread);
|
|
86
|
+
PyAPI_FUNC(int) pthread_join(pthread_t thread, void** value_ptr);
|
|
87
|
+
PyAPI_FUNC(pthread_t) pthread_self(void);
|
|
88
|
+
PyAPI_FUNC(int) pthread_exit(void *retval) __attribute__ ((__noreturn__));
|
|
89
|
+
PyAPI_FUNC(int) pthread_attr_init(pthread_attr_t *attr);
|
|
90
|
+
PyAPI_FUNC(int) pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
|
|
91
|
+
PyAPI_FUNC(int) pthread_attr_destroy(pthread_attr_t *attr);
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
// pthread_key
|
|
95
|
+
#ifndef PTHREAD_KEYS_MAX
|
|
96
|
+
# define PTHREAD_KEYS_MAX 128
|
|
97
|
+
#endif
|
|
98
|
+
|
|
99
|
+
PyAPI_FUNC(int) pthread_key_create(pthread_key_t *key,
|
|
100
|
+
void (*destr_function)(void *));
|
|
101
|
+
PyAPI_FUNC(int) pthread_key_delete(pthread_key_t key);
|
|
102
|
+
PyAPI_FUNC(void *) pthread_getspecific(pthread_key_t key);
|
|
103
|
+
PyAPI_FUNC(int) pthread_setspecific(pthread_key_t key, const void *value);
|
|
104
|
+
|
|
105
|
+
#endif // Py_CPYTHON_PTRHEAD_STUBS_H
|
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
// This header provides cross-platform low-level atomic operations
|
|
2
|
+
// similar to C11 atomics.
|
|
3
|
+
//
|
|
4
|
+
// Operations are sequentially consistent unless they have a suffix indicating
|
|
5
|
+
// otherwise. If in doubt, prefer the sequentially consistent operations.
|
|
6
|
+
//
|
|
7
|
+
// The "_relaxed" suffix for load and store operations indicates the "relaxed"
|
|
8
|
+
// memory order. They don't provide synchronization, but (roughly speaking)
|
|
9
|
+
// guarantee somewhat sane behavior for races instead of undefined behavior.
|
|
10
|
+
// In practice, they correspond to "normal" hardware load and store
|
|
11
|
+
// instructions, so they are almost as inexpensive as plain loads and stores
|
|
12
|
+
// in C.
|
|
13
|
+
//
|
|
14
|
+
// Note that atomic read-modify-write operations like _Py_atomic_add_* return
|
|
15
|
+
// the previous value of the atomic variable, not the new value.
|
|
16
|
+
//
|
|
17
|
+
// See https://en.cppreference.com/w/c/atomic for more information on C11
|
|
18
|
+
// atomics.
|
|
19
|
+
// See https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2055r0.pdf
|
|
20
|
+
// "A Relaxed Guide to memory_order_relaxed" for discussion of and common usage
|
|
21
|
+
// or relaxed atomics.
|
|
22
|
+
//
|
|
23
|
+
// Functions with pseudo Python code:
|
|
24
|
+
//
|
|
25
|
+
// def _Py_atomic_load(obj):
|
|
26
|
+
// return obj # sequential consistency
|
|
27
|
+
//
|
|
28
|
+
// def _Py_atomic_load_relaxed(obj):
|
|
29
|
+
// return obj # relaxed consistency
|
|
30
|
+
//
|
|
31
|
+
// def _Py_atomic_store(obj, value):
|
|
32
|
+
// obj = value # sequential consistency
|
|
33
|
+
//
|
|
34
|
+
// def _Py_atomic_store_relaxed(obj, value):
|
|
35
|
+
// obj = value # relaxed consistency
|
|
36
|
+
//
|
|
37
|
+
// def _Py_atomic_exchange(obj, value):
|
|
38
|
+
// # sequential consistency
|
|
39
|
+
// old_obj = obj
|
|
40
|
+
// obj = value
|
|
41
|
+
// return old_obj
|
|
42
|
+
//
|
|
43
|
+
// def _Py_atomic_compare_exchange(obj, expected, desired):
|
|
44
|
+
// # sequential consistency
|
|
45
|
+
// if obj == expected:
|
|
46
|
+
// obj = desired
|
|
47
|
+
// return True
|
|
48
|
+
// else:
|
|
49
|
+
// expected = obj
|
|
50
|
+
// return False
|
|
51
|
+
//
|
|
52
|
+
// def _Py_atomic_add(obj, value):
|
|
53
|
+
// # sequential consistency
|
|
54
|
+
// old_obj = obj
|
|
55
|
+
// obj += value
|
|
56
|
+
// return old_obj
|
|
57
|
+
//
|
|
58
|
+
// def _Py_atomic_and(obj, value):
|
|
59
|
+
// # sequential consistency
|
|
60
|
+
// old_obj = obj
|
|
61
|
+
// obj &= value
|
|
62
|
+
// return old_obj
|
|
63
|
+
//
|
|
64
|
+
// def _Py_atomic_or(obj, value):
|
|
65
|
+
// # sequential consistency
|
|
66
|
+
// old_obj = obj
|
|
67
|
+
// obj |= value
|
|
68
|
+
// return old_obj
|
|
69
|
+
//
|
|
70
|
+
// Other functions:
|
|
71
|
+
//
|
|
72
|
+
// def _Py_atomic_load_ptr_acquire(obj):
|
|
73
|
+
// return obj # acquire
|
|
74
|
+
//
|
|
75
|
+
// def _Py_atomic_store_ptr_release(obj):
|
|
76
|
+
// return obj # release
|
|
77
|
+
//
|
|
78
|
+
// def _Py_atomic_fence_seq_cst():
|
|
79
|
+
// # sequential consistency
|
|
80
|
+
// ...
|
|
81
|
+
//
|
|
82
|
+
// def _Py_atomic_fence_release():
|
|
83
|
+
// # release
|
|
84
|
+
// ...
|
|
85
|
+
|
|
86
|
+
#ifndef Py_CPYTHON_ATOMIC_H
|
|
87
|
+
# error "this header file must not be included directly"
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
// --- _Py_atomic_add --------------------------------------------------------
|
|
91
|
+
// Atomically adds `value` to `obj` and returns the previous value
|
|
92
|
+
|
|
93
|
+
static inline int
|
|
94
|
+
_Py_atomic_add_int(int *obj, int value);
|
|
95
|
+
|
|
96
|
+
static inline int8_t
|
|
97
|
+
_Py_atomic_add_int8(int8_t *obj, int8_t value);
|
|
98
|
+
|
|
99
|
+
static inline int16_t
|
|
100
|
+
_Py_atomic_add_int16(int16_t *obj, int16_t value);
|
|
101
|
+
|
|
102
|
+
static inline int32_t
|
|
103
|
+
_Py_atomic_add_int32(int32_t *obj, int32_t value);
|
|
104
|
+
|
|
105
|
+
static inline int64_t
|
|
106
|
+
_Py_atomic_add_int64(int64_t *obj, int64_t value);
|
|
107
|
+
|
|
108
|
+
static inline intptr_t
|
|
109
|
+
_Py_atomic_add_intptr(intptr_t *obj, intptr_t value);
|
|
110
|
+
|
|
111
|
+
static inline unsigned int
|
|
112
|
+
_Py_atomic_add_uint(unsigned int *obj, unsigned int value);
|
|
113
|
+
|
|
114
|
+
static inline uint8_t
|
|
115
|
+
_Py_atomic_add_uint8(uint8_t *obj, uint8_t value);
|
|
116
|
+
|
|
117
|
+
static inline uint16_t
|
|
118
|
+
_Py_atomic_add_uint16(uint16_t *obj, uint16_t value);
|
|
119
|
+
|
|
120
|
+
static inline uint32_t
|
|
121
|
+
_Py_atomic_add_uint32(uint32_t *obj, uint32_t value);
|
|
122
|
+
|
|
123
|
+
static inline uint64_t
|
|
124
|
+
_Py_atomic_add_uint64(uint64_t *obj, uint64_t value);
|
|
125
|
+
|
|
126
|
+
static inline uintptr_t
|
|
127
|
+
_Py_atomic_add_uintptr(uintptr_t *obj, uintptr_t value);
|
|
128
|
+
|
|
129
|
+
static inline Py_ssize_t
|
|
130
|
+
_Py_atomic_add_ssize(Py_ssize_t *obj, Py_ssize_t value);
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
// --- _Py_atomic_compare_exchange -------------------------------------------
|
|
134
|
+
// Performs an atomic compare-and-exchange.
|
|
135
|
+
//
|
|
136
|
+
// - If `*obj` and `*expected` are equal, store `desired` into `*obj`
|
|
137
|
+
// and return 1 (success).
|
|
138
|
+
// - Otherwise, store the `*obj` current value into `*expected`
|
|
139
|
+
// and return 0 (failure).
|
|
140
|
+
//
|
|
141
|
+
// These correspond to the C11 atomic_compare_exchange_strong() function.
|
|
142
|
+
|
|
143
|
+
static inline int
|
|
144
|
+
_Py_atomic_compare_exchange_int(int *obj, int *expected, int desired);
|
|
145
|
+
|
|
146
|
+
static inline int
|
|
147
|
+
_Py_atomic_compare_exchange_int8(int8_t *obj, int8_t *expected, int8_t desired);
|
|
148
|
+
|
|
149
|
+
static inline int
|
|
150
|
+
_Py_atomic_compare_exchange_int16(int16_t *obj, int16_t *expected, int16_t desired);
|
|
151
|
+
|
|
152
|
+
static inline int
|
|
153
|
+
_Py_atomic_compare_exchange_int32(int32_t *obj, int32_t *expected, int32_t desired);
|
|
154
|
+
|
|
155
|
+
static inline int
|
|
156
|
+
_Py_atomic_compare_exchange_int64(int64_t *obj, int64_t *expected, int64_t desired);
|
|
157
|
+
|
|
158
|
+
static inline int
|
|
159
|
+
_Py_atomic_compare_exchange_intptr(intptr_t *obj, intptr_t *expected, intptr_t desired);
|
|
160
|
+
|
|
161
|
+
static inline int
|
|
162
|
+
_Py_atomic_compare_exchange_uint(unsigned int *obj, unsigned int *expected, unsigned int desired);
|
|
163
|
+
|
|
164
|
+
static inline int
|
|
165
|
+
_Py_atomic_compare_exchange_uint8(uint8_t *obj, uint8_t *expected, uint8_t desired);
|
|
166
|
+
|
|
167
|
+
static inline int
|
|
168
|
+
_Py_atomic_compare_exchange_uint16(uint16_t *obj, uint16_t *expected, uint16_t desired);
|
|
169
|
+
|
|
170
|
+
static inline int
|
|
171
|
+
_Py_atomic_compare_exchange_uint32(uint32_t *obj, uint32_t *expected, uint32_t desired);
|
|
172
|
+
|
|
173
|
+
static inline int
|
|
174
|
+
_Py_atomic_compare_exchange_uint64(uint64_t *obj, uint64_t *expected, uint64_t desired);
|
|
175
|
+
|
|
176
|
+
static inline int
|
|
177
|
+
_Py_atomic_compare_exchange_uintptr(uintptr_t *obj, uintptr_t *expected, uintptr_t desired);
|
|
178
|
+
|
|
179
|
+
static inline int
|
|
180
|
+
_Py_atomic_compare_exchange_ssize(Py_ssize_t *obj, Py_ssize_t *expected, Py_ssize_t desired);
|
|
181
|
+
|
|
182
|
+
// NOTE: `obj` and `expected` are logically `void**` types, but we use `void*`
|
|
183
|
+
// so that we can pass types like `PyObject**` without a cast.
|
|
184
|
+
static inline int
|
|
185
|
+
_Py_atomic_compare_exchange_ptr(void *obj, void *expected, void *value);
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
// --- _Py_atomic_exchange ---------------------------------------------------
|
|
189
|
+
// Atomically replaces `*obj` with `value` and returns the previous value of `*obj`.
|
|
190
|
+
|
|
191
|
+
static inline int
|
|
192
|
+
_Py_atomic_exchange_int(int *obj, int value);
|
|
193
|
+
|
|
194
|
+
static inline int8_t
|
|
195
|
+
_Py_atomic_exchange_int8(int8_t *obj, int8_t value);
|
|
196
|
+
|
|
197
|
+
static inline int16_t
|
|
198
|
+
_Py_atomic_exchange_int16(int16_t *obj, int16_t value);
|
|
199
|
+
|
|
200
|
+
static inline int32_t
|
|
201
|
+
_Py_atomic_exchange_int32(int32_t *obj, int32_t value);
|
|
202
|
+
|
|
203
|
+
static inline int64_t
|
|
204
|
+
_Py_atomic_exchange_int64(int64_t *obj, int64_t value);
|
|
205
|
+
|
|
206
|
+
static inline intptr_t
|
|
207
|
+
_Py_atomic_exchange_intptr(intptr_t *obj, intptr_t value);
|
|
208
|
+
|
|
209
|
+
static inline unsigned int
|
|
210
|
+
_Py_atomic_exchange_uint(unsigned int *obj, unsigned int value);
|
|
211
|
+
|
|
212
|
+
static inline uint8_t
|
|
213
|
+
_Py_atomic_exchange_uint8(uint8_t *obj, uint8_t value);
|
|
214
|
+
|
|
215
|
+
static inline uint16_t
|
|
216
|
+
_Py_atomic_exchange_uint16(uint16_t *obj, uint16_t value);
|
|
217
|
+
|
|
218
|
+
static inline uint32_t
|
|
219
|
+
_Py_atomic_exchange_uint32(uint32_t *obj, uint32_t value);
|
|
220
|
+
|
|
221
|
+
static inline uint64_t
|
|
222
|
+
_Py_atomic_exchange_uint64(uint64_t *obj, uint64_t value);
|
|
223
|
+
|
|
224
|
+
static inline uintptr_t
|
|
225
|
+
_Py_atomic_exchange_uintptr(uintptr_t *obj, uintptr_t value);
|
|
226
|
+
|
|
227
|
+
static inline Py_ssize_t
|
|
228
|
+
_Py_atomic_exchange_ssize(Py_ssize_t *obj, Py_ssize_t value);
|
|
229
|
+
|
|
230
|
+
static inline void *
|
|
231
|
+
_Py_atomic_exchange_ptr(void *obj, void *value);
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
// --- _Py_atomic_and --------------------------------------------------------
|
|
235
|
+
// Performs `*obj &= value` atomically and returns the previous value of `*obj`.
|
|
236
|
+
|
|
237
|
+
static inline uint8_t
|
|
238
|
+
_Py_atomic_and_uint8(uint8_t *obj, uint8_t value);
|
|
239
|
+
|
|
240
|
+
static inline uint16_t
|
|
241
|
+
_Py_atomic_and_uint16(uint16_t *obj, uint16_t value);
|
|
242
|
+
|
|
243
|
+
static inline uint32_t
|
|
244
|
+
_Py_atomic_and_uint32(uint32_t *obj, uint32_t value);
|
|
245
|
+
|
|
246
|
+
static inline uint64_t
|
|
247
|
+
_Py_atomic_and_uint64(uint64_t *obj, uint64_t value);
|
|
248
|
+
|
|
249
|
+
static inline uintptr_t
|
|
250
|
+
_Py_atomic_and_uintptr(uintptr_t *obj, uintptr_t value);
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
// --- _Py_atomic_or ---------------------------------------------------------
|
|
254
|
+
// Performs `*obj |= value` atomically and returns the previous value of `*obj`.
|
|
255
|
+
|
|
256
|
+
static inline uint8_t
|
|
257
|
+
_Py_atomic_or_uint8(uint8_t *obj, uint8_t value);
|
|
258
|
+
|
|
259
|
+
static inline uint16_t
|
|
260
|
+
_Py_atomic_or_uint16(uint16_t *obj, uint16_t value);
|
|
261
|
+
|
|
262
|
+
static inline uint32_t
|
|
263
|
+
_Py_atomic_or_uint32(uint32_t *obj, uint32_t value);
|
|
264
|
+
|
|
265
|
+
static inline uint64_t
|
|
266
|
+
_Py_atomic_or_uint64(uint64_t *obj, uint64_t value);
|
|
267
|
+
|
|
268
|
+
static inline uintptr_t
|
|
269
|
+
_Py_atomic_or_uintptr(uintptr_t *obj, uintptr_t value);
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
// --- _Py_atomic_load -------------------------------------------------------
|
|
273
|
+
// Atomically loads `*obj` (sequential consistency)
|
|
274
|
+
|
|
275
|
+
static inline int
|
|
276
|
+
_Py_atomic_load_int(const int *obj);
|
|
277
|
+
|
|
278
|
+
static inline int8_t
|
|
279
|
+
_Py_atomic_load_int8(const int8_t *obj);
|
|
280
|
+
|
|
281
|
+
static inline int16_t
|
|
282
|
+
_Py_atomic_load_int16(const int16_t *obj);
|
|
283
|
+
|
|
284
|
+
static inline int32_t
|
|
285
|
+
_Py_atomic_load_int32(const int32_t *obj);
|
|
286
|
+
|
|
287
|
+
static inline int64_t
|
|
288
|
+
_Py_atomic_load_int64(const int64_t *obj);
|
|
289
|
+
|
|
290
|
+
static inline intptr_t
|
|
291
|
+
_Py_atomic_load_intptr(const intptr_t *obj);
|
|
292
|
+
|
|
293
|
+
static inline uint8_t
|
|
294
|
+
_Py_atomic_load_uint8(const uint8_t *obj);
|
|
295
|
+
|
|
296
|
+
static inline uint16_t
|
|
297
|
+
_Py_atomic_load_uint16(const uint16_t *obj);
|
|
298
|
+
|
|
299
|
+
static inline uint32_t
|
|
300
|
+
_Py_atomic_load_uint32(const uint32_t *obj);
|
|
301
|
+
|
|
302
|
+
static inline uint64_t
|
|
303
|
+
_Py_atomic_load_uint64(const uint64_t *obj);
|
|
304
|
+
|
|
305
|
+
static inline uintptr_t
|
|
306
|
+
_Py_atomic_load_uintptr(const uintptr_t *obj);
|
|
307
|
+
|
|
308
|
+
static inline unsigned int
|
|
309
|
+
_Py_atomic_load_uint(const unsigned int *obj);
|
|
310
|
+
|
|
311
|
+
static inline Py_ssize_t
|
|
312
|
+
_Py_atomic_load_ssize(const Py_ssize_t *obj);
|
|
313
|
+
|
|
314
|
+
static inline void *
|
|
315
|
+
_Py_atomic_load_ptr(const void *obj);
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
// --- _Py_atomic_load_relaxed -----------------------------------------------
|
|
319
|
+
// Loads `*obj` (relaxed consistency, i.e., no ordering)
|
|
320
|
+
|
|
321
|
+
static inline int
|
|
322
|
+
_Py_atomic_load_int_relaxed(const int *obj);
|
|
323
|
+
|
|
324
|
+
static inline char
|
|
325
|
+
_Py_atomic_load_char_relaxed(const char *obj);
|
|
326
|
+
|
|
327
|
+
static inline unsigned char
|
|
328
|
+
_Py_atomic_load_uchar_relaxed(const unsigned char *obj);
|
|
329
|
+
|
|
330
|
+
static inline short
|
|
331
|
+
_Py_atomic_load_short_relaxed(const short *obj);
|
|
332
|
+
|
|
333
|
+
static inline unsigned short
|
|
334
|
+
_Py_atomic_load_ushort_relaxed(const unsigned short *obj);
|
|
335
|
+
|
|
336
|
+
static inline long
|
|
337
|
+
_Py_atomic_load_long_relaxed(const long *obj);
|
|
338
|
+
|
|
339
|
+
static inline double
|
|
340
|
+
_Py_atomic_load_double_relaxed(const double *obj);
|
|
341
|
+
|
|
342
|
+
static inline long long
|
|
343
|
+
_Py_atomic_load_llong_relaxed(const long long *obj);
|
|
344
|
+
|
|
345
|
+
static inline int8_t
|
|
346
|
+
_Py_atomic_load_int8_relaxed(const int8_t *obj);
|
|
347
|
+
|
|
348
|
+
static inline int16_t
|
|
349
|
+
_Py_atomic_load_int16_relaxed(const int16_t *obj);
|
|
350
|
+
|
|
351
|
+
static inline int32_t
|
|
352
|
+
_Py_atomic_load_int32_relaxed(const int32_t *obj);
|
|
353
|
+
|
|
354
|
+
static inline int64_t
|
|
355
|
+
_Py_atomic_load_int64_relaxed(const int64_t *obj);
|
|
356
|
+
|
|
357
|
+
static inline intptr_t
|
|
358
|
+
_Py_atomic_load_intptr_relaxed(const intptr_t *obj);
|
|
359
|
+
|
|
360
|
+
static inline uint8_t
|
|
361
|
+
_Py_atomic_load_uint8_relaxed(const uint8_t *obj);
|
|
362
|
+
|
|
363
|
+
static inline uint16_t
|
|
364
|
+
_Py_atomic_load_uint16_relaxed(const uint16_t *obj);
|
|
365
|
+
|
|
366
|
+
static inline uint32_t
|
|
367
|
+
_Py_atomic_load_uint32_relaxed(const uint32_t *obj);
|
|
368
|
+
|
|
369
|
+
static inline uint64_t
|
|
370
|
+
_Py_atomic_load_uint64_relaxed(const uint64_t *obj);
|
|
371
|
+
|
|
372
|
+
static inline uintptr_t
|
|
373
|
+
_Py_atomic_load_uintptr_relaxed(const uintptr_t *obj);
|
|
374
|
+
|
|
375
|
+
static inline unsigned int
|
|
376
|
+
_Py_atomic_load_uint_relaxed(const unsigned int *obj);
|
|
377
|
+
|
|
378
|
+
static inline Py_ssize_t
|
|
379
|
+
_Py_atomic_load_ssize_relaxed(const Py_ssize_t *obj);
|
|
380
|
+
|
|
381
|
+
static inline void *
|
|
382
|
+
_Py_atomic_load_ptr_relaxed(const void *obj);
|
|
383
|
+
|
|
384
|
+
static inline unsigned long long
|
|
385
|
+
_Py_atomic_load_ullong_relaxed(const unsigned long long *obj);
|
|
386
|
+
|
|
387
|
+
// --- _Py_atomic_store ------------------------------------------------------
|
|
388
|
+
// Atomically performs `*obj = value` (sequential consistency)
|
|
389
|
+
|
|
390
|
+
static inline void
|
|
391
|
+
_Py_atomic_store_int(int *obj, int value);
|
|
392
|
+
|
|
393
|
+
static inline void
|
|
394
|
+
_Py_atomic_store_int8(int8_t *obj, int8_t value);
|
|
395
|
+
|
|
396
|
+
static inline void
|
|
397
|
+
_Py_atomic_store_int16(int16_t *obj, int16_t value);
|
|
398
|
+
|
|
399
|
+
static inline void
|
|
400
|
+
_Py_atomic_store_int32(int32_t *obj, int32_t value);
|
|
401
|
+
|
|
402
|
+
static inline void
|
|
403
|
+
_Py_atomic_store_int64(int64_t *obj, int64_t value);
|
|
404
|
+
|
|
405
|
+
static inline void
|
|
406
|
+
_Py_atomic_store_intptr(intptr_t *obj, intptr_t value);
|
|
407
|
+
|
|
408
|
+
static inline void
|
|
409
|
+
_Py_atomic_store_uint8(uint8_t *obj, uint8_t value);
|
|
410
|
+
|
|
411
|
+
static inline void
|
|
412
|
+
_Py_atomic_store_uint16(uint16_t *obj, uint16_t value);
|
|
413
|
+
|
|
414
|
+
static inline void
|
|
415
|
+
_Py_atomic_store_uint32(uint32_t *obj, uint32_t value);
|
|
416
|
+
|
|
417
|
+
static inline void
|
|
418
|
+
_Py_atomic_store_uint64(uint64_t *obj, uint64_t value);
|
|
419
|
+
|
|
420
|
+
static inline void
|
|
421
|
+
_Py_atomic_store_uintptr(uintptr_t *obj, uintptr_t value);
|
|
422
|
+
|
|
423
|
+
static inline void
|
|
424
|
+
_Py_atomic_store_uint(unsigned int *obj, unsigned int value);
|
|
425
|
+
|
|
426
|
+
static inline void
|
|
427
|
+
_Py_atomic_store_ptr(void *obj, void *value);
|
|
428
|
+
|
|
429
|
+
static inline void
|
|
430
|
+
_Py_atomic_store_ssize(Py_ssize_t* obj, Py_ssize_t value);
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
// --- _Py_atomic_store_relaxed ----------------------------------------------
|
|
434
|
+
// Stores `*obj = value` (relaxed consistency, i.e., no ordering)
|
|
435
|
+
|
|
436
|
+
static inline void
|
|
437
|
+
_Py_atomic_store_int_relaxed(int *obj, int value);
|
|
438
|
+
|
|
439
|
+
static inline void
|
|
440
|
+
_Py_atomic_store_int8_relaxed(int8_t *obj, int8_t value);
|
|
441
|
+
|
|
442
|
+
static inline void
|
|
443
|
+
_Py_atomic_store_int16_relaxed(int16_t *obj, int16_t value);
|
|
444
|
+
|
|
445
|
+
static inline void
|
|
446
|
+
_Py_atomic_store_int32_relaxed(int32_t *obj, int32_t value);
|
|
447
|
+
|
|
448
|
+
static inline void
|
|
449
|
+
_Py_atomic_store_int64_relaxed(int64_t *obj, int64_t value);
|
|
450
|
+
|
|
451
|
+
static inline void
|
|
452
|
+
_Py_atomic_store_intptr_relaxed(intptr_t *obj, intptr_t value);
|
|
453
|
+
|
|
454
|
+
static inline void
|
|
455
|
+
_Py_atomic_store_uint8_relaxed(uint8_t* obj, uint8_t value);
|
|
456
|
+
|
|
457
|
+
static inline void
|
|
458
|
+
_Py_atomic_store_uint16_relaxed(uint16_t *obj, uint16_t value);
|
|
459
|
+
|
|
460
|
+
static inline void
|
|
461
|
+
_Py_atomic_store_uint32_relaxed(uint32_t *obj, uint32_t value);
|
|
462
|
+
|
|
463
|
+
static inline void
|
|
464
|
+
_Py_atomic_store_uint64_relaxed(uint64_t *obj, uint64_t value);
|
|
465
|
+
|
|
466
|
+
static inline void
|
|
467
|
+
_Py_atomic_store_uintptr_relaxed(uintptr_t *obj, uintptr_t value);
|
|
468
|
+
|
|
469
|
+
static inline void
|
|
470
|
+
_Py_atomic_store_uint_relaxed(unsigned int *obj, unsigned int value);
|
|
471
|
+
|
|
472
|
+
static inline void
|
|
473
|
+
_Py_atomic_store_ptr_relaxed(void *obj, void *value);
|
|
474
|
+
|
|
475
|
+
static inline void
|
|
476
|
+
_Py_atomic_store_ssize_relaxed(Py_ssize_t *obj, Py_ssize_t value);
|
|
477
|
+
|
|
478
|
+
static inline void
|
|
479
|
+
_Py_atomic_store_ullong_relaxed(unsigned long long *obj,
|
|
480
|
+
unsigned long long value);
|
|
481
|
+
|
|
482
|
+
static inline void
|
|
483
|
+
_Py_atomic_store_char_relaxed(char *obj, char value);
|
|
484
|
+
|
|
485
|
+
static inline void
|
|
486
|
+
_Py_atomic_store_uchar_relaxed(unsigned char *obj, unsigned char value);
|
|
487
|
+
|
|
488
|
+
static inline void
|
|
489
|
+
_Py_atomic_store_short_relaxed(short *obj, short value);
|
|
490
|
+
|
|
491
|
+
static inline void
|
|
492
|
+
_Py_atomic_store_ushort_relaxed(unsigned short *obj, unsigned short value);
|
|
493
|
+
|
|
494
|
+
static inline void
|
|
495
|
+
_Py_atomic_store_long_relaxed(long *obj, long value);
|
|
496
|
+
|
|
497
|
+
static inline void
|
|
498
|
+
_Py_atomic_store_float_relaxed(float *obj, float value);
|
|
499
|
+
|
|
500
|
+
static inline void
|
|
501
|
+
_Py_atomic_store_double_relaxed(double *obj, double value);
|
|
502
|
+
|
|
503
|
+
static inline void
|
|
504
|
+
_Py_atomic_store_llong_relaxed(long long *obj, long long value);
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
// --- _Py_atomic_load_ptr_acquire / _Py_atomic_store_ptr_release ------------
|
|
508
|
+
|
|
509
|
+
// Loads `*obj` (acquire operation)
|
|
510
|
+
static inline void *
|
|
511
|
+
_Py_atomic_load_ptr_acquire(const void *obj);
|
|
512
|
+
|
|
513
|
+
static inline uintptr_t
|
|
514
|
+
_Py_atomic_load_uintptr_acquire(const uintptr_t *obj);
|
|
515
|
+
|
|
516
|
+
// Stores `*obj = value` (release operation)
|
|
517
|
+
static inline void
|
|
518
|
+
_Py_atomic_store_ptr_release(void *obj, void *value);
|
|
519
|
+
|
|
520
|
+
static inline void
|
|
521
|
+
_Py_atomic_store_uintptr_release(uintptr_t *obj, uintptr_t value);
|
|
522
|
+
|
|
523
|
+
static inline void
|
|
524
|
+
_Py_atomic_store_ssize_release(Py_ssize_t *obj, Py_ssize_t value);
|
|
525
|
+
|
|
526
|
+
static inline void
|
|
527
|
+
_Py_atomic_store_int_release(int *obj, int value);
|
|
528
|
+
|
|
529
|
+
static inline int
|
|
530
|
+
_Py_atomic_load_int_acquire(const int *obj);
|
|
531
|
+
|
|
532
|
+
static inline void
|
|
533
|
+
_Py_atomic_store_uint32_release(uint32_t *obj, uint32_t value);
|
|
534
|
+
|
|
535
|
+
static inline void
|
|
536
|
+
_Py_atomic_store_uint64_release(uint64_t *obj, uint64_t value);
|
|
537
|
+
|
|
538
|
+
static inline uint64_t
|
|
539
|
+
_Py_atomic_load_uint64_acquire(const uint64_t *obj);
|
|
540
|
+
|
|
541
|
+
static inline uint32_t
|
|
542
|
+
_Py_atomic_load_uint32_acquire(const uint32_t *obj);
|
|
543
|
+
|
|
544
|
+
static inline Py_ssize_t
|
|
545
|
+
_Py_atomic_load_ssize_acquire(const Py_ssize_t *obj);
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
// --- _Py_atomic_fence ------------------------------------------------------
|
|
551
|
+
|
|
552
|
+
// Sequential consistency fence. C11 fences have complex semantics. When
|
|
553
|
+
// possible, use the atomic operations on variables defined above, which
|
|
554
|
+
// generally do not require explicit use of a fence.
|
|
555
|
+
// See https://en.cppreference.com/w/cpp/atomic/atomic_thread_fence
|
|
556
|
+
static inline void _Py_atomic_fence_seq_cst(void);
|
|
557
|
+
|
|
558
|
+
// Acquire fence
|
|
559
|
+
static inline void _Py_atomic_fence_acquire(void);
|
|
560
|
+
|
|
561
|
+
// Release fence
|
|
562
|
+
static inline void _Py_atomic_fence_release(void);
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
#ifndef _Py_USE_GCC_BUILTIN_ATOMICS
|
|
566
|
+
# if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))
|
|
567
|
+
# define _Py_USE_GCC_BUILTIN_ATOMICS 1
|
|
568
|
+
# elif defined(__clang__)
|
|
569
|
+
# if __has_builtin(__atomic_load)
|
|
570
|
+
# define _Py_USE_GCC_BUILTIN_ATOMICS 1
|
|
571
|
+
# endif
|
|
572
|
+
# endif
|
|
573
|
+
#endif
|
|
574
|
+
|
|
575
|
+
#if _Py_USE_GCC_BUILTIN_ATOMICS
|
|
576
|
+
# define Py_ATOMIC_GCC_H
|
|
577
|
+
# include "pyatomic_gcc.h"
|
|
578
|
+
# undef Py_ATOMIC_GCC_H
|
|
579
|
+
#elif __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__)
|
|
580
|
+
# define Py_ATOMIC_STD_H
|
|
581
|
+
# include "pyatomic_std.h"
|
|
582
|
+
# undef Py_ATOMIC_STD_H
|
|
583
|
+
#elif defined(_MSC_VER)
|
|
584
|
+
# define Py_ATOMIC_MSC_H
|
|
585
|
+
# include "pyatomic_msc.h"
|
|
586
|
+
# undef Py_ATOMIC_MSC_H
|
|
587
|
+
#else
|
|
588
|
+
# error "no available pyatomic implementation for this platform/compiler"
|
|
589
|
+
#endif
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
// --- aliases ---------------------------------------------------------------
|
|
593
|
+
|
|
594
|
+
#if SIZEOF_LONG == 8
|
|
595
|
+
# define _Py_atomic_load_ulong(p) \
|
|
596
|
+
_Py_atomic_load_uint64((uint64_t *)p)
|
|
597
|
+
# define _Py_atomic_load_ulong_relaxed(p) \
|
|
598
|
+
_Py_atomic_load_uint64_relaxed((uint64_t *)p)
|
|
599
|
+
# define _Py_atomic_store_ulong(p, v) \
|
|
600
|
+
_Py_atomic_store_uint64((uint64_t *)p, v)
|
|
601
|
+
# define _Py_atomic_store_ulong_relaxed(p, v) \
|
|
602
|
+
_Py_atomic_store_uint64_relaxed((uint64_t *)p, v)
|
|
603
|
+
#elif SIZEOF_LONG == 4
|
|
604
|
+
# define _Py_atomic_load_ulong(p) \
|
|
605
|
+
_Py_atomic_load_uint32((uint32_t *)p)
|
|
606
|
+
# define _Py_atomic_load_ulong_relaxed(p) \
|
|
607
|
+
_Py_atomic_load_uint32_relaxed((uint32_t *)p)
|
|
608
|
+
# define _Py_atomic_store_ulong(p, v) \
|
|
609
|
+
_Py_atomic_store_uint32((uint32_t *)p, v)
|
|
610
|
+
# define _Py_atomic_store_ulong_relaxed(p, v) \
|
|
611
|
+
_Py_atomic_store_uint32_relaxed((uint32_t *)p, v)
|
|
612
|
+
#else
|
|
613
|
+
# error "long must be 4 or 8 bytes in size"
|
|
614
|
+
#endif // SIZEOF_LONG
|