Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__cp311-cp311-win_amd64.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.
Potentially problematic release.
This version of Nuitka-winsvc might be problematic. Click here for more details.
- Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
- Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
- Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
- nuitka/Builtins.py +49 -17
- nuitka/BytecodeCaching.py +24 -20
- nuitka/Bytecodes.py +23 -19
- nuitka/CacheCleanup.py +28 -23
- nuitka/Constants.py +19 -17
- nuitka/Errors.py +23 -17
- nuitka/HardImportRegistry.py +408 -0
- nuitka/MainControl.py +209 -116
- nuitka/ModuleRegistry.py +83 -20
- nuitka/OptionParsing.py +467 -221
- nuitka/Options.py +701 -225
- nuitka/OutputDirectories.py +47 -23
- nuitka/PostProcessing.py +133 -79
- nuitka/Progress.py +73 -24
- nuitka/PythonFlavors.py +141 -32
- nuitka/PythonOperators.py +18 -17
- nuitka/PythonVersions.py +107 -19
- nuitka/Serialization.py +70 -55
- nuitka/SourceCodeReferences.py +19 -17
- nuitka/Tracing.py +176 -70
- nuitka/TreeXML.py +31 -26
- nuitka/Variables.py +39 -41
- nuitka/Version.py +22 -8
- nuitka/__init__.py +5 -4
- nuitka/__main__.py +95 -29
- nuitka/__past__.py +44 -34
- nuitka/build/Backend.scons +243 -141
- nuitka/build/CCompilerVersion.scons +45 -31
- nuitka/build/DataComposerInterface.py +20 -17
- nuitka/build/Onefile.scons +56 -54
- nuitka/build/SconsCaching.py +105 -92
- nuitka/build/SconsCompilerSettings.py +167 -68
- nuitka/build/SconsHacks.py +25 -19
- nuitka/build/SconsInterface.py +155 -54
- nuitka/build/SconsProgress.py +19 -18
- nuitka/build/SconsSpawn.py +62 -33
- nuitka/build/SconsUtils.py +152 -55
- nuitka/build/__init__.py +5 -4
- nuitka/build/include/nuitka/allocator.h +228 -22
- nuitka/build/include/nuitka/builtins.h +17 -17
- nuitka/build/include/nuitka/calling.h +24 -24
- nuitka/build/include/nuitka/checkers.h +17 -18
- nuitka/build/include/nuitka/checksum_tools.h +14 -19
- nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
- nuitka/build/include/nuitka/compiled_cell.h +33 -18
- nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
- nuitka/build/include/nuitka/compiled_frame.h +93 -54
- nuitka/build/include/nuitka/compiled_function.h +42 -20
- nuitka/build/include/nuitka/compiled_generator.h +24 -18
- nuitka/build/include/nuitka/compiled_method.h +17 -18
- nuitka/build/include/nuitka/constants.h +35 -18
- nuitka/build/include/nuitka/constants_blob.h +17 -17
- nuitka/build/include/nuitka/debug_settings.h +60 -0
- nuitka/build/include/nuitka/environment_variables.h +30 -0
- nuitka/build/include/nuitka/environment_variables_system.h +45 -0
- nuitka/build/include/nuitka/exception_groups.h +23 -26
- nuitka/build/include/nuitka/exceptions.h +717 -171
- nuitka/build/include/nuitka/filesystem_paths.h +26 -20
- nuitka/build/include/nuitka/freelists.h +38 -18
- nuitka/build/include/nuitka/helper/attributes.h +24 -22
- nuitka/build/include/nuitka/helper/boolean.h +17 -17
- nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
- nuitka/build/include/nuitka/helper/bytes.h +14 -15
- nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
- nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
- nuitka/build/include/nuitka/helper/complex.h +17 -17
- nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
- nuitka/build/include/nuitka/helper/floats.h +17 -18
- nuitka/build/include/nuitka/helper/import_hard.h +25 -17
- nuitka/build/include/nuitka/helper/indexes.h +17 -18
- nuitka/build/include/nuitka/helper/ints.h +115 -54
- nuitka/build/include/nuitka/helper/iterators.h +99 -51
- nuitka/build/include/nuitka/helper/lists.h +26 -24
- nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
- nuitka/build/include/nuitka/helper/mappings.h +17 -18
- nuitka/build/include/nuitka/helper/operations.h +20 -17
- nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
- nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
- nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/raising.h +68 -37
- nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
- nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
- nuitka/build/include/nuitka/helper/sequences.h +19 -13
- nuitka/build/include/nuitka/helper/sets.h +11 -12
- nuitka/build/include/nuitka/helper/slices.h +31 -25
- nuitka/build/include/nuitka/helper/strings.h +16 -17
- nuitka/build/include/nuitka/helper/subscripts.h +18 -201
- nuitka/build/include/nuitka/helper/tuples.h +64 -52
- nuitka/build/include/nuitka/helpers.h +50 -22
- nuitka/build/include/nuitka/importing.h +28 -21
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +163 -71
- nuitka/build/include/nuitka/printing.h +29 -22
- nuitka/build/include/nuitka/python_pgo.h +19 -18
- nuitka/build/include/nuitka/safe_string_ops.h +20 -18
- nuitka/build/include/nuitka/threading.h +45 -32
- nuitka/build/include/nuitka/tracing.h +28 -18
- nuitka/build/include/nuitka/type_aliases.h +30 -0
- nuitka/build/include/nuitka/unfreezing.h +29 -23
- nuitka/build/inline_copy/bin/scons.py +14 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
- nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
- nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
- nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
- nuitka/build/inline_copy/stubgen/six.py +998 -0
- nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
- nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
- nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
- nuitka/build/inline_copy/zlib/LICENSE +22 -0
- nuitka/build/inline_copy/zlib/crc32.c +1049 -0
- nuitka/build/inline_copy/zlib/crc32.h +9446 -0
- nuitka/build/inline_copy/zlib/zconf.h +551 -0
- nuitka/build/inline_copy/zlib/zlib.h +1938 -0
- nuitka/build/inline_copy/zlib/zutil.h +275 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
- nuitka/build/static_src/CompiledCellType.c +69 -44
- nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
- nuitka/build/static_src/CompiledCoroutineType.c +229 -226
- nuitka/build/static_src/CompiledFrameType.c +323 -138
- nuitka/build/static_src/CompiledFunctionType.c +547 -231
- nuitka/build/static_src/CompiledGeneratorType.c +416 -290
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
- nuitka/build/static_src/CompiledMethodType.c +91 -82
- nuitka/build/static_src/HelpersAllocator.c +352 -45
- nuitka/build/static_src/HelpersAttributes.c +30 -72
- nuitka/build/static_src/HelpersBuiltin.c +65 -46
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
- nuitka/build/static_src/HelpersBytes.c +19 -20
- nuitka/build/static_src/HelpersCalling.c +40 -37
- nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
- nuitka/build/static_src/HelpersChecksumTools.c +35 -21
- nuitka/build/static_src/HelpersClasses.c +17 -17
- nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
- nuitka/build/static_src/HelpersComparisonEq.c +536 -496
- nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
- nuitka/build/static_src/HelpersComparisonGe.c +531 -501
- nuitka/build/static_src/HelpersComparisonGt.c +530 -500
- nuitka/build/static_src/HelpersComparisonLe.c +531 -501
- nuitka/build/static_src/HelpersComparisonLt.c +530 -500
- nuitka/build/static_src/HelpersComparisonNe.c +538 -496
- nuitka/build/static_src/HelpersConsole.c +122 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
- nuitka/build/static_src/HelpersDeepcopy.c +33 -33
- nuitka/build/static_src/HelpersDictionaries.c +232 -63
- nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
- nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
- nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
- nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
- nuitka/build/static_src/HelpersExceptions.c +147 -62
- nuitka/build/static_src/HelpersFiles.c +116 -22
- nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
- nuitka/build/static_src/HelpersFloats.c +37 -31
- nuitka/build/static_src/HelpersHeapStorage.c +21 -17
- nuitka/build/static_src/HelpersImport.c +61 -29
- nuitka/build/static_src/HelpersImportHard.c +74 -61
- nuitka/build/static_src/HelpersJitSources.c +46 -0
- nuitka/build/static_src/HelpersLists.c +237 -58
- nuitka/build/static_src/HelpersListsGenerated.c +41 -41
- nuitka/build/static_src/HelpersMappings.c +17 -17
- nuitka/build/static_src/HelpersMatching.c +137 -51
- nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
- nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
- nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
- nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
- nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
- nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
- nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
- nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
- nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
- nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
- nuitka/build/static_src/HelpersProfiling.c +25 -24
- nuitka/build/static_src/HelpersPythonPgo.c +22 -22
- nuitka/build/static_src/HelpersRaising.c +296 -283
- nuitka/build/static_src/HelpersSafeStrings.c +34 -22
- nuitka/build/static_src/HelpersSequences.c +18 -19
- nuitka/build/static_src/HelpersSlices.c +29 -23
- nuitka/build/static_src/HelpersStrings.c +235 -38
- nuitka/build/static_src/HelpersTuples.c +46 -34
- nuitka/build/static_src/HelpersTypes.c +166 -25
- nuitka/build/static_src/InspectPatcher.c +108 -27
- nuitka/build/static_src/MainProgram.c +464 -280
- nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
- nuitka/build/static_src/OnefileBootstrap.c +281 -164
- nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
- nuitka/code_generation/AsyncgenCodes.py +21 -23
- nuitka/code_generation/AttributeCodes.py +31 -27
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
- nuitka/code_generation/BranchCodes.py +19 -17
- nuitka/code_generation/BuiltinCodes.py +29 -18
- nuitka/code_generation/CallCodes.py +35 -33
- nuitka/code_generation/ClassCodes.py +19 -17
- nuitka/code_generation/CodeGeneration.py +61 -28
- nuitka/code_generation/CodeHelperSelection.py +20 -18
- nuitka/code_generation/CodeHelpers.py +28 -21
- nuitka/code_generation/CodeObjectCodes.py +36 -26
- nuitka/code_generation/ComparisonCodes.py +51 -22
- nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
- nuitka/code_generation/ConditionalCodes.py +19 -17
- nuitka/code_generation/ConstantCodes.py +82 -28
- nuitka/code_generation/Contexts.py +180 -42
- nuitka/code_generation/CoroutineCodes.py +21 -23
- nuitka/code_generation/CtypesCodes.py +19 -17
- nuitka/code_generation/DictCodes.py +28 -26
- nuitka/code_generation/Emission.py +21 -18
- nuitka/code_generation/ErrorCodes.py +57 -79
- nuitka/code_generation/EvalCodes.py +24 -20
- nuitka/code_generation/ExceptionCodes.py +182 -104
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
- nuitka/code_generation/ExpressionCodes.py +19 -17
- nuitka/code_generation/FrameCodes.py +28 -31
- nuitka/code_generation/FunctionCodes.py +26 -27
- nuitka/code_generation/GeneratorCodes.py +25 -26
- nuitka/code_generation/GlobalConstants.py +51 -25
- nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
- nuitka/code_generation/IdCodes.py +19 -17
- nuitka/code_generation/ImportCodes.py +90 -50
- nuitka/code_generation/Indentation.py +23 -22
- nuitka/code_generation/IndexCodes.py +19 -17
- nuitka/code_generation/InjectCCodes.py +14 -12
- nuitka/code_generation/IntegerCodes.py +19 -17
- nuitka/code_generation/IteratorCodes.py +86 -71
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +19 -17
- nuitka/code_generation/LineNumberCodes.py +20 -20
- nuitka/code_generation/ListCodes.py +32 -36
- nuitka/code_generation/LoaderCodes.py +22 -17
- nuitka/code_generation/LocalsDictCodes.py +56 -32
- nuitka/code_generation/LoopCodes.py +19 -17
- nuitka/code_generation/MatchCodes.py +42 -22
- nuitka/code_generation/ModuleCodes.py +71 -29
- nuitka/code_generation/Namify.py +27 -23
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +80 -51
- nuitka/code_generation/PackageResourceCodes.py +96 -23
- nuitka/code_generation/PrintCodes.py +19 -17
- nuitka/code_generation/PythonAPICodes.py +19 -17
- nuitka/code_generation/RaisingCodes.py +183 -107
- nuitka/code_generation/Reports.py +32 -22
- nuitka/code_generation/ReturnCodes.py +20 -32
- nuitka/code_generation/SetCodes.py +19 -17
- nuitka/code_generation/SliceCodes.py +22 -20
- nuitka/code_generation/StringCodes.py +19 -17
- nuitka/code_generation/SubscriptCodes.py +24 -30
- nuitka/code_generation/TensorflowCodes.py +54 -0
- nuitka/code_generation/TryCodes.py +31 -41
- nuitka/code_generation/TupleCodes.py +20 -18
- nuitka/code_generation/TypeAliasCodes.py +119 -0
- nuitka/code_generation/VariableCodes.py +118 -55
- nuitka/code_generation/VariableDeclarations.py +28 -25
- nuitka/code_generation/YieldCodes.py +23 -21
- nuitka/code_generation/__init__.py +5 -4
- nuitka/code_generation/c_types/CTypeBases.py +29 -19
- nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
- nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
- nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
- nuitka/code_generation/c_types/CTypeVoids.py +20 -17
- nuitka/code_generation/c_types/__init__.py +5 -4
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
- nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
- nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
- nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
- nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
- nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
- nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
- nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
- nuitka/code_generation/templates/__init__.py +5 -4
- nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
- nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
- nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
- nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
- nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
- nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
- nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
- nuitka/containers/Namedtuples.py +25 -18
- nuitka/containers/OrderedSets.py +105 -5
- nuitka/containers/OrderedSetsFallback.py +19 -17
- nuitka/containers/__init__.py +5 -4
- nuitka/distutils/Build.py +33 -18
- nuitka/distutils/DistutilCommands.py +84 -33
- nuitka/distutils/__init__.py +5 -4
- nuitka/finalizations/Finalization.py +21 -18
- nuitka/finalizations/FinalizeMarkups.py +31 -55
- nuitka/finalizations/__init__.py +5 -4
- nuitka/freezer/DependsExe.py +60 -30
- nuitka/freezer/DllDependenciesCommon.py +47 -20
- nuitka/freezer/DllDependenciesMacOS.py +165 -58
- nuitka/freezer/DllDependenciesPosix.py +29 -19
- nuitka/freezer/DllDependenciesWin32.py +55 -33
- nuitka/freezer/ImportDetection.py +23 -17
- nuitka/freezer/IncludedDataFiles.py +142 -48
- nuitka/freezer/IncludedEntryPoints.py +104 -39
- nuitka/freezer/Onefile.py +32 -22
- nuitka/freezer/Standalone.py +166 -53
- nuitka/freezer/__init__.py +5 -4
- nuitka/importing/IgnoreListing.py +19 -17
- nuitka/importing/ImportCache.py +24 -21
- nuitka/importing/ImportResolving.py +103 -95
- nuitka/importing/Importing.py +319 -98
- nuitka/importing/PreloadedPackages.py +21 -18
- nuitka/importing/Recursion.py +142 -47
- nuitka/importing/StandardLibrary.py +96 -80
- nuitka/importing/__init__.py +5 -4
- nuitka/nodes/AsyncgenNodes.py +22 -23
- nuitka/nodes/AttributeLookupNodes.py +19 -17
- nuitka/nodes/AttributeNodes.py +19 -17
- nuitka/nodes/AttributeNodesGenerated.py +49 -24
- nuitka/nodes/BuiltinAllNodes.py +19 -17
- nuitka/nodes/BuiltinAnyNodes.py +19 -17
- nuitka/nodes/BuiltinComplexNodes.py +20 -17
- nuitka/nodes/BuiltinDecodingNodes.py +19 -17
- nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
- nuitka/nodes/BuiltinDictNodes.py +19 -17
- nuitka/nodes/BuiltinFormatNodes.py +20 -17
- nuitka/nodes/BuiltinHashNodes.py +19 -17
- nuitka/nodes/BuiltinInputNodes.py +19 -17
- nuitka/nodes/BuiltinIntegerNodes.py +19 -17
- nuitka/nodes/BuiltinIteratorNodes.py +25 -21
- nuitka/nodes/BuiltinLenNodes.py +19 -17
- nuitka/nodes/BuiltinNextNodes.py +19 -17
- nuitka/nodes/BuiltinOpenNodes.py +52 -18
- nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
- nuitka/nodes/BuiltinRangeNodes.py +21 -19
- nuitka/nodes/BuiltinRefNodes.py +73 -40
- nuitka/nodes/BuiltinSumNodes.py +20 -18
- nuitka/nodes/BuiltinTypeNodes.py +19 -17
- nuitka/nodes/BuiltinVarsNodes.py +19 -18
- nuitka/nodes/BytesNodes.py +19 -17
- nuitka/nodes/CallNodes.py +19 -17
- nuitka/nodes/Checkers.py +19 -17
- nuitka/nodes/ChildrenHavingMixins.py +1624 -283
- nuitka/nodes/ClassNodes.py +49 -29
- nuitka/nodes/CodeObjectSpecs.py +29 -18
- nuitka/nodes/ComparisonNodes.py +19 -17
- nuitka/nodes/ConditionalNodes.py +24 -25
- nuitka/nodes/ConstantRefNodes.py +57 -17
- nuitka/nodes/ContainerMakingNodes.py +19 -17
- nuitka/nodes/ContainerOperationNodes.py +19 -17
- nuitka/nodes/CoroutineNodes.py +22 -23
- nuitka/nodes/CtypesNodes.py +19 -18
- nuitka/nodes/DictionaryNodes.py +19 -18
- nuitka/nodes/ExceptionNodes.py +131 -43
- nuitka/nodes/ExecEvalNodes.py +19 -17
- nuitka/nodes/ExpressionBases.py +34 -26
- nuitka/nodes/ExpressionBasesGenerated.py +341 -35
- nuitka/nodes/ExpressionShapeMixins.py +19 -17
- nuitka/nodes/FrameNodes.py +41 -28
- nuitka/nodes/FunctionAttributeNodes.py +19 -17
- nuitka/nodes/FunctionNodes.py +84 -38
- nuitka/nodes/FutureSpecs.py +35 -20
- nuitka/nodes/GeneratorNodes.py +24 -25
- nuitka/nodes/GlobalsLocalsNodes.py +22 -17
- nuitka/nodes/HardImportNodesGenerated.py +746 -148
- nuitka/nodes/ImportHardNodes.py +46 -38
- nuitka/nodes/ImportNodes.py +438 -448
- nuitka/nodes/IndicatorMixins.py +19 -17
- nuitka/nodes/InjectCNodes.py +19 -18
- nuitka/nodes/IterationHandles.py +55 -34
- nuitka/nodes/KeyValuePairNodes.py +19 -17
- nuitka/nodes/ListOperationNodes.py +33 -21
- nuitka/nodes/LocalsDictNodes.py +19 -17
- nuitka/nodes/LocalsScopes.py +41 -41
- nuitka/nodes/LoopNodes.py +28 -17
- nuitka/nodes/MatchNodes.py +37 -24
- nuitka/nodes/ModuleAttributeNodes.py +18 -35
- nuitka/nodes/ModuleNodes.py +90 -31
- nuitka/nodes/NetworkxNodes.py +45 -0
- nuitka/nodes/NodeBases.py +73 -44
- nuitka/nodes/NodeMakingHelpers.py +92 -69
- nuitka/nodes/NodeMetaClasses.py +45 -28
- nuitka/nodes/OperatorNodes.py +28 -26
- nuitka/nodes/OperatorNodesUnary.py +148 -20
- nuitka/nodes/OsSysNodes.py +97 -18
- nuitka/nodes/OutlineNodes.py +24 -22
- nuitka/nodes/PackageMetadataNodes.py +37 -27
- nuitka/nodes/PackageResourceNodes.py +29 -23
- nuitka/nodes/PrintNodes.py +19 -17
- nuitka/nodes/ReturnNodes.py +20 -18
- nuitka/nodes/SideEffectNodes.py +19 -17
- nuitka/nodes/SliceNodes.py +20 -18
- nuitka/nodes/StatementBasesGenerated.py +125 -79
- nuitka/nodes/StatementNodes.py +27 -24
- nuitka/nodes/StrNodes.py +19 -17
- nuitka/nodes/StringConcatenationNodes.py +20 -17
- nuitka/nodes/SubscriptNodes.py +27 -25
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +19 -17
- nuitka/nodes/TypeMatchNodes.py +19 -17
- nuitka/nodes/TypeNodes.py +68 -18
- nuitka/nodes/VariableAssignNodes.py +122 -64
- nuitka/nodes/VariableDelNodes.py +19 -17
- nuitka/nodes/VariableNameNodes.py +19 -17
- nuitka/nodes/VariableRefNodes.py +63 -26
- nuitka/nodes/VariableReleaseNodes.py +19 -17
- nuitka/nodes/YieldNodes.py +21 -19
- nuitka/nodes/__init__.py +5 -4
- nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
- nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
- nuitka/nodes/shapes/ShapeMixins.py +57 -17
- nuitka/nodes/shapes/StandardShapes.py +80 -21
- nuitka/nodes/shapes/__init__.py +5 -4
- nuitka/optimizations/BytecodeDemotion.py +21 -18
- nuitka/optimizations/FunctionInlining.py +22 -23
- nuitka/optimizations/Graphs.py +19 -17
- nuitka/optimizations/Optimization.py +39 -35
- nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
- nuitka/optimizations/Tags.py +19 -18
- nuitka/optimizations/TraceCollections.py +67 -24
- nuitka/optimizations/ValueTraces.py +92 -25
- nuitka/optimizations/__init__.py +5 -4
- nuitka/pgo/PGO.py +33 -23
- nuitka/pgo/__init__.py +5 -4
- nuitka/plugins/PluginBase.py +655 -112
- nuitka/plugins/Plugins.py +247 -61
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +5 -4
- nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
- nuitka/plugins/standard/DataFilesPlugin.py +65 -29
- nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
- nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
- nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
- nuitka/plugins/standard/DillPlugin.py +42 -134
- nuitka/plugins/standard/DllFilesPlugin.py +125 -42
- nuitka/plugins/standard/EnumPlugin.py +19 -17
- nuitka/plugins/standard/EventletPlugin.py +19 -17
- nuitka/plugins/standard/GeventPlugin.py +19 -17
- nuitka/plugins/standard/GiPlugin.py +44 -28
- nuitka/plugins/standard/GlfwPlugin.py +20 -17
- nuitka/plugins/standard/ImplicitImports.py +403 -54
- nuitka/plugins/standard/KivyPlugin.py +24 -20
- nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
- nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
- nuitka/plugins/standard/NumpyPlugin.py +19 -17
- nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
- nuitka/plugins/standard/PbrPlugin.py +21 -19
- nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
- nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
- nuitka/plugins/standard/PmwPlugin.py +30 -27
- nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
- nuitka/plugins/standard/PywebViewPlugin.py +19 -17
- nuitka/plugins/standard/SpacyPlugin.py +136 -0
- nuitka/plugins/standard/TensorflowPlugin.py +20 -17
- nuitka/plugins/standard/TkinterPlugin.py +102 -108
- nuitka/plugins/standard/TorchPlugin.py +20 -17
- nuitka/plugins/standard/TransformersPlugin.py +90 -231
- nuitka/plugins/standard/TrioPlugin.py +18 -15
- nuitka/plugins/standard/UpxPlugin.py +21 -19
- nuitka/plugins/standard/__init__.py +5 -4
- nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
- nuitka/reports/CompilationReportReader.py +79 -0
- nuitka/reports/LicenseReport.rst.j2 +21 -21
- nuitka/reports/Reports.py +363 -76
- nuitka/reports/__init__.py +5 -4
- nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
- nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
- nuitka/specs/BuiltinListOperationSpecs.py +18 -17
- nuitka/specs/BuiltinParameterSpecs.py +35 -21
- nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
- nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
- nuitka/specs/HardImportSpecs.py +74 -22
- nuitka/specs/ParameterSpecs.py +60 -45
- nuitka/specs/__init__.py +5 -4
- nuitka/tools/Basics.py +20 -18
- nuitka/tools/__init__.py +5 -4
- nuitka/tools/commercial/__init__.py +7 -6
- nuitka/tools/data_composer/DataComposer.py +78 -62
- nuitka/tools/data_composer/__init__.py +5 -4
- nuitka/tools/data_composer/__main__.py +18 -17
- nuitka/tools/environments/CreateEnvironment.py +20 -17
- nuitka/tools/environments/Virtualenv.py +60 -32
- nuitka/tools/environments/__init__.py +5 -4
- nuitka/tools/general/__init__.py +5 -4
- nuitka/tools/general/dll_report/__init__.py +5 -4
- nuitka/tools/general/dll_report/__main__.py +29 -22
- nuitka/tools/general/find_module/FindModuleCode.py +35 -22
- nuitka/tools/general/find_module/__init__.py +5 -4
- nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
- nuitka/tools/onefile_compressor/__init__.py +5 -4
- nuitka/tools/onefile_compressor/__main__.py +18 -17
- nuitka/tools/podman/Podman.py +19 -17
- nuitka/tools/podman/__init__.py +5 -4
- nuitka/tools/podman/__main__.py +35 -19
- nuitka/tools/profiler/__init__.py +5 -4
- nuitka/tools/profiler/__main__.py +18 -17
- nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
- nuitka/tools/scanning/DisplayPackageData.py +31 -19
- nuitka/tools/scanning/__init__.py +5 -4
- nuitka/tools/specialize/CTypeDescriptions.py +251 -80
- nuitka/tools/specialize/Common.py +18 -17
- nuitka/tools/specialize/SpecializeC.py +248 -82
- nuitka/tools/specialize/SpecializePython.py +108 -45
- nuitka/tools/specialize/__init__.py +5 -4
- nuitka/tools/testing/Common.py +175 -114
- nuitka/tools/testing/Constructs.py +19 -17
- nuitka/tools/testing/OutputComparison.py +54 -18
- nuitka/tools/testing/Pythons.py +19 -18
- nuitka/tools/testing/RuntimeTracing.py +20 -19
- nuitka/tools/testing/SearchModes.py +26 -20
- nuitka/tools/testing/Valgrind.py +19 -17
- nuitka/tools/testing/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
- nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
- nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
- nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
- nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
- nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
- nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
- nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
- nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
- nuitka/tools/watch/AutoStage.py +145 -0
- nuitka/tools/watch/GitHub.py +113 -0
- nuitka/tools/watch/__init__.py +5 -4
- nuitka/tools/watch/__main__.py +322 -91
- nuitka/tree/Building.py +184 -182
- nuitka/tree/ComplexCallHelperFunctions.py +84 -58
- nuitka/tree/Extractions.py +19 -17
- nuitka/tree/InternalModule.py +29 -20
- nuitka/tree/Operations.py +19 -17
- nuitka/tree/ReformulationAssertStatements.py +51 -31
- nuitka/tree/ReformulationAssignmentStatements.py +96 -91
- nuitka/tree/ReformulationBooleanExpressions.py +19 -17
- nuitka/tree/ReformulationCallExpressions.py +20 -18
- nuitka/tree/ReformulationClasses.py +45 -39
- nuitka/tree/ReformulationClasses3.py +239 -116
- nuitka/tree/ReformulationComparisonExpressions.py +29 -35
- nuitka/tree/ReformulationContractionExpressions.py +58 -55
- nuitka/tree/ReformulationDictionaryCreation.py +41 -35
- nuitka/tree/ReformulationExecStatements.py +42 -39
- nuitka/tree/ReformulationForLoopStatements.py +30 -34
- nuitka/tree/ReformulationFunctionStatements.py +59 -55
- nuitka/tree/ReformulationImportStatements.py +34 -29
- nuitka/tree/ReformulationLambdaExpressions.py +23 -24
- nuitka/tree/ReformulationMatchStatements.py +246 -92
- nuitka/tree/ReformulationMultidist.py +22 -18
- nuitka/tree/ReformulationNamespacePackages.py +55 -46
- nuitka/tree/ReformulationPrintStatements.py +23 -24
- nuitka/tree/ReformulationSequenceCreation.py +50 -49
- nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
- nuitka/tree/ReformulationTryExceptStatements.py +19 -17
- nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
- nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
- nuitka/tree/ReformulationWithStatements.py +39 -41
- nuitka/tree/ReformulationYieldExpressions.py +44 -24
- nuitka/tree/SourceHandling.py +76 -31
- nuitka/tree/SyntaxErrors.py +19 -17
- nuitka/tree/TreeHelpers.py +33 -20
- nuitka/tree/VariableClosure.py +35 -39
- nuitka/tree/__init__.py +5 -4
- nuitka/utils/AppDirs.py +41 -20
- nuitka/utils/CStrings.py +66 -21
- nuitka/utils/CommandLineOptions.py +111 -22
- nuitka/utils/Distributions.py +445 -54
- nuitka/utils/Download.py +89 -57
- nuitka/utils/Execution.py +102 -58
- nuitka/utils/FileOperations.py +357 -128
- nuitka/utils/Hashing.py +55 -33
- nuitka/utils/Images.py +26 -19
- nuitka/utils/Importing.py +119 -37
- nuitka/utils/InlineCopies.py +52 -0
- nuitka/utils/InstalledPythons.py +85 -75
- nuitka/utils/InstanceCounters.py +20 -17
- nuitka/utils/Jinja2.py +30 -22
- nuitka/utils/Json.py +21 -19
- nuitka/utils/MacOSApp.py +26 -18
- nuitka/utils/MemoryUsage.py +20 -18
- nuitka/utils/ModuleNames.py +42 -26
- nuitka/utils/PackageResources.py +44 -0
- nuitka/utils/ReExecute.py +50 -28
- nuitka/utils/Rest.py +20 -17
- nuitka/utils/SharedLibraries.py +161 -75
- nuitka/utils/Shebang.py +20 -17
- nuitka/utils/Signing.py +63 -18
- nuitka/utils/SlotMetaClasses.py +57 -0
- nuitka/utils/StaticLibraries.py +83 -56
- nuitka/utils/ThreadedExecutor.py +18 -17
- nuitka/utils/Timing.py +22 -20
- nuitka/utils/Utils.py +132 -25
- nuitka/utils/WindowsFileUsage.py +22 -20
- nuitka/utils/WindowsResources.py +25 -18
- nuitka/utils/Yaml.py +62 -24
- nuitka/utils/__init__.py +5 -4
- Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
- nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
// Copyright
|
|
2
|
-
|
|
3
|
-
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
4
|
-
// integrates with CPython, but also works on its own.
|
|
5
|
-
//
|
|
6
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
// you may not use this file except in compliance with the License.
|
|
8
|
-
// You may obtain a copy of the License at
|
|
9
|
-
//
|
|
10
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
//
|
|
12
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
// See the License for the specific language governing permissions and
|
|
16
|
-
// limitations under the License.
|
|
17
|
-
//
|
|
1
|
+
// Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
18
3
|
// For interacting with the Python GC unexposed details
|
|
19
4
|
|
|
20
5
|
// This file is included from another C file, help IDEs to still parse it on
|
|
@@ -23,8 +8,56 @@
|
|
|
23
8
|
#include "nuitka/prelude.h"
|
|
24
9
|
#endif
|
|
25
10
|
|
|
11
|
+
// spell-checker: ignore PYMEM_DOMAIN,Nuitka_gc_decref,gcstate,uncollectable,sisnsn,QSBR,wrasgc
|
|
12
|
+
// spell-checker: ignore Nuitka_visit_decref,finalizers,wrcb,wrlist,_PyObject_GET_WEAKREFS_LISTPTR
|
|
13
|
+
// spell-checker: ignore objmalloc,qbsr,stoptheworld
|
|
14
|
+
|
|
15
|
+
void *(*python_obj_malloc)(void *ctx, size_t size) = NULL;
|
|
16
|
+
void *(*python_mem_malloc)(void *ctx, size_t size) = NULL;
|
|
17
|
+
void *(*python_mem_calloc)(void *ctx, size_t nelem, size_t elsize) = NULL;
|
|
18
|
+
#ifndef Py_GIL_DISABLED
|
|
19
|
+
void *(*python_mem_realloc)(void *ctx, void *ptr, size_t new_size) = NULL;
|
|
20
|
+
#else
|
|
21
|
+
void (*python_mem_free)(void *ctx, void *ptr) = NULL;
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
#if defined(Py_DEBUG)
|
|
25
|
+
void *python_obj_ctx = NULL;
|
|
26
|
+
void *python_mem_ctx = NULL;
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
void initNuitkaAllocators(void) {
|
|
30
|
+
PyMemAllocatorEx allocators;
|
|
31
|
+
|
|
32
|
+
PyMem_GetAllocator(PYMEM_DOMAIN_OBJ, &allocators);
|
|
33
|
+
|
|
34
|
+
#if defined(Py_DEBUG)
|
|
35
|
+
python_obj_ctx = allocators.ctx;
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
python_obj_malloc = allocators.malloc;
|
|
39
|
+
|
|
40
|
+
PyMem_GetAllocator(PYMEM_DOMAIN_MEM, &allocators);
|
|
41
|
+
|
|
42
|
+
#if defined(Py_DEBUG)
|
|
43
|
+
python_mem_ctx = allocators.ctx;
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
python_mem_malloc = allocators.malloc;
|
|
47
|
+
python_mem_calloc = allocators.calloc;
|
|
48
|
+
#ifndef Py_GIL_DISABLED
|
|
49
|
+
python_mem_realloc = allocators.realloc;
|
|
50
|
+
#else
|
|
51
|
+
python_mem_free = allocators.free;
|
|
52
|
+
#endif
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#if PYTHON_VERSION >= 0x3b0
|
|
56
|
+
|
|
26
57
|
typedef struct _gc_runtime_state GCState;
|
|
27
58
|
|
|
59
|
+
#if PYTHON_VERSION < 0x3d0
|
|
60
|
+
|
|
28
61
|
#define AS_GC(o) ((PyGC_Head *)(((char *)(o)) - sizeof(PyGC_Head)))
|
|
29
62
|
#define FROM_GC(g) ((PyObject *)(((char *)(g)) + sizeof(PyGC_Head)))
|
|
30
63
|
|
|
@@ -61,8 +94,6 @@ static void Nuitka_invoke_gc_callback(PyThreadState *tstate, const char *phase,
|
|
|
61
94
|
PyObject *info = NULL;
|
|
62
95
|
|
|
63
96
|
if (PyList_GET_SIZE(gcstate->callbacks) != 0) {
|
|
64
|
-
assert(false);
|
|
65
|
-
|
|
66
97
|
info =
|
|
67
98
|
Py_BuildValue("{sisnsn}", "generation", generation, "collected", collected, "uncollectable", uncollectable);
|
|
68
99
|
|
|
@@ -287,7 +318,7 @@ static void Nuitka_gc_list_move(PyGC_Head *node, PyGC_Head *list) {
|
|
|
287
318
|
_PyGCHead_SET_NEXT(node, list);
|
|
288
319
|
}
|
|
289
320
|
|
|
290
|
-
static void
|
|
321
|
+
static void _Nuitka_move_legacy_finalizers(PyGC_Head *unreachable, PyGC_Head *finalizers) {
|
|
291
322
|
PyGC_Head *next;
|
|
292
323
|
for (PyGC_Head *gc = GC_NEXT(unreachable); gc != unreachable; gc = next) {
|
|
293
324
|
PyObject *op = FROM_GC(gc);
|
|
@@ -303,11 +334,11 @@ static void Nuitka_move_legacy_finalizers(PyGC_Head *unreachable, PyGC_Head *fin
|
|
|
303
334
|
}
|
|
304
335
|
}
|
|
305
336
|
|
|
306
|
-
static int
|
|
337
|
+
static int _Nuitka_visit_move(PyObject *op, PyGC_Head *to_list) {
|
|
307
338
|
if (_PyObject_IS_GC(op)) {
|
|
308
339
|
PyGC_Head *gc = AS_GC(op);
|
|
309
340
|
if (Nuitka_gc_is_collecting(gc)) {
|
|
310
|
-
Nuitka_gc_list_move(gc,
|
|
341
|
+
Nuitka_gc_list_move(gc, to_list);
|
|
311
342
|
Nuitka_gc_clear_collecting(gc);
|
|
312
343
|
}
|
|
313
344
|
}
|
|
@@ -319,7 +350,7 @@ static int Nuitka_visit_move(PyObject *op, PyGC_Head *tolist) {
|
|
|
319
350
|
static void Nuitka_move_legacy_finalizer_reachable(PyGC_Head *finalizers) {
|
|
320
351
|
for (PyGC_Head *gc = GC_NEXT(finalizers); gc != finalizers; gc = GC_NEXT(gc)) {
|
|
321
352
|
traverseproc traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
|
|
322
|
-
(void)traverse(FROM_GC(gc), (visitproc)
|
|
353
|
+
(void)traverse(FROM_GC(gc), (visitproc)_Nuitka_visit_move, (void *)finalizers);
|
|
323
354
|
}
|
|
324
355
|
}
|
|
325
356
|
|
|
@@ -331,15 +362,15 @@ static void Nuitka_finalize_garbage(PyThreadState *tstate, PyGC_Head *collectabl
|
|
|
331
362
|
|
|
332
363
|
while (Nuitka_gc_list_is_empty(collectable) == false) {
|
|
333
364
|
PyGC_Head *gc = GC_NEXT(collectable);
|
|
334
|
-
PyObject *
|
|
365
|
+
PyObject *object = FROM_GC(gc);
|
|
335
366
|
Nuitka_gc_list_move(gc, &seen);
|
|
336
367
|
|
|
337
|
-
if (!_PyGCHead_FINALIZED(gc) && (finalize = Py_TYPE(
|
|
368
|
+
if (!_PyGCHead_FINALIZED(gc) && (finalize = Py_TYPE(object)->tp_finalize) != NULL) {
|
|
338
369
|
_PyGCHead_SET_FINALIZED(gc);
|
|
339
|
-
Py_INCREF(
|
|
340
|
-
finalize(
|
|
370
|
+
Py_INCREF(object);
|
|
371
|
+
finalize(object);
|
|
341
372
|
assert(!HAS_ERROR_OCCURRED(tstate));
|
|
342
|
-
Py_DECREF(
|
|
373
|
+
Py_DECREF(object);
|
|
343
374
|
}
|
|
344
375
|
}
|
|
345
376
|
Nuitka_gc_list_merge(&seen, collectable);
|
|
@@ -347,7 +378,7 @@ static void Nuitka_finalize_garbage(PyThreadState *tstate, PyGC_Head *collectabl
|
|
|
347
378
|
|
|
348
379
|
static int Nuitka_handle_weakrefs(PyThreadState *tstate, PyGC_Head *unreachable, PyGC_Head *old) {
|
|
349
380
|
PyGC_Head *gc;
|
|
350
|
-
PyObject *
|
|
381
|
+
PyObject *object;
|
|
351
382
|
PyWeakReference *wr;
|
|
352
383
|
PyGC_Head wrcb_to_call;
|
|
353
384
|
PyGC_Head *next;
|
|
@@ -358,17 +389,17 @@ static int Nuitka_handle_weakrefs(PyThreadState *tstate, PyGC_Head *unreachable,
|
|
|
358
389
|
for (gc = GC_NEXT(unreachable); gc != unreachable; gc = next) {
|
|
359
390
|
PyWeakReference **wrlist;
|
|
360
391
|
|
|
361
|
-
|
|
392
|
+
object = FROM_GC(gc);
|
|
362
393
|
next = GC_NEXT(gc);
|
|
363
394
|
|
|
364
|
-
if (PyWeakref_Check(
|
|
365
|
-
_PyWeakref_ClearRef((PyWeakReference *)
|
|
395
|
+
if (PyWeakref_Check(object)) {
|
|
396
|
+
_PyWeakref_ClearRef((PyWeakReference *)object);
|
|
366
397
|
}
|
|
367
398
|
|
|
368
|
-
if (!_PyType_SUPPORTS_WEAKREFS(Py_TYPE(
|
|
399
|
+
if (!_PyType_SUPPORTS_WEAKREFS(Py_TYPE(object)))
|
|
369
400
|
continue;
|
|
370
401
|
|
|
371
|
-
wrlist = (PyWeakReference **)_PyObject_GET_WEAKREFS_LISTPTR(
|
|
402
|
+
wrlist = (PyWeakReference **)_PyObject_GET_WEAKREFS_LISTPTR(object);
|
|
372
403
|
|
|
373
404
|
for (wr = *wrlist; wr != NULL; wr = *wrlist) {
|
|
374
405
|
PyGC_Head *wrasgc;
|
|
@@ -395,8 +426,8 @@ static int Nuitka_handle_weakrefs(PyThreadState *tstate, PyGC_Head *unreachable,
|
|
|
395
426
|
PyObject *callback;
|
|
396
427
|
|
|
397
428
|
gc = (PyGC_Head *)wrcb_to_call._gc_next;
|
|
398
|
-
|
|
399
|
-
wr = (PyWeakReference *)
|
|
429
|
+
object = FROM_GC(gc);
|
|
430
|
+
wr = (PyWeakReference *)object;
|
|
400
431
|
callback = wr->wr_callback;
|
|
401
432
|
|
|
402
433
|
temp = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, callback, (PyObject *)wr);
|
|
@@ -405,7 +436,7 @@ static int Nuitka_handle_weakrefs(PyThreadState *tstate, PyGC_Head *unreachable,
|
|
|
405
436
|
else
|
|
406
437
|
Py_DECREF(temp);
|
|
407
438
|
|
|
408
|
-
Py_DECREF(
|
|
439
|
+
Py_DECREF(object);
|
|
409
440
|
if (wrcb_to_call._gc_next == (uintptr_t)gc) {
|
|
410
441
|
Nuitka_gc_list_move(gc, old);
|
|
411
442
|
} else {
|
|
@@ -447,19 +478,19 @@ static void Nuitka_delete_garbage(PyThreadState *tstate, GCState *gcstate, PyGC_
|
|
|
447
478
|
|
|
448
479
|
while (Nuitka_gc_list_is_empty(collectable) == false) {
|
|
449
480
|
PyGC_Head *gc = GC_NEXT(collectable);
|
|
450
|
-
PyObject *
|
|
481
|
+
PyObject *object = FROM_GC(gc);
|
|
451
482
|
|
|
452
|
-
_PyObject_ASSERT_WITH_MSG(
|
|
483
|
+
_PyObject_ASSERT_WITH_MSG(object, Py_REFCNT(object) > 0, "refcount is too small");
|
|
453
484
|
|
|
454
485
|
{
|
|
455
486
|
inquiry clear;
|
|
456
|
-
if ((clear = Py_TYPE(
|
|
457
|
-
Py_INCREF(
|
|
458
|
-
(void)clear(
|
|
487
|
+
if ((clear = Py_TYPE(object)->tp_clear) != NULL) {
|
|
488
|
+
Py_INCREF(object);
|
|
489
|
+
(void)clear(object);
|
|
459
490
|
if (HAS_ERROR_OCCURRED(tstate)) {
|
|
460
|
-
_PyErr_WriteUnraisableMsg("in tp_clear of", (PyObject *)Py_TYPE(
|
|
491
|
+
_PyErr_WriteUnraisableMsg("in tp_clear of", (PyObject *)Py_TYPE(object));
|
|
461
492
|
}
|
|
462
|
-
Py_DECREF(
|
|
493
|
+
Py_DECREF(object);
|
|
463
494
|
}
|
|
464
495
|
}
|
|
465
496
|
if (GC_NEXT(collectable) == gc) {
|
|
@@ -541,7 +572,7 @@ static Py_ssize_t Nuitka_gc_collect_main(PyThreadState *tstate, int generation,
|
|
|
541
572
|
|
|
542
573
|
Nuitka_gc_list_init(&finalizers);
|
|
543
574
|
|
|
544
|
-
|
|
575
|
+
_Nuitka_move_legacy_finalizers(&unreachable, &finalizers);
|
|
545
576
|
|
|
546
577
|
Nuitka_move_legacy_finalizer_reachable(&finalizers);
|
|
547
578
|
|
|
@@ -611,8 +642,19 @@ static Py_ssize_t Nuitka_gc_collect_generations(PyThreadState *tstate) {
|
|
|
611
642
|
return n;
|
|
612
643
|
}
|
|
613
644
|
|
|
645
|
+
#else
|
|
646
|
+
|
|
647
|
+
static void Nuitka_Py_ScheduleGC(PyThreadState *tstate) {
|
|
648
|
+
if (!_Py_eval_breaker_bit_is_set(tstate, _PY_GC_SCHEDULED_BIT)) {
|
|
649
|
+
_Py_set_eval_breaker_bit(tstate, _PY_GC_SCHEDULED_BIT);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
#endif
|
|
654
|
+
|
|
614
655
|
// This is called during object creation and might trigger garbage collection
|
|
615
656
|
void Nuitka_PyObject_GC_Link(PyObject *op) {
|
|
657
|
+
#if PYTHON_VERSION < 0x3d0
|
|
616
658
|
PyGC_Head *g = AS_GC(op);
|
|
617
659
|
|
|
618
660
|
PyThreadState *tstate = _PyThreadState_GET();
|
|
@@ -629,4 +671,269 @@ void Nuitka_PyObject_GC_Link(PyObject *op) {
|
|
|
629
671
|
Nuitka_gc_collect_generations(tstate);
|
|
630
672
|
gcstate->collecting = 0;
|
|
631
673
|
}
|
|
674
|
+
#else
|
|
675
|
+
PyGC_Head *gc = _Py_AS_GC(op);
|
|
676
|
+
|
|
677
|
+
// gc must be correctly aligned
|
|
678
|
+
_PyObject_ASSERT(op, ((uintptr_t)gc & (sizeof(uintptr_t) - 1)) == 0);
|
|
679
|
+
|
|
680
|
+
// TODO: Have this passed.
|
|
681
|
+
|
|
682
|
+
PyThreadState *tstate = _PyThreadState_GET();
|
|
683
|
+
GCState *gcstate = &tstate->interp->gc;
|
|
684
|
+
|
|
685
|
+
gc->_gc_next = 0;
|
|
686
|
+
gc->_gc_prev = 0;
|
|
687
|
+
|
|
688
|
+
gcstate->generations[0].count++;
|
|
689
|
+
|
|
690
|
+
if (gcstate->generations[0].count > gcstate->generations[0].threshold && gcstate->enabled &&
|
|
691
|
+
gcstate->generations[0].threshold && !_Py_atomic_load_int_relaxed(&gcstate->collecting) &&
|
|
692
|
+
!_PyErr_Occurred(tstate)) {
|
|
693
|
+
Nuitka_Py_ScheduleGC(tstate);
|
|
694
|
+
}
|
|
695
|
+
#endif
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
#endif
|
|
699
|
+
|
|
700
|
+
#ifdef Py_GIL_DISABLED
|
|
701
|
+
|
|
702
|
+
// Needs to align with CPython "objmalloc.c"
|
|
703
|
+
#define WORK_ITEMS_PER_CHUNK 254
|
|
704
|
+
struct _mem_work_item {
|
|
705
|
+
uintptr_t ptr; // lowest bit tagged 1 for objects freed with PyObject_Free
|
|
706
|
+
uint64_t qsbr_goal;
|
|
707
|
+
};
|
|
708
|
+
|
|
709
|
+
struct _mem_work_chunk {
|
|
710
|
+
struct llist_node node;
|
|
711
|
+
|
|
712
|
+
Py_ssize_t rd_idx; // index of next item to read
|
|
713
|
+
Py_ssize_t wr_idx; // index of next item to write
|
|
714
|
+
struct _mem_work_item array[WORK_ITEMS_PER_CHUNK];
|
|
715
|
+
};
|
|
716
|
+
|
|
717
|
+
// Aligns with CPython "qsbr.c"
|
|
718
|
+
#define QSBR_DEFERRED_LIMIT 10
|
|
719
|
+
|
|
720
|
+
static uint64_t Nuitka_qsbr_advance(struct _qsbr_shared *shared) {
|
|
721
|
+
return _Py_atomic_add_uint64(&shared->wr_seq, QSBR_INCR) + QSBR_INCR;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
static uint64_t Nuitka_qsbr_deferred_advance(struct _qsbr_thread_state *qsbr) {
|
|
725
|
+
if (++qsbr->deferrals < QSBR_DEFERRED_LIMIT) {
|
|
726
|
+
return _Py_qsbr_shared_current(qsbr->shared) + QSBR_INCR;
|
|
727
|
+
}
|
|
728
|
+
qsbr->deferrals = 0;
|
|
729
|
+
return Nuitka_qsbr_advance(qsbr->shared);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
static uint64_t _Nuitka_qsbr_poll_scan(struct _qsbr_shared *shared) {
|
|
733
|
+
_Py_atomic_fence_seq_cst();
|
|
734
|
+
|
|
735
|
+
uint64_t min_seq = _Py_atomic_load_uint64(&shared->wr_seq);
|
|
736
|
+
struct _qsbr_pad *array = shared->array;
|
|
737
|
+
for (Py_ssize_t i = 0, size = shared->size; i != size; i++) {
|
|
738
|
+
struct _qsbr_thread_state *qsbr = &array[i].qsbr;
|
|
739
|
+
|
|
740
|
+
uint64_t seq = _Py_atomic_load_uint64(&qsbr->seq);
|
|
741
|
+
if (seq != QSBR_OFFLINE && QSBR_LT(seq, min_seq)) {
|
|
742
|
+
min_seq = seq;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
uint64_t rd_seq = _Py_atomic_load_uint64(&shared->rd_seq);
|
|
747
|
+
if (QSBR_LT(rd_seq, min_seq)) {
|
|
748
|
+
(void)_Py_atomic_compare_exchange_uint64(&shared->rd_seq, &rd_seq, min_seq);
|
|
749
|
+
rd_seq = min_seq;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
return rd_seq;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
static bool _Nuitka_qsbr_poll(struct _qsbr_thread_state *qsbr, uint64_t goal) {
|
|
756
|
+
assert(_Py_atomic_load_int_relaxed(&_PyThreadState_GET()->state) == _Py_THREAD_ATTACHED);
|
|
757
|
+
|
|
758
|
+
if (_Py_qbsr_goal_reached(qsbr, goal)) {
|
|
759
|
+
return true;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
uint64_t rd_seq = _Nuitka_qsbr_poll_scan(qsbr->shared);
|
|
763
|
+
return QSBR_LEQ(goal, rd_seq);
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
static void _NuitkaMem_free_work_item(uintptr_t ptr) {
|
|
767
|
+
if (ptr & 0x01) {
|
|
768
|
+
PyObject_Free((char *)(ptr - 1));
|
|
769
|
+
} else {
|
|
770
|
+
NuitkaMem_Free((void *)ptr);
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
static struct _mem_work_chunk *work_queue_first(struct llist_node *head) {
|
|
775
|
+
return llist_data(head->next, struct _mem_work_chunk, node);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
static void _Nuitka_process_queue(struct llist_node *head, struct _qsbr_thread_state *qsbr, bool keep_empty) {
|
|
779
|
+
while (!llist_empty(head)) {
|
|
780
|
+
struct _mem_work_chunk *buf = work_queue_first(head);
|
|
781
|
+
|
|
782
|
+
while (buf->rd_idx < buf->wr_idx) {
|
|
783
|
+
struct _mem_work_item *item = &buf->array[buf->rd_idx];
|
|
784
|
+
if (!_Nuitka_qsbr_poll(qsbr, item->qsbr_goal)) {
|
|
785
|
+
return;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
_NuitkaMem_free_work_item(item->ptr);
|
|
789
|
+
buf->rd_idx++;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
assert(buf->rd_idx == buf->wr_idx);
|
|
793
|
+
|
|
794
|
+
if (keep_empty && buf->node.next == head) {
|
|
795
|
+
// Keeping the last buffer as a free-list entry.
|
|
796
|
+
buf->rd_idx = buf->wr_idx = 0;
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
llist_remove(&buf->node);
|
|
801
|
+
NuitkaMem_Free(buf);
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
struct mutex_entry {
|
|
806
|
+
// The time after which the unlocking thread should hand off lock ownership
|
|
807
|
+
// directly to the waiting thread. Written by the waiting thread.
|
|
808
|
+
PyTime_t time_to_be_fair;
|
|
809
|
+
|
|
810
|
+
// Set to 1 if the lock was handed off. Written by the unlocking thread.
|
|
811
|
+
int handed_off;
|
|
812
|
+
};
|
|
813
|
+
|
|
814
|
+
static const PyTime_t TIME_TO_BE_FAIR_NS = 1000 * 1000;
|
|
815
|
+
static const int MAX_SPIN_COUNT = 40;
|
|
816
|
+
|
|
817
|
+
static void _Nuitka_yield(void) {
|
|
818
|
+
#ifdef _WIN32
|
|
819
|
+
SwitchToThread();
|
|
820
|
+
#else
|
|
821
|
+
sched_yield();
|
|
822
|
+
#endif
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
PyLockStatus _NuitkaMutex_LockTimed(PyMutex *m) {
|
|
826
|
+
uint8_t v = _Py_atomic_load_uint8_relaxed(&m->_bits);
|
|
827
|
+
if ((v & _Py_LOCKED) == 0) {
|
|
828
|
+
if (_Py_atomic_compare_exchange_uint8(&m->_bits, &v, v | _Py_LOCKED)) {
|
|
829
|
+
return PY_LOCK_ACQUIRED;
|
|
830
|
+
}
|
|
831
|
+
} else {
|
|
832
|
+
return PY_LOCK_FAILURE;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
Py_ssize_t spin_count = 0;
|
|
836
|
+
|
|
837
|
+
for (;;) {
|
|
838
|
+
if ((v & _Py_LOCKED) == 0) {
|
|
839
|
+
if (_Py_atomic_compare_exchange_uint8(&m->_bits, &v, v | _Py_LOCKED)) {
|
|
840
|
+
return PY_LOCK_ACQUIRED;
|
|
841
|
+
}
|
|
842
|
+
continue;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
if (!(v & _Py_HAS_PARKED) && spin_count < MAX_SPIN_COUNT) {
|
|
846
|
+
// Spin for a bit.
|
|
847
|
+
_Nuitka_yield();
|
|
848
|
+
|
|
849
|
+
spin_count++;
|
|
850
|
+
continue;
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
return PY_LOCK_FAILURE;
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
static void _Nuitka_process_interp_queue(struct _Py_mem_interp_free_queue *queue, struct _qsbr_thread_state *qsbr) {
|
|
858
|
+
if (!_Py_atomic_load_int_relaxed(&queue->has_work)) {
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
// Try to acquire the lock, but don't block if it's already held.
|
|
863
|
+
if (_NuitkaMutex_LockTimed(&queue->mutex) == PY_LOCK_ACQUIRED) {
|
|
864
|
+
_Nuitka_process_queue(&queue->head, qsbr, false);
|
|
865
|
+
|
|
866
|
+
int more_work = !llist_empty(&queue->head);
|
|
867
|
+
_Py_atomic_store_int_relaxed(&queue->has_work, more_work);
|
|
868
|
+
|
|
869
|
+
PyMutex_Unlock(&queue->mutex);
|
|
870
|
+
}
|
|
632
871
|
}
|
|
872
|
+
|
|
873
|
+
void _NuitkaMem_ProcessDelayed(PyThreadState *tstate) {
|
|
874
|
+
PyInterpreterState *interp = tstate->interp;
|
|
875
|
+
_PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
|
|
876
|
+
|
|
877
|
+
// Release thread-local queue
|
|
878
|
+
_Nuitka_process_queue(&tstate_impl->mem_free_queue, tstate_impl->qsbr, true);
|
|
879
|
+
|
|
880
|
+
// Release interpreter queue
|
|
881
|
+
_Nuitka_process_interp_queue(&interp->mem_free_queue, tstate_impl->qsbr);
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
static void _NuitkaMem_FreeDelayed2(uintptr_t ptr) {
|
|
885
|
+
// Free immediately if possible.
|
|
886
|
+
if (_PyRuntime.stoptheworld.world_stopped) {
|
|
887
|
+
_NuitkaMem_free_work_item(ptr);
|
|
888
|
+
return;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
// Allocate an entry for later processing.
|
|
892
|
+
_PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET();
|
|
893
|
+
struct llist_node *head = &tstate->mem_free_queue;
|
|
894
|
+
|
|
895
|
+
struct _mem_work_chunk *buf = NULL;
|
|
896
|
+
if (!llist_empty(head)) {
|
|
897
|
+
// Try to reuse the last buffer
|
|
898
|
+
buf = llist_data(head->prev, struct _mem_work_chunk, node);
|
|
899
|
+
if (buf->wr_idx == WORK_ITEMS_PER_CHUNK) {
|
|
900
|
+
// already full
|
|
901
|
+
buf = NULL;
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
if (buf == NULL) {
|
|
906
|
+
buf = NuitkaMem_Calloc(1, sizeof(*buf));
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
assert(buf != NULL && buf->wr_idx < WORK_ITEMS_PER_CHUNK);
|
|
910
|
+
uint64_t seq = Nuitka_qsbr_deferred_advance(tstate->qsbr);
|
|
911
|
+
buf->array[buf->wr_idx].ptr = ptr;
|
|
912
|
+
buf->array[buf->wr_idx].qsbr_goal = seq;
|
|
913
|
+
buf->wr_idx++;
|
|
914
|
+
|
|
915
|
+
if (buf->wr_idx == WORK_ITEMS_PER_CHUNK) {
|
|
916
|
+
_NuitkaMem_ProcessDelayed((PyThreadState *)tstate);
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
void NuitkaMem_FreeDelayed(void *ptr) {
|
|
921
|
+
assert(!((uintptr_t)ptr & 0x01));
|
|
922
|
+
_NuitkaMem_FreeDelayed2((uintptr_t)ptr);
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
#endif
|
|
926
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
927
|
+
// integrates with CPython, but also works on its own.
|
|
928
|
+
//
|
|
929
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
930
|
+
// you may not use this file except in compliance with the License.
|
|
931
|
+
// You may obtain a copy of the License at
|
|
932
|
+
//
|
|
933
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
934
|
+
//
|
|
935
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
936
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
937
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
938
|
+
// See the License for the specific language governing permissions and
|
|
939
|
+
// limitations under the License.
|
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
2
|
-
//
|
|
3
|
-
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
4
|
-
// integrates with CPython, but also works on its own.
|
|
5
|
-
//
|
|
6
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
// you may not use this file except in compliance with the License.
|
|
8
|
-
// You may obtain a copy of the License at
|
|
9
|
-
//
|
|
10
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
//
|
|
12
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
// See the License for the specific language governing permissions and
|
|
16
|
-
// limitations under the License.
|
|
17
|
-
//
|
|
1
|
+
// Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
18
2
|
|
|
19
3
|
// This file is included from another C file, help IDEs to still parse it on
|
|
20
4
|
// its own.
|
|
@@ -22,25 +6,23 @@
|
|
|
22
6
|
#include "nuitka/prelude.h"
|
|
23
7
|
#endif
|
|
24
8
|
|
|
25
|
-
// spell-checker: ignore klass
|
|
26
|
-
|
|
27
9
|
#if PYTHON_VERSION < 0x300
|
|
28
|
-
PyObject *FIND_ATTRIBUTE_IN_CLASS(PyClassObject *
|
|
29
|
-
CHECK_OBJECT(
|
|
10
|
+
PyObject *FIND_ATTRIBUTE_IN_CLASS(PyClassObject *class_object, PyObject *attr_name) {
|
|
11
|
+
CHECK_OBJECT(class_object);
|
|
30
12
|
CHECK_OBJECT(attr_name);
|
|
31
13
|
|
|
32
|
-
assert(PyClass_Check(
|
|
14
|
+
assert(PyClass_Check(class_object));
|
|
33
15
|
assert(PyString_CheckExact(attr_name));
|
|
34
16
|
|
|
35
|
-
PyObject *result = GET_STRING_DICT_VALUE((PyDictObject *)
|
|
17
|
+
PyObject *result = GET_STRING_DICT_VALUE((PyDictObject *)class_object->cl_dict, (PyStringObject *)attr_name);
|
|
36
18
|
|
|
37
19
|
if (result == NULL) {
|
|
38
|
-
assert(PyTuple_Check(
|
|
20
|
+
assert(PyTuple_Check(class_object->cl_bases));
|
|
39
21
|
|
|
40
|
-
Py_ssize_t base_count = PyTuple_GET_SIZE(
|
|
22
|
+
Py_ssize_t base_count = PyTuple_GET_SIZE(class_object->cl_bases);
|
|
41
23
|
|
|
42
24
|
for (Py_ssize_t i = 0; i < base_count; i++) {
|
|
43
|
-
result = FIND_ATTRIBUTE_IN_CLASS((PyClassObject *)PyTuple_GET_ITEM(
|
|
25
|
+
result = FIND_ATTRIBUTE_IN_CLASS((PyClassObject *)PyTuple_GET_ITEM(class_object->cl_bases, i), attr_name);
|
|
44
26
|
|
|
45
27
|
if (result != NULL) {
|
|
46
28
|
break;
|
|
@@ -140,7 +122,7 @@ PyObject *LOOKUP_ATTRIBUTE(PyThreadState *tstate, PyObject *source, PyObject *at
|
|
|
140
122
|
if (NuitkaType_HasFeatureClass(Py_TYPE(descr))) {
|
|
141
123
|
func = Py_TYPE(descr)->tp_descr_get;
|
|
142
124
|
|
|
143
|
-
if (func != NULL &&
|
|
125
|
+
if (func != NULL && Nuitka_Descr_IsData(descr)) {
|
|
144
126
|
PyObject *result = func(descr, source, (PyObject *)type);
|
|
145
127
|
Py_DECREF(descr);
|
|
146
128
|
|
|
@@ -292,7 +274,7 @@ PyObject *LOOKUP_ATTRIBUTE_DICT_SLOT(PyThreadState *tstate, PyObject *source) {
|
|
|
292
274
|
if (NuitkaType_HasFeatureClass(Py_TYPE(descr))) {
|
|
293
275
|
func = Py_TYPE(descr)->tp_descr_get;
|
|
294
276
|
|
|
295
|
-
if (func != NULL &&
|
|
277
|
+
if (func != NULL && Nuitka_Descr_IsData(descr)) {
|
|
296
278
|
PyObject *result = func(descr, source, (PyObject *)type);
|
|
297
279
|
Py_DECREF(descr);
|
|
298
280
|
|
|
@@ -409,7 +391,7 @@ PyObject *LOOKUP_ATTRIBUTE_CLASS_SLOT(PyThreadState *tstate, PyObject *source) {
|
|
|
409
391
|
if (NuitkaType_HasFeatureClass(Py_TYPE(descr))) {
|
|
410
392
|
func = Py_TYPE(descr)->tp_descr_get;
|
|
411
393
|
|
|
412
|
-
if (func != NULL &&
|
|
394
|
+
if (func != NULL && Nuitka_Descr_IsData(descr)) {
|
|
413
395
|
PyObject *result = func(descr, source, (PyObject *)type);
|
|
414
396
|
Py_DECREF(descr);
|
|
415
397
|
|
|
@@ -574,7 +556,7 @@ bool HAS_ATTR_BOOL(PyThreadState *tstate, PyObject *source, PyObject *attr_name)
|
|
|
574
556
|
if (NuitkaType_HasFeatureClass(Py_TYPE(descr))) {
|
|
575
557
|
func = Py_TYPE(descr)->tp_descr_get;
|
|
576
558
|
|
|
577
|
-
if (func != NULL &&
|
|
559
|
+
if (func != NULL && Nuitka_Descr_IsData(descr)) {
|
|
578
560
|
PyObject *result = func(descr, source, (PyObject *)type);
|
|
579
561
|
Py_DECREF(descr);
|
|
580
562
|
|
|
@@ -743,7 +725,7 @@ int HAS_ATTR_BOOL2(PyThreadState *tstate, PyObject *source, PyObject *attr_name)
|
|
|
743
725
|
if (NuitkaType_HasFeatureClass(Py_TYPE(descr))) {
|
|
744
726
|
func = Py_TYPE(descr)->tp_descr_get;
|
|
745
727
|
|
|
746
|
-
if (func != NULL &&
|
|
728
|
+
if (func != NULL && Nuitka_Descr_IsData(descr)) {
|
|
747
729
|
PyObject *result = func(descr, source, (PyObject *)type);
|
|
748
730
|
Py_DECREF(descr);
|
|
749
731
|
|
|
@@ -945,7 +927,7 @@ static bool SET_ATTRIBUTE_GENERIC(PyThreadState *tstate, PyTypeObject *type, PyO
|
|
|
945
927
|
if (NuitkaType_HasFeatureClass(Py_TYPE(descr))) {
|
|
946
928
|
descrsetfunc func = Py_TYPE(descr)->tp_descr_set;
|
|
947
929
|
|
|
948
|
-
if (func != NULL &&
|
|
930
|
+
if (func != NULL && Nuitka_Descr_IsData(descr)) {
|
|
949
931
|
int res = func(descr, target, value);
|
|
950
932
|
Py_DECREF(descr);
|
|
951
933
|
|
|
@@ -991,7 +973,7 @@ static bool SET_ATTRIBUTE_GENERIC(PyThreadState *tstate, PyTypeObject *type, PyO
|
|
|
991
973
|
dict = *dict_pointer;
|
|
992
974
|
|
|
993
975
|
if (dict == NULL) {
|
|
994
|
-
dict = MAKE_DICT_EMPTY();
|
|
976
|
+
dict = MAKE_DICT_EMPTY(tstate);
|
|
995
977
|
*dict_pointer = dict;
|
|
996
978
|
}
|
|
997
979
|
}
|
|
@@ -1208,7 +1190,7 @@ PyObject *LOOKUP_SPECIAL(PyThreadState *tstate, PyObject *source, PyObject *attr
|
|
|
1208
1190
|
}
|
|
1209
1191
|
}
|
|
1210
1192
|
|
|
1211
|
-
#if PYTHON_VERSION <
|
|
1193
|
+
#if PYTHON_VERSION < 0x3b0
|
|
1212
1194
|
SET_CURRENT_EXCEPTION_TYPE0_VALUE0(tstate, PyExc_AttributeError, attr_name);
|
|
1213
1195
|
#else
|
|
1214
1196
|
// TODO: Maybe we should have dedicated variations with the 4 hard coded
|
|
@@ -1240,41 +1222,17 @@ PyObject *LOOKUP_MODULE_VALUE(PyDictObject *module_dict, PyObject *var_name) {
|
|
|
1240
1222
|
return result;
|
|
1241
1223
|
}
|
|
1242
1224
|
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
#endif
|
|
1258
|
-
|
|
1259
|
-
RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, NULL);
|
|
1260
|
-
}
|
|
1261
|
-
|
|
1262
|
-
return result;
|
|
1263
|
-
}
|
|
1264
|
-
|
|
1265
|
-
#if PYTHON_VERSION < 0x340
|
|
1266
|
-
PyObject *GET_MODULE_VARIABLE_VALUE_FALLBACK_IN_FUNCTION(PyThreadState *tstate, PyObject *variable_name) {
|
|
1267
|
-
PyObject *result = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)variable_name);
|
|
1268
|
-
|
|
1269
|
-
if (unlikely(result == NULL)) {
|
|
1270
|
-
PyObject *exception_type;
|
|
1271
|
-
PyObject *exception_value;
|
|
1272
|
-
|
|
1273
|
-
FORMAT_GLOBAL_NAME_ERROR(&exception_type, &exception_value, variable_name);
|
|
1274
|
-
|
|
1275
|
-
RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, NULL);
|
|
1276
|
-
}
|
|
1277
|
-
|
|
1278
|
-
return result;
|
|
1279
|
-
}
|
|
1280
|
-
#endif
|
|
1225
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1226
|
+
// integrates with CPython, but also works on its own.
|
|
1227
|
+
//
|
|
1228
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1229
|
+
// you may not use this file except in compliance with the License.
|
|
1230
|
+
// You may obtain a copy of the License at
|
|
1231
|
+
//
|
|
1232
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1233
|
+
//
|
|
1234
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1235
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1236
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1237
|
+
// See the License for the specific language governing permissions and
|
|
1238
|
+
// limitations under the License.
|