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
|
/* WARNING, this code is GENERATED. Modify the template HelperOperationInplace.c.j2 instead! */
|
|
19
4
|
|
|
20
5
|
/* This file is included from another C file, help IDEs to still parse it on its own. */
|
|
@@ -61,6 +46,7 @@ static inline bool _INPLACE_OPERATION_SUB_INT_INT(PyObject **operand1, PyObject
|
|
|
61
46
|
clong_result = x;
|
|
62
47
|
goto exit_result_ok_clong;
|
|
63
48
|
}
|
|
49
|
+
|
|
64
50
|
{
|
|
65
51
|
PyObject *operand1_object = *operand1;
|
|
66
52
|
PyObject *operand2_object = operand2;
|
|
@@ -79,7 +65,7 @@ exit_result_ok_clong:
|
|
|
79
65
|
|
|
80
66
|
// That's our return value then. As we use a dedicated variable, it's
|
|
81
67
|
// OK that way.
|
|
82
|
-
*operand1 =
|
|
68
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
83
69
|
goto exit_result_ok;
|
|
84
70
|
|
|
85
71
|
exit_result_object:
|
|
@@ -130,7 +116,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **op
|
|
|
130
116
|
goto exit_inplace_result_object;
|
|
131
117
|
}
|
|
132
118
|
|
|
133
|
-
|
|
119
|
+
Py_DECREF_IMMORTAL(x);
|
|
134
120
|
}
|
|
135
121
|
|
|
136
122
|
{
|
|
@@ -156,7 +142,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **op
|
|
|
156
142
|
goto exit_inplace_result_object;
|
|
157
143
|
}
|
|
158
144
|
|
|
159
|
-
|
|
145
|
+
Py_DECREF_IMMORTAL(x);
|
|
160
146
|
}
|
|
161
147
|
|
|
162
148
|
if (slot2 != NULL) {
|
|
@@ -167,7 +153,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **op
|
|
|
167
153
|
goto exit_inplace_result_object;
|
|
168
154
|
}
|
|
169
155
|
|
|
170
|
-
|
|
156
|
+
Py_DECREF_IMMORTAL(x);
|
|
171
157
|
}
|
|
172
158
|
|
|
173
159
|
#if PYTHON_VERSION < 0x300
|
|
@@ -244,7 +230,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **op
|
|
|
244
230
|
}
|
|
245
231
|
#endif
|
|
246
232
|
|
|
247
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
233
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and 'int'", type1->tp_name);
|
|
248
234
|
goto exit_inplace_exception;
|
|
249
235
|
}
|
|
250
236
|
|
|
@@ -304,6 +290,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **operand1, PyObje
|
|
|
304
290
|
clong_result = x;
|
|
305
291
|
goto exit_result_ok_clong;
|
|
306
292
|
}
|
|
293
|
+
|
|
307
294
|
{
|
|
308
295
|
PyObject *operand1_object = *operand1;
|
|
309
296
|
PyObject *operand2_object = operand2;
|
|
@@ -322,7 +309,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **operand1, PyObje
|
|
|
322
309
|
|
|
323
310
|
// That's our return value then. As we use a dedicated variable, it's
|
|
324
311
|
// OK that way.
|
|
325
|
-
*operand1 =
|
|
312
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
326
313
|
goto exit_result_ok;
|
|
327
314
|
|
|
328
315
|
exit_result_object:
|
|
@@ -392,7 +379,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **op
|
|
|
392
379
|
goto exit_inplace_result_object;
|
|
393
380
|
}
|
|
394
381
|
|
|
395
|
-
|
|
382
|
+
Py_DECREF_IMMORTAL(x);
|
|
396
383
|
slot2 = NULL;
|
|
397
384
|
}
|
|
398
385
|
}
|
|
@@ -404,7 +391,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **op
|
|
|
404
391
|
goto exit_inplace_result_object;
|
|
405
392
|
}
|
|
406
393
|
|
|
407
|
-
|
|
394
|
+
Py_DECREF_IMMORTAL(x);
|
|
408
395
|
}
|
|
409
396
|
|
|
410
397
|
if (slot2 != NULL) {
|
|
@@ -415,7 +402,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **op
|
|
|
415
402
|
goto exit_inplace_result_object;
|
|
416
403
|
}
|
|
417
404
|
|
|
418
|
-
|
|
405
|
+
Py_DECREF_IMMORTAL(x);
|
|
419
406
|
}
|
|
420
407
|
|
|
421
408
|
#if PYTHON_VERSION < 0x300
|
|
@@ -492,7 +479,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **op
|
|
|
492
479
|
}
|
|
493
480
|
#endif
|
|
494
481
|
|
|
495
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
482
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and '%s'", type2->tp_name);
|
|
496
483
|
goto exit_inplace_exception;
|
|
497
484
|
}
|
|
498
485
|
|
|
@@ -552,6 +539,7 @@ static inline bool _INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **operand1, PyObje
|
|
|
552
539
|
clong_result = x;
|
|
553
540
|
goto exit_result_ok_clong;
|
|
554
541
|
}
|
|
542
|
+
|
|
555
543
|
{
|
|
556
544
|
PyObject *operand1_object = *operand1;
|
|
557
545
|
PyObject *operand2_object = operand2;
|
|
@@ -570,7 +558,7 @@ static inline bool _INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **operand1, PyObje
|
|
|
570
558
|
|
|
571
559
|
// That's our return value then. As we use a dedicated variable, it's
|
|
572
560
|
// OK that way.
|
|
573
|
-
*operand1 =
|
|
561
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
574
562
|
goto exit_result_ok;
|
|
575
563
|
|
|
576
564
|
exit_result_object:
|
|
@@ -622,8 +610,8 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_LONG(PyObject **operand1, PyObjec
|
|
|
622
610
|
|
|
623
611
|
PyLongObject *operand2_long_object = (PyLongObject *)operand2;
|
|
624
612
|
|
|
625
|
-
if (
|
|
626
|
-
long r = MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object);
|
|
613
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
|
|
614
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object));
|
|
627
615
|
|
|
628
616
|
if (Py_REFCNT(*operand1) == 1) {
|
|
629
617
|
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
@@ -639,18 +627,18 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_LONG(PyObject **operand1, PyObjec
|
|
|
639
627
|
}
|
|
640
628
|
|
|
641
629
|
if (Py_REFCNT(*operand1) == 1) {
|
|
642
|
-
digit const *b_digits = operand2_long_object
|
|
643
|
-
Py_ssize_t b_digit_count =
|
|
630
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
631
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
644
632
|
|
|
645
|
-
bool a_negative =
|
|
646
|
-
bool b_negative =
|
|
633
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
634
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
647
635
|
|
|
648
636
|
if (a_negative) {
|
|
649
637
|
if (b_negative) {
|
|
650
638
|
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
651
639
|
} else {
|
|
652
640
|
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
653
|
-
|
|
641
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
654
642
|
}
|
|
655
643
|
} else {
|
|
656
644
|
if (b_negative) {
|
|
@@ -665,12 +653,12 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_LONG(PyObject **operand1, PyObjec
|
|
|
665
653
|
{
|
|
666
654
|
PyLongObject *z;
|
|
667
655
|
|
|
668
|
-
digit const *a_digits = operand1_long_object
|
|
669
|
-
Py_ssize_t a_digit_count =
|
|
670
|
-
bool a_negative =
|
|
671
|
-
digit const *b_digits = operand2_long_object
|
|
672
|
-
Py_ssize_t b_digit_count =
|
|
673
|
-
bool b_negative =
|
|
656
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
657
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
658
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
659
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
660
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
661
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
674
662
|
|
|
675
663
|
if (a_negative) {
|
|
676
664
|
if (b_negative) {
|
|
@@ -679,7 +667,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_LONG(PyObject **operand1, PyObjec
|
|
|
679
667
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
680
668
|
}
|
|
681
669
|
|
|
682
|
-
|
|
670
|
+
Nuitka_LongFlipSign(z);
|
|
683
671
|
} else {
|
|
684
672
|
if (b_negative) {
|
|
685
673
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
@@ -708,7 +696,7 @@ exit_result_ok_clong:
|
|
|
708
696
|
|
|
709
697
|
// That's our return value then. As we use a dedicated variable, it's
|
|
710
698
|
// OK that way.
|
|
711
|
-
*operand1 =
|
|
699
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
712
700
|
goto exit_result_ok;
|
|
713
701
|
|
|
714
702
|
exit_result_ok:
|
|
@@ -747,7 +735,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **o
|
|
|
747
735
|
goto exit_inplace_result_object;
|
|
748
736
|
}
|
|
749
737
|
|
|
750
|
-
|
|
738
|
+
Py_DECREF_IMMORTAL(x);
|
|
751
739
|
}
|
|
752
740
|
|
|
753
741
|
{
|
|
@@ -773,7 +761,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **o
|
|
|
773
761
|
goto exit_inplace_result_object;
|
|
774
762
|
}
|
|
775
763
|
|
|
776
|
-
|
|
764
|
+
Py_DECREF_IMMORTAL(x);
|
|
777
765
|
}
|
|
778
766
|
|
|
779
767
|
if (slot2 != NULL) {
|
|
@@ -784,7 +772,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **o
|
|
|
784
772
|
goto exit_inplace_result_object;
|
|
785
773
|
}
|
|
786
774
|
|
|
787
|
-
|
|
775
|
+
Py_DECREF_IMMORTAL(x);
|
|
788
776
|
}
|
|
789
777
|
|
|
790
778
|
#if PYTHON_VERSION < 0x300
|
|
@@ -862,9 +850,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **o
|
|
|
862
850
|
#endif
|
|
863
851
|
|
|
864
852
|
#if PYTHON_VERSION < 0x300
|
|
865
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
853
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and 'long'", type1->tp_name);
|
|
866
854
|
#else
|
|
867
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
855
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and 'int'", type1->tp_name);
|
|
868
856
|
#endif
|
|
869
857
|
goto exit_inplace_exception;
|
|
870
858
|
}
|
|
@@ -913,8 +901,8 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
913
901
|
|
|
914
902
|
PyLongObject *operand2_long_object = (PyLongObject *)operand2;
|
|
915
903
|
|
|
916
|
-
if (
|
|
917
|
-
long r = MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object);
|
|
904
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
|
|
905
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object));
|
|
918
906
|
|
|
919
907
|
if (Py_REFCNT(*operand1) == 1) {
|
|
920
908
|
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
@@ -930,18 +918,18 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
930
918
|
}
|
|
931
919
|
|
|
932
920
|
if (Py_REFCNT(*operand1) == 1) {
|
|
933
|
-
digit const *b_digits = operand2_long_object
|
|
934
|
-
Py_ssize_t b_digit_count =
|
|
921
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
922
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
935
923
|
|
|
936
|
-
bool a_negative =
|
|
937
|
-
bool b_negative =
|
|
924
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
925
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
938
926
|
|
|
939
927
|
if (a_negative) {
|
|
940
928
|
if (b_negative) {
|
|
941
929
|
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
942
930
|
} else {
|
|
943
931
|
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
944
|
-
|
|
932
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
945
933
|
}
|
|
946
934
|
} else {
|
|
947
935
|
if (b_negative) {
|
|
@@ -956,12 +944,12 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
956
944
|
{
|
|
957
945
|
PyLongObject *z;
|
|
958
946
|
|
|
959
|
-
digit const *a_digits = operand1_long_object
|
|
960
|
-
Py_ssize_t a_digit_count =
|
|
961
|
-
bool a_negative =
|
|
962
|
-
digit const *b_digits = operand2_long_object
|
|
963
|
-
Py_ssize_t b_digit_count =
|
|
964
|
-
bool b_negative =
|
|
947
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
948
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
949
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
950
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
951
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
952
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
965
953
|
|
|
966
954
|
if (a_negative) {
|
|
967
955
|
if (b_negative) {
|
|
@@ -970,7 +958,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
970
958
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
971
959
|
}
|
|
972
960
|
|
|
973
|
-
|
|
961
|
+
Nuitka_LongFlipSign(z);
|
|
974
962
|
} else {
|
|
975
963
|
if (b_negative) {
|
|
976
964
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
@@ -999,7 +987,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
999
987
|
|
|
1000
988
|
// That's our return value then. As we use a dedicated variable, it's
|
|
1001
989
|
// OK that way.
|
|
1002
|
-
*operand1 =
|
|
990
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
1003
991
|
goto exit_result_ok;
|
|
1004
992
|
|
|
1005
993
|
exit_result_ok:
|
|
@@ -1057,7 +1045,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **o
|
|
|
1057
1045
|
goto exit_inplace_result_object;
|
|
1058
1046
|
}
|
|
1059
1047
|
|
|
1060
|
-
|
|
1048
|
+
Py_DECREF_IMMORTAL(x);
|
|
1061
1049
|
slot2 = NULL;
|
|
1062
1050
|
}
|
|
1063
1051
|
}
|
|
@@ -1069,7 +1057,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **o
|
|
|
1069
1057
|
goto exit_inplace_result_object;
|
|
1070
1058
|
}
|
|
1071
1059
|
|
|
1072
|
-
|
|
1060
|
+
Py_DECREF_IMMORTAL(x);
|
|
1073
1061
|
}
|
|
1074
1062
|
|
|
1075
1063
|
if (slot2 != NULL) {
|
|
@@ -1080,7 +1068,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **o
|
|
|
1080
1068
|
goto exit_inplace_result_object;
|
|
1081
1069
|
}
|
|
1082
1070
|
|
|
1083
|
-
|
|
1071
|
+
Py_DECREF_IMMORTAL(x);
|
|
1084
1072
|
}
|
|
1085
1073
|
|
|
1086
1074
|
#if PYTHON_VERSION < 0x300
|
|
@@ -1158,9 +1146,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **o
|
|
|
1158
1146
|
#endif
|
|
1159
1147
|
|
|
1160
1148
|
#if PYTHON_VERSION < 0x300
|
|
1161
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1149
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'long' and '%s'", type2->tp_name);
|
|
1162
1150
|
#else
|
|
1163
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1151
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and '%s'", type2->tp_name);
|
|
1164
1152
|
#endif
|
|
1165
1153
|
goto exit_inplace_exception;
|
|
1166
1154
|
}
|
|
@@ -1209,8 +1197,8 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1209
1197
|
|
|
1210
1198
|
PyLongObject *operand2_long_object = (PyLongObject *)operand2;
|
|
1211
1199
|
|
|
1212
|
-
if (
|
|
1213
|
-
long r = MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object);
|
|
1200
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
|
|
1201
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object));
|
|
1214
1202
|
|
|
1215
1203
|
if (Py_REFCNT(*operand1) == 1) {
|
|
1216
1204
|
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
@@ -1226,18 +1214,18 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1226
1214
|
}
|
|
1227
1215
|
|
|
1228
1216
|
if (Py_REFCNT(*operand1) == 1) {
|
|
1229
|
-
digit const *b_digits = operand2_long_object
|
|
1230
|
-
Py_ssize_t b_digit_count =
|
|
1217
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
1218
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
1231
1219
|
|
|
1232
|
-
bool a_negative =
|
|
1233
|
-
bool b_negative =
|
|
1220
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
1221
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
1234
1222
|
|
|
1235
1223
|
if (a_negative) {
|
|
1236
1224
|
if (b_negative) {
|
|
1237
1225
|
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
1238
1226
|
} else {
|
|
1239
1227
|
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
1240
|
-
|
|
1228
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
1241
1229
|
}
|
|
1242
1230
|
} else {
|
|
1243
1231
|
if (b_negative) {
|
|
@@ -1252,12 +1240,12 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1252
1240
|
{
|
|
1253
1241
|
PyLongObject *z;
|
|
1254
1242
|
|
|
1255
|
-
digit const *a_digits = operand1_long_object
|
|
1256
|
-
Py_ssize_t a_digit_count =
|
|
1257
|
-
bool a_negative =
|
|
1258
|
-
digit const *b_digits = operand2_long_object
|
|
1259
|
-
Py_ssize_t b_digit_count =
|
|
1260
|
-
bool b_negative =
|
|
1243
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
1244
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
1245
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
1246
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
1247
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
1248
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
1261
1249
|
|
|
1262
1250
|
if (a_negative) {
|
|
1263
1251
|
if (b_negative) {
|
|
@@ -1266,7 +1254,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1266
1254
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
1267
1255
|
}
|
|
1268
1256
|
|
|
1269
|
-
|
|
1257
|
+
Nuitka_LongFlipSign(z);
|
|
1270
1258
|
} else {
|
|
1271
1259
|
if (b_negative) {
|
|
1272
1260
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
@@ -1295,7 +1283,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1295
1283
|
|
|
1296
1284
|
// That's our return value then. As we use a dedicated variable, it's
|
|
1297
1285
|
// OK that way.
|
|
1298
|
-
*operand1 =
|
|
1286
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
1299
1287
|
goto exit_result_ok;
|
|
1300
1288
|
|
|
1301
1289
|
exit_result_ok:
|
|
@@ -1390,7 +1378,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_FLOAT(PyObject **
|
|
|
1390
1378
|
goto exit_inplace_result_object;
|
|
1391
1379
|
}
|
|
1392
1380
|
|
|
1393
|
-
|
|
1381
|
+
Py_DECREF_IMMORTAL(x);
|
|
1394
1382
|
}
|
|
1395
1383
|
|
|
1396
1384
|
{
|
|
@@ -1416,7 +1404,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_FLOAT(PyObject **
|
|
|
1416
1404
|
goto exit_inplace_result_object;
|
|
1417
1405
|
}
|
|
1418
1406
|
|
|
1419
|
-
|
|
1407
|
+
Py_DECREF_IMMORTAL(x);
|
|
1420
1408
|
}
|
|
1421
1409
|
|
|
1422
1410
|
if (slot2 != NULL) {
|
|
@@ -1427,7 +1415,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_FLOAT(PyObject **
|
|
|
1427
1415
|
goto exit_inplace_result_object;
|
|
1428
1416
|
}
|
|
1429
1417
|
|
|
1430
|
-
|
|
1418
|
+
Py_DECREF_IMMORTAL(x);
|
|
1431
1419
|
}
|
|
1432
1420
|
|
|
1433
1421
|
#if PYTHON_VERSION < 0x300
|
|
@@ -1504,7 +1492,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_FLOAT(PyObject **
|
|
|
1504
1492
|
}
|
|
1505
1493
|
#endif
|
|
1506
1494
|
|
|
1507
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1495
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and 'float'", type1->tp_name);
|
|
1508
1496
|
goto exit_inplace_exception;
|
|
1509
1497
|
}
|
|
1510
1498
|
|
|
@@ -1625,7 +1613,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_FLOAT_OBJECT(PyObject **
|
|
|
1625
1613
|
goto exit_inplace_result_object;
|
|
1626
1614
|
}
|
|
1627
1615
|
|
|
1628
|
-
|
|
1616
|
+
Py_DECREF_IMMORTAL(x);
|
|
1629
1617
|
slot2 = NULL;
|
|
1630
1618
|
}
|
|
1631
1619
|
}
|
|
@@ -1637,7 +1625,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_FLOAT_OBJECT(PyObject **
|
|
|
1637
1625
|
goto exit_inplace_result_object;
|
|
1638
1626
|
}
|
|
1639
1627
|
|
|
1640
|
-
|
|
1628
|
+
Py_DECREF_IMMORTAL(x);
|
|
1641
1629
|
}
|
|
1642
1630
|
|
|
1643
1631
|
if (slot2 != NULL) {
|
|
@@ -1648,7 +1636,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_FLOAT_OBJECT(PyObject **
|
|
|
1648
1636
|
goto exit_inplace_result_object;
|
|
1649
1637
|
}
|
|
1650
1638
|
|
|
1651
|
-
|
|
1639
|
+
Py_DECREF_IMMORTAL(x);
|
|
1652
1640
|
}
|
|
1653
1641
|
|
|
1654
1642
|
#if PYTHON_VERSION < 0x300
|
|
@@ -1725,7 +1713,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_FLOAT_OBJECT(PyObject **
|
|
|
1725
1713
|
}
|
|
1726
1714
|
#endif
|
|
1727
1715
|
|
|
1728
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1716
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'float' and '%s'", type2->tp_name);
|
|
1729
1717
|
goto exit_inplace_exception;
|
|
1730
1718
|
}
|
|
1731
1719
|
|
|
@@ -1838,15 +1826,15 @@ static inline bool _INPLACE_OPERATION_SUB_FLOAT_LONG(PyObject **operand1, PyObje
|
|
|
1838
1826
|
goto exit_inplace_result_object;
|
|
1839
1827
|
}
|
|
1840
1828
|
|
|
1841
|
-
|
|
1829
|
+
Py_DECREF_IMMORTAL(x);
|
|
1842
1830
|
}
|
|
1843
1831
|
|
|
1844
1832
|
// Statically recognized that coercion is not possible with these types
|
|
1845
1833
|
|
|
1846
1834
|
#if PYTHON_VERSION < 0x300
|
|
1847
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1835
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'float' and 'long'");
|
|
1848
1836
|
#else
|
|
1849
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1837
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'float' and 'int'");
|
|
1850
1838
|
#endif
|
|
1851
1839
|
goto exit_inplace_exception;
|
|
1852
1840
|
}
|
|
@@ -1912,15 +1900,15 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_FLOAT(PyObject **operand1, PyObje
|
|
|
1912
1900
|
goto exit_inplace_result_object;
|
|
1913
1901
|
}
|
|
1914
1902
|
|
|
1915
|
-
|
|
1903
|
+
Py_DECREF_IMMORTAL(x);
|
|
1916
1904
|
}
|
|
1917
1905
|
|
|
1918
1906
|
// Statically recognized that coercion is not possible with these types
|
|
1919
1907
|
|
|
1920
1908
|
#if PYTHON_VERSION < 0x300
|
|
1921
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1909
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'long' and 'float'");
|
|
1922
1910
|
#else
|
|
1923
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1911
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and 'float'");
|
|
1924
1912
|
#endif
|
|
1925
1913
|
goto exit_inplace_exception;
|
|
1926
1914
|
}
|
|
@@ -1981,12 +1969,12 @@ static inline bool _INPLACE_OPERATION_SUB_FLOAT_INT(PyObject **operand1, PyObjec
|
|
|
1981
1969
|
goto exit_inplace_result_object;
|
|
1982
1970
|
}
|
|
1983
1971
|
|
|
1984
|
-
|
|
1972
|
+
Py_DECREF_IMMORTAL(x);
|
|
1985
1973
|
}
|
|
1986
1974
|
|
|
1987
1975
|
// Statically recognized that coercion is not possible with these types
|
|
1988
1976
|
|
|
1989
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1977
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'float' and 'int'");
|
|
1990
1978
|
goto exit_inplace_exception;
|
|
1991
1979
|
}
|
|
1992
1980
|
|
|
@@ -2053,12 +2041,12 @@ static inline bool _INPLACE_OPERATION_SUB_INT_FLOAT(PyObject **operand1, PyObjec
|
|
|
2053
2041
|
goto exit_inplace_result_object;
|
|
2054
2042
|
}
|
|
2055
2043
|
|
|
2056
|
-
|
|
2044
|
+
Py_DECREF_IMMORTAL(x);
|
|
2057
2045
|
}
|
|
2058
2046
|
|
|
2059
2047
|
// Statically recognized that coercion is not possible with these types
|
|
2060
2048
|
|
|
2061
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2049
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and 'float'");
|
|
2062
2050
|
goto exit_inplace_exception;
|
|
2063
2051
|
}
|
|
2064
2052
|
|
|
@@ -2119,12 +2107,12 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_INT(PyObject **operand1, PyObject
|
|
|
2119
2107
|
goto exit_inplace_result_object;
|
|
2120
2108
|
}
|
|
2121
2109
|
|
|
2122
|
-
|
|
2110
|
+
Py_DECREF_IMMORTAL(x);
|
|
2123
2111
|
}
|
|
2124
2112
|
|
|
2125
2113
|
// Statically recognized that coercion is not possible with these types
|
|
2126
2114
|
|
|
2127
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2115
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'long' and 'int'");
|
|
2128
2116
|
goto exit_inplace_exception;
|
|
2129
2117
|
}
|
|
2130
2118
|
|
|
@@ -2191,12 +2179,12 @@ static inline bool _INPLACE_OPERATION_SUB_INT_LONG(PyObject **operand1, PyObject
|
|
|
2191
2179
|
goto exit_inplace_result_object;
|
|
2192
2180
|
}
|
|
2193
2181
|
|
|
2194
|
-
|
|
2182
|
+
Py_DECREF_IMMORTAL(x);
|
|
2195
2183
|
}
|
|
2196
2184
|
|
|
2197
2185
|
// Statically recognized that coercion is not possible with these types
|
|
2198
2186
|
|
|
2199
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2187
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and 'long'");
|
|
2200
2188
|
goto exit_inplace_exception;
|
|
2201
2189
|
}
|
|
2202
2190
|
|
|
@@ -2256,9 +2244,10 @@ static inline bool _INPLACE_OPERATION_SUB_INT_CLONG(PyObject **operand1, long op
|
|
|
2256
2244
|
clong_result = x;
|
|
2257
2245
|
goto exit_result_ok_clong;
|
|
2258
2246
|
}
|
|
2247
|
+
|
|
2259
2248
|
{
|
|
2260
2249
|
PyObject *operand1_object = *operand1;
|
|
2261
|
-
PyObject *operand2_object =
|
|
2250
|
+
PyObject *operand2_object = Nuitka_PyLong_FromLong(operand2);
|
|
2262
2251
|
|
|
2263
2252
|
PyObject *r = PyLong_Type.tp_as_number->nb_subtract(operand1_object, operand2_object);
|
|
2264
2253
|
assert(r != Py_NotImplemented);
|
|
@@ -2276,7 +2265,7 @@ exit_result_ok_clong:
|
|
|
2276
2265
|
|
|
2277
2266
|
// That's our return value then. As we use a dedicated variable, it's
|
|
2278
2267
|
// OK that way.
|
|
2279
|
-
*operand1 =
|
|
2268
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
2280
2269
|
goto exit_result_ok;
|
|
2281
2270
|
|
|
2282
2271
|
exit_result_object:
|
|
@@ -2323,8 +2312,8 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2323
2312
|
|
|
2324
2313
|
PyLongObject *operand1_long_object = (PyLongObject *)*operand1;
|
|
2325
2314
|
|
|
2326
|
-
if (
|
|
2327
|
-
long r = MEDIUM_VALUE(operand1_long_object) - (sdigit)operand2;
|
|
2315
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
|
|
2316
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) - (sdigit)operand2);
|
|
2328
2317
|
|
|
2329
2318
|
if (Py_REFCNT(*operand1) == 1) {
|
|
2330
2319
|
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
@@ -2343,7 +2332,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2343
2332
|
digit const *b_digits = (digit *)&operand2;
|
|
2344
2333
|
Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
|
|
2345
2334
|
|
|
2346
|
-
bool a_negative =
|
|
2335
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
2347
2336
|
bool b_negative = operand2 < 0;
|
|
2348
2337
|
|
|
2349
2338
|
if (a_negative) {
|
|
@@ -2351,7 +2340,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2351
2340
|
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
2352
2341
|
} else {
|
|
2353
2342
|
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
2354
|
-
|
|
2343
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
2355
2344
|
}
|
|
2356
2345
|
} else {
|
|
2357
2346
|
if (b_negative) {
|
|
@@ -2366,9 +2355,9 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2366
2355
|
{
|
|
2367
2356
|
PyLongObject *z;
|
|
2368
2357
|
|
|
2369
|
-
digit const *a_digits = operand1_long_object
|
|
2370
|
-
Py_ssize_t a_digit_count =
|
|
2371
|
-
bool a_negative =
|
|
2358
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
2359
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
2360
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
2372
2361
|
digit const *b_digits = (digit *)&operand2;
|
|
2373
2362
|
Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
|
|
2374
2363
|
bool b_negative = operand2 < 0;
|
|
@@ -2380,7 +2369,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2380
2369
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2381
2370
|
}
|
|
2382
2371
|
|
|
2383
|
-
|
|
2372
|
+
Nuitka_LongFlipSign(z);
|
|
2384
2373
|
} else {
|
|
2385
2374
|
if (b_negative) {
|
|
2386
2375
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
@@ -2409,7 +2398,7 @@ exit_result_ok_clong:
|
|
|
2409
2398
|
|
|
2410
2399
|
// That's our return value then. As we use a dedicated variable, it's
|
|
2411
2400
|
// OK that way.
|
|
2412
|
-
*operand1 =
|
|
2401
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
2413
2402
|
goto exit_result_ok;
|
|
2414
2403
|
|
|
2415
2404
|
exit_result_ok:
|
|
@@ -2423,6 +2412,154 @@ bool INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long operand2) {
|
|
|
2423
2412
|
return _INPLACE_OPERATION_SUB_LONG_DIGIT(operand1, operand2);
|
|
2424
2413
|
}
|
|
2425
2414
|
|
|
2415
|
+
/* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "CLONG" to C platform long value. */
|
|
2416
|
+
static inline bool _INPLACE_OPERATION_SUB_LONG_CLONG(PyObject **operand1, long operand2) {
|
|
2417
|
+
assert(operand1); // Pointer must be non-null.
|
|
2418
|
+
|
|
2419
|
+
CHECK_OBJECT(*operand1);
|
|
2420
|
+
assert(PyLong_CheckExact(*operand1));
|
|
2421
|
+
|
|
2422
|
+
// Not every code path will make use of all possible results.
|
|
2423
|
+
#ifdef _MSC_VER
|
|
2424
|
+
#pragma warning(push)
|
|
2425
|
+
#pragma warning(disable : 4101)
|
|
2426
|
+
#endif
|
|
2427
|
+
NUITKA_MAY_BE_UNUSED PyObject *obj_result;
|
|
2428
|
+
NUITKA_MAY_BE_UNUSED long clong_result;
|
|
2429
|
+
#ifdef _MSC_VER
|
|
2430
|
+
#pragma warning(pop)
|
|
2431
|
+
#endif
|
|
2432
|
+
|
|
2433
|
+
PyLongObject *operand1_long_object = (PyLongObject *)*operand1;
|
|
2434
|
+
|
|
2435
|
+
bool operand2_is_negative;
|
|
2436
|
+
unsigned long operand2_abs_ival;
|
|
2437
|
+
|
|
2438
|
+
if (operand2 < 0) {
|
|
2439
|
+
operand2_abs_ival = (unsigned long)(-1 - operand2) + 1;
|
|
2440
|
+
operand2_is_negative = true;
|
|
2441
|
+
} else {
|
|
2442
|
+
operand2_abs_ival = (unsigned long)operand2;
|
|
2443
|
+
operand2_is_negative = false;
|
|
2444
|
+
}
|
|
2445
|
+
|
|
2446
|
+
Py_ssize_t operand2_digit_count = 0;
|
|
2447
|
+
digit operand2_digits[5] = {0}; // Could be more minimal and depend on sizeof(digit)
|
|
2448
|
+
{
|
|
2449
|
+
unsigned long t = operand2_abs_ival;
|
|
2450
|
+
|
|
2451
|
+
while (t != 0) {
|
|
2452
|
+
operand2_digit_count += 1;
|
|
2453
|
+
assert(operand2_digit_count <= (Py_ssize_t)(sizeof(operand2_digit_count) / sizeof(digit)));
|
|
2454
|
+
|
|
2455
|
+
operand2_digits[operand2_digit_count] = (digit)(t & PyLong_MASK);
|
|
2456
|
+
t >>= PyLong_SHIFT;
|
|
2457
|
+
}
|
|
2458
|
+
}
|
|
2459
|
+
|
|
2460
|
+
NUITKA_MAY_BE_UNUSED Py_ssize_t operand2_size =
|
|
2461
|
+
operand2_is_negative == false ? operand2_digit_count : -operand2_digit_count;
|
|
2462
|
+
|
|
2463
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && operand2_digit_count <= 1) {
|
|
2464
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) - (sdigit)operand2);
|
|
2465
|
+
|
|
2466
|
+
if (Py_REFCNT(*operand1) == 1) {
|
|
2467
|
+
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
2468
|
+
goto exit_result_ok;
|
|
2469
|
+
} else {
|
|
2470
|
+
PyObject *obj = Nuitka_LongFromCLong(r);
|
|
2471
|
+
|
|
2472
|
+
obj_result = obj;
|
|
2473
|
+
goto exit_result_object;
|
|
2474
|
+
}
|
|
2475
|
+
clong_result = r;
|
|
2476
|
+
goto exit_result_ok_clong;
|
|
2477
|
+
}
|
|
2478
|
+
|
|
2479
|
+
if (Py_REFCNT(*operand1) == 1) {
|
|
2480
|
+
digit const *b_digits = operand2_digits;
|
|
2481
|
+
Py_ssize_t b_digit_count = operand2_digit_count;
|
|
2482
|
+
|
|
2483
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
2484
|
+
bool b_negative = operand2_is_negative;
|
|
2485
|
+
|
|
2486
|
+
if (a_negative) {
|
|
2487
|
+
if (b_negative) {
|
|
2488
|
+
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
2489
|
+
} else {
|
|
2490
|
+
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
2491
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
2492
|
+
}
|
|
2493
|
+
} else {
|
|
2494
|
+
if (b_negative) {
|
|
2495
|
+
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
2496
|
+
} else {
|
|
2497
|
+
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, 1);
|
|
2498
|
+
}
|
|
2499
|
+
}
|
|
2500
|
+
|
|
2501
|
+
goto exit_result_ok;
|
|
2502
|
+
}
|
|
2503
|
+
{
|
|
2504
|
+
PyLongObject *z;
|
|
2505
|
+
|
|
2506
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
2507
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
2508
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
2509
|
+
digit const *b_digits = operand2_digits;
|
|
2510
|
+
Py_ssize_t b_digit_count = operand2_digit_count;
|
|
2511
|
+
bool b_negative = operand2_is_negative;
|
|
2512
|
+
|
|
2513
|
+
if (a_negative) {
|
|
2514
|
+
if (b_negative) {
|
|
2515
|
+
z = _Nuitka_LongSubDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2516
|
+
} else {
|
|
2517
|
+
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2518
|
+
}
|
|
2519
|
+
|
|
2520
|
+
Nuitka_LongFlipSign(z);
|
|
2521
|
+
} else {
|
|
2522
|
+
if (b_negative) {
|
|
2523
|
+
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2524
|
+
} else {
|
|
2525
|
+
z = _Nuitka_LongSubDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2526
|
+
}
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2529
|
+
obj_result = (PyObject *)z;
|
|
2530
|
+
goto exit_result_object;
|
|
2531
|
+
}
|
|
2532
|
+
|
|
2533
|
+
exit_result_object:
|
|
2534
|
+
if (unlikely(obj_result == NULL)) {
|
|
2535
|
+
goto exit_result_exception;
|
|
2536
|
+
}
|
|
2537
|
+
// We got an object handed, that we have to release.
|
|
2538
|
+
Py_DECREF(*operand1);
|
|
2539
|
+
*operand1 = obj_result;
|
|
2540
|
+
goto exit_result_ok;
|
|
2541
|
+
|
|
2542
|
+
exit_result_ok_clong:
|
|
2543
|
+
|
|
2544
|
+
// We got an object handed, that we have to release.
|
|
2545
|
+
Py_DECREF(*operand1);
|
|
2546
|
+
|
|
2547
|
+
// That's our return value then. As we use a dedicated variable, it's
|
|
2548
|
+
// OK that way.
|
|
2549
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
2550
|
+
goto exit_result_ok;
|
|
2551
|
+
|
|
2552
|
+
exit_result_ok:
|
|
2553
|
+
return true;
|
|
2554
|
+
|
|
2555
|
+
exit_result_exception:
|
|
2556
|
+
return false;
|
|
2557
|
+
}
|
|
2558
|
+
|
|
2559
|
+
bool INPLACE_OPERATION_SUB_LONG_CLONG(PyObject **operand1, long operand2) {
|
|
2560
|
+
return _INPLACE_OPERATION_SUB_LONG_CLONG(operand1, operand2);
|
|
2561
|
+
}
|
|
2562
|
+
|
|
2426
2563
|
/* Code referring to "FLOAT" corresponds to Python 'float' and "CFLOAT" to C platform float value. */
|
|
2427
2564
|
static inline bool _INPLACE_OPERATION_SUB_FLOAT_CFLOAT(PyObject **operand1, double operand2) {
|
|
2428
2565
|
assert(operand1); // Pointer must be non-null.
|
|
@@ -2509,6 +2646,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
2509
2646
|
clong_result = x;
|
|
2510
2647
|
goto exit_result_ok_clong;
|
|
2511
2648
|
}
|
|
2649
|
+
|
|
2512
2650
|
{
|
|
2513
2651
|
PyObject *operand1_object = *operand1;
|
|
2514
2652
|
PyObject *operand2_object = operand2;
|
|
@@ -2527,7 +2665,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
2527
2665
|
|
|
2528
2666
|
// That's our return value then. As we use a dedicated variable, it's
|
|
2529
2667
|
// OK that way.
|
|
2530
|
-
*operand1 =
|
|
2668
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
2531
2669
|
goto exit_result_ok;
|
|
2532
2670
|
|
|
2533
2671
|
exit_result_object:
|
|
@@ -2583,7 +2721,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
2583
2721
|
goto exit_inplace_result_object;
|
|
2584
2722
|
}
|
|
2585
2723
|
|
|
2586
|
-
|
|
2724
|
+
Py_DECREF_IMMORTAL(x);
|
|
2587
2725
|
}
|
|
2588
2726
|
|
|
2589
2727
|
{
|
|
@@ -2612,7 +2750,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
2612
2750
|
goto exit_inplace_result_object;
|
|
2613
2751
|
}
|
|
2614
2752
|
|
|
2615
|
-
|
|
2753
|
+
Py_DECREF_IMMORTAL(x);
|
|
2616
2754
|
slot2 = NULL;
|
|
2617
2755
|
}
|
|
2618
2756
|
}
|
|
@@ -2624,7 +2762,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
2624
2762
|
goto exit_inplace_result_object;
|
|
2625
2763
|
}
|
|
2626
2764
|
|
|
2627
|
-
|
|
2765
|
+
Py_DECREF_IMMORTAL(x);
|
|
2628
2766
|
}
|
|
2629
2767
|
|
|
2630
2768
|
if (slot2 != NULL) {
|
|
@@ -2635,7 +2773,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
2635
2773
|
goto exit_inplace_result_object;
|
|
2636
2774
|
}
|
|
2637
2775
|
|
|
2638
|
-
|
|
2776
|
+
Py_DECREF_IMMORTAL(x);
|
|
2639
2777
|
}
|
|
2640
2778
|
|
|
2641
2779
|
#if PYTHON_VERSION < 0x300
|
|
@@ -2713,7 +2851,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
2713
2851
|
}
|
|
2714
2852
|
#endif
|
|
2715
2853
|
|
|
2716
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2854
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and '%s'", type1->tp_name,
|
|
2717
2855
|
type2->tp_name);
|
|
2718
2856
|
goto exit_inplace_exception;
|
|
2719
2857
|
}
|
|
@@ -2739,3 +2877,18 @@ exit_inplace_exception:
|
|
|
2739
2877
|
bool INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyObject *operand2) {
|
|
2740
2878
|
return _INPLACE_OPERATION_SUB_OBJECT_OBJECT(operand1, operand2);
|
|
2741
2879
|
}
|
|
2880
|
+
|
|
2881
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
2882
|
+
// integrates with CPython, but also works on its own.
|
|
2883
|
+
//
|
|
2884
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
2885
|
+
// you may not use this file except in compliance with the License.
|
|
2886
|
+
// You may obtain a copy of the License at
|
|
2887
|
+
//
|
|
2888
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2889
|
+
//
|
|
2890
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
2891
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2892
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2893
|
+
// See the License for the specific language governing permissions and
|
|
2894
|
+
// limitations under the License.
|