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. */
|
|
@@ -62,6 +47,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_INT(PyObject **operand1, PyObject
|
|
|
62
47
|
clong_result = x;
|
|
63
48
|
goto exit_result_ok_clong;
|
|
64
49
|
}
|
|
50
|
+
|
|
65
51
|
{
|
|
66
52
|
PyObject *operand1_object = *operand1;
|
|
67
53
|
PyObject *operand2_object = operand2;
|
|
@@ -80,7 +66,7 @@ exit_result_ok_clong:
|
|
|
80
66
|
|
|
81
67
|
// That's our return value then. As we use a dedicated variable, it's
|
|
82
68
|
// OK that way.
|
|
83
|
-
*operand1 =
|
|
69
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
84
70
|
goto exit_result_ok;
|
|
85
71
|
|
|
86
72
|
exit_result_object:
|
|
@@ -131,7 +117,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
|
|
|
131
117
|
goto exit_inplace_result_object;
|
|
132
118
|
}
|
|
133
119
|
|
|
134
|
-
|
|
120
|
+
Py_DECREF_IMMORTAL(x);
|
|
135
121
|
}
|
|
136
122
|
|
|
137
123
|
{
|
|
@@ -157,7 +143,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
|
|
|
157
143
|
goto exit_inplace_result_object;
|
|
158
144
|
}
|
|
159
145
|
|
|
160
|
-
|
|
146
|
+
Py_DECREF_IMMORTAL(x);
|
|
161
147
|
}
|
|
162
148
|
|
|
163
149
|
if (slot2 != NULL) {
|
|
@@ -168,7 +154,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
|
|
|
168
154
|
goto exit_inplace_result_object;
|
|
169
155
|
}
|
|
170
156
|
|
|
171
|
-
|
|
157
|
+
Py_DECREF_IMMORTAL(x);
|
|
172
158
|
}
|
|
173
159
|
|
|
174
160
|
#if PYTHON_VERSION < 0x300
|
|
@@ -260,7 +246,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
|
|
|
260
246
|
}
|
|
261
247
|
}
|
|
262
248
|
|
|
263
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
249
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'int'", type1->tp_name);
|
|
264
250
|
goto exit_inplace_exception;
|
|
265
251
|
}
|
|
266
252
|
|
|
@@ -320,6 +306,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **operand1, PyObje
|
|
|
320
306
|
clong_result = x;
|
|
321
307
|
goto exit_result_ok_clong;
|
|
322
308
|
}
|
|
309
|
+
|
|
323
310
|
{
|
|
324
311
|
PyObject *operand1_object = *operand1;
|
|
325
312
|
PyObject *operand2_object = operand2;
|
|
@@ -338,7 +325,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **operand1, PyObje
|
|
|
338
325
|
|
|
339
326
|
// That's our return value then. As we use a dedicated variable, it's
|
|
340
327
|
// OK that way.
|
|
341
|
-
*operand1 =
|
|
328
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
342
329
|
goto exit_result_ok;
|
|
343
330
|
|
|
344
331
|
exit_result_object:
|
|
@@ -407,7 +394,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
|
|
|
407
394
|
goto exit_inplace_result_object;
|
|
408
395
|
}
|
|
409
396
|
|
|
410
|
-
|
|
397
|
+
Py_DECREF_IMMORTAL(x);
|
|
411
398
|
slot2 = NULL;
|
|
412
399
|
}
|
|
413
400
|
}
|
|
@@ -419,7 +406,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
|
|
|
419
406
|
goto exit_inplace_result_object;
|
|
420
407
|
}
|
|
421
408
|
|
|
422
|
-
|
|
409
|
+
Py_DECREF_IMMORTAL(x);
|
|
423
410
|
}
|
|
424
411
|
|
|
425
412
|
if (slot2 != NULL) {
|
|
@@ -430,7 +417,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
|
|
|
430
417
|
goto exit_inplace_result_object;
|
|
431
418
|
}
|
|
432
419
|
|
|
433
|
-
|
|
420
|
+
Py_DECREF_IMMORTAL(x);
|
|
434
421
|
}
|
|
435
422
|
|
|
436
423
|
#if PYTHON_VERSION < 0x300
|
|
@@ -512,7 +499,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
|
|
|
512
499
|
// No inplace sequence repeat slot sq_inplace_concat available for this type.
|
|
513
500
|
}
|
|
514
501
|
|
|
515
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
502
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and '%s'", type2->tp_name);
|
|
516
503
|
goto exit_inplace_exception;
|
|
517
504
|
}
|
|
518
505
|
|
|
@@ -572,6 +559,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **operand1, PyObje
|
|
|
572
559
|
clong_result = x;
|
|
573
560
|
goto exit_result_ok_clong;
|
|
574
561
|
}
|
|
562
|
+
|
|
575
563
|
{
|
|
576
564
|
PyObject *operand1_object = *operand1;
|
|
577
565
|
PyObject *operand2_object = operand2;
|
|
@@ -590,7 +578,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **operand1, PyObje
|
|
|
590
578
|
|
|
591
579
|
// That's our return value then. As we use a dedicated variable, it's
|
|
592
580
|
// OK that way.
|
|
593
|
-
*operand1 =
|
|
581
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
594
582
|
goto exit_result_ok;
|
|
595
583
|
|
|
596
584
|
exit_result_object:
|
|
@@ -642,11 +630,11 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_LONG(PyObject **operand1, PyObjec
|
|
|
642
630
|
|
|
643
631
|
PyLongObject *operand2_long_object = (PyLongObject *)operand2;
|
|
644
632
|
|
|
645
|
-
if (
|
|
646
|
-
long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
|
|
633
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
|
|
634
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
|
|
647
635
|
|
|
648
636
|
if (Py_REFCNT(*operand1) == 1) {
|
|
649
|
-
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
637
|
+
Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
|
|
650
638
|
goto exit_result_ok;
|
|
651
639
|
} else {
|
|
652
640
|
PyObject *obj = Nuitka_LongFromCLong(r);
|
|
@@ -659,16 +647,16 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_LONG(PyObject **operand1, PyObjec
|
|
|
659
647
|
}
|
|
660
648
|
|
|
661
649
|
if (Py_REFCNT(*operand1) == 1) {
|
|
662
|
-
digit const *b_digits = operand2_long_object
|
|
663
|
-
Py_ssize_t b_digit_count =
|
|
650
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
651
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
664
652
|
|
|
665
|
-
bool a_negative =
|
|
666
|
-
bool b_negative =
|
|
653
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
654
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
667
655
|
|
|
668
656
|
if (a_negative) {
|
|
669
657
|
if (b_negative) {
|
|
670
658
|
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
671
|
-
|
|
659
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
672
660
|
} else {
|
|
673
661
|
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
674
662
|
}
|
|
@@ -685,17 +673,17 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_LONG(PyObject **operand1, PyObjec
|
|
|
685
673
|
{
|
|
686
674
|
PyLongObject *z;
|
|
687
675
|
|
|
688
|
-
digit const *a_digits = operand1_long_object
|
|
689
|
-
Py_ssize_t a_digit_count =
|
|
690
|
-
bool a_negative =
|
|
691
|
-
digit const *b_digits = operand2_long_object
|
|
692
|
-
Py_ssize_t b_digit_count =
|
|
693
|
-
bool b_negative =
|
|
676
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
677
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
678
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
679
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
680
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
681
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
694
682
|
|
|
695
683
|
if (a_negative) {
|
|
696
684
|
if (b_negative) {
|
|
697
685
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
698
|
-
|
|
686
|
+
Nuitka_LongFlipSign(z);
|
|
699
687
|
} else {
|
|
700
688
|
z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
|
|
701
689
|
}
|
|
@@ -727,7 +715,7 @@ exit_result_ok_clong:
|
|
|
727
715
|
|
|
728
716
|
// That's our return value then. As we use a dedicated variable, it's
|
|
729
717
|
// OK that way.
|
|
730
|
-
*operand1 =
|
|
718
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
731
719
|
goto exit_result_ok;
|
|
732
720
|
|
|
733
721
|
exit_result_ok:
|
|
@@ -766,7 +754,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
|
|
|
766
754
|
goto exit_inplace_result_object;
|
|
767
755
|
}
|
|
768
756
|
|
|
769
|
-
|
|
757
|
+
Py_DECREF_IMMORTAL(x);
|
|
770
758
|
}
|
|
771
759
|
|
|
772
760
|
{
|
|
@@ -792,7 +780,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
|
|
|
792
780
|
goto exit_inplace_result_object;
|
|
793
781
|
}
|
|
794
782
|
|
|
795
|
-
|
|
783
|
+
Py_DECREF_IMMORTAL(x);
|
|
796
784
|
}
|
|
797
785
|
|
|
798
786
|
if (slot2 != NULL) {
|
|
@@ -803,7 +791,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
|
|
|
803
791
|
goto exit_inplace_result_object;
|
|
804
792
|
}
|
|
805
793
|
|
|
806
|
-
|
|
794
|
+
Py_DECREF_IMMORTAL(x);
|
|
807
795
|
}
|
|
808
796
|
|
|
809
797
|
#if PYTHON_VERSION < 0x300
|
|
@@ -896,9 +884,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
|
|
|
896
884
|
}
|
|
897
885
|
|
|
898
886
|
#if PYTHON_VERSION < 0x300
|
|
899
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
887
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'long'", type1->tp_name);
|
|
900
888
|
#else
|
|
901
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
889
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'int'", type1->tp_name);
|
|
902
890
|
#endif
|
|
903
891
|
goto exit_inplace_exception;
|
|
904
892
|
}
|
|
@@ -947,11 +935,11 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
947
935
|
|
|
948
936
|
PyLongObject *operand2_long_object = (PyLongObject *)operand2;
|
|
949
937
|
|
|
950
|
-
if (
|
|
951
|
-
long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
|
|
938
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
|
|
939
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
|
|
952
940
|
|
|
953
941
|
if (Py_REFCNT(*operand1) == 1) {
|
|
954
|
-
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
942
|
+
Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
|
|
955
943
|
goto exit_result_ok;
|
|
956
944
|
} else {
|
|
957
945
|
PyObject *obj = Nuitka_LongFromCLong(r);
|
|
@@ -964,16 +952,16 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
964
952
|
}
|
|
965
953
|
|
|
966
954
|
if (Py_REFCNT(*operand1) == 1) {
|
|
967
|
-
digit const *b_digits = operand2_long_object
|
|
968
|
-
Py_ssize_t b_digit_count =
|
|
955
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
956
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
969
957
|
|
|
970
|
-
bool a_negative =
|
|
971
|
-
bool b_negative =
|
|
958
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
959
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
972
960
|
|
|
973
961
|
if (a_negative) {
|
|
974
962
|
if (b_negative) {
|
|
975
963
|
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
976
|
-
|
|
964
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
977
965
|
} else {
|
|
978
966
|
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
979
967
|
}
|
|
@@ -990,17 +978,17 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
990
978
|
{
|
|
991
979
|
PyLongObject *z;
|
|
992
980
|
|
|
993
|
-
digit const *a_digits = operand1_long_object
|
|
994
|
-
Py_ssize_t a_digit_count =
|
|
995
|
-
bool a_negative =
|
|
996
|
-
digit const *b_digits = operand2_long_object
|
|
997
|
-
Py_ssize_t b_digit_count =
|
|
998
|
-
bool b_negative =
|
|
981
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
982
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
983
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
984
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
985
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
986
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
999
987
|
|
|
1000
988
|
if (a_negative) {
|
|
1001
989
|
if (b_negative) {
|
|
1002
990
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
1003
|
-
|
|
991
|
+
Nuitka_LongFlipSign(z);
|
|
1004
992
|
} else {
|
|
1005
993
|
z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
|
|
1006
994
|
}
|
|
@@ -1032,7 +1020,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **operand1, PyObj
|
|
|
1032
1020
|
|
|
1033
1021
|
// That's our return value then. As we use a dedicated variable, it's
|
|
1034
1022
|
// OK that way.
|
|
1035
|
-
*operand1 =
|
|
1023
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
1036
1024
|
goto exit_result_ok;
|
|
1037
1025
|
|
|
1038
1026
|
exit_result_ok:
|
|
@@ -1089,7 +1077,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
|
|
|
1089
1077
|
goto exit_inplace_result_object;
|
|
1090
1078
|
}
|
|
1091
1079
|
|
|
1092
|
-
|
|
1080
|
+
Py_DECREF_IMMORTAL(x);
|
|
1093
1081
|
slot2 = NULL;
|
|
1094
1082
|
}
|
|
1095
1083
|
}
|
|
@@ -1101,7 +1089,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
|
|
|
1101
1089
|
goto exit_inplace_result_object;
|
|
1102
1090
|
}
|
|
1103
1091
|
|
|
1104
|
-
|
|
1092
|
+
Py_DECREF_IMMORTAL(x);
|
|
1105
1093
|
}
|
|
1106
1094
|
|
|
1107
1095
|
if (slot2 != NULL) {
|
|
@@ -1112,7 +1100,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
|
|
|
1112
1100
|
goto exit_inplace_result_object;
|
|
1113
1101
|
}
|
|
1114
1102
|
|
|
1115
|
-
|
|
1103
|
+
Py_DECREF_IMMORTAL(x);
|
|
1116
1104
|
}
|
|
1117
1105
|
|
|
1118
1106
|
#if PYTHON_VERSION < 0x300
|
|
@@ -1195,9 +1183,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
|
|
|
1195
1183
|
}
|
|
1196
1184
|
|
|
1197
1185
|
#if PYTHON_VERSION < 0x300
|
|
1198
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1186
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'long' and '%s'", type2->tp_name);
|
|
1199
1187
|
#else
|
|
1200
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1188
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and '%s'", type2->tp_name);
|
|
1201
1189
|
#endif
|
|
1202
1190
|
goto exit_inplace_exception;
|
|
1203
1191
|
}
|
|
@@ -1246,11 +1234,11 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1246
1234
|
|
|
1247
1235
|
PyLongObject *operand2_long_object = (PyLongObject *)operand2;
|
|
1248
1236
|
|
|
1249
|
-
if (
|
|
1250
|
-
long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
|
|
1237
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
|
|
1238
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
|
|
1251
1239
|
|
|
1252
1240
|
if (Py_REFCNT(*operand1) == 1) {
|
|
1253
|
-
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
1241
|
+
Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
|
|
1254
1242
|
goto exit_result_ok;
|
|
1255
1243
|
} else {
|
|
1256
1244
|
PyObject *obj = Nuitka_LongFromCLong(r);
|
|
@@ -1263,16 +1251,16 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1263
1251
|
}
|
|
1264
1252
|
|
|
1265
1253
|
if (Py_REFCNT(*operand1) == 1) {
|
|
1266
|
-
digit const *b_digits = operand2_long_object
|
|
1267
|
-
Py_ssize_t b_digit_count =
|
|
1254
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
1255
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
1268
1256
|
|
|
1269
|
-
bool a_negative =
|
|
1270
|
-
bool b_negative =
|
|
1257
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
1258
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
1271
1259
|
|
|
1272
1260
|
if (a_negative) {
|
|
1273
1261
|
if (b_negative) {
|
|
1274
1262
|
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
1275
|
-
|
|
1263
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
1276
1264
|
} else {
|
|
1277
1265
|
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
1278
1266
|
}
|
|
@@ -1289,17 +1277,17 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1289
1277
|
{
|
|
1290
1278
|
PyLongObject *z;
|
|
1291
1279
|
|
|
1292
|
-
digit const *a_digits = operand1_long_object
|
|
1293
|
-
Py_ssize_t a_digit_count =
|
|
1294
|
-
bool a_negative =
|
|
1295
|
-
digit const *b_digits = operand2_long_object
|
|
1296
|
-
Py_ssize_t b_digit_count =
|
|
1297
|
-
bool b_negative =
|
|
1280
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
1281
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
1282
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
1283
|
+
digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
|
|
1284
|
+
Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
|
|
1285
|
+
bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
|
|
1298
1286
|
|
|
1299
1287
|
if (a_negative) {
|
|
1300
1288
|
if (b_negative) {
|
|
1301
1289
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
1302
|
-
|
|
1290
|
+
Nuitka_LongFlipSign(z);
|
|
1303
1291
|
} else {
|
|
1304
1292
|
z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
|
|
1305
1293
|
}
|
|
@@ -1331,7 +1319,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **operand1, PyObj
|
|
|
1331
1319
|
|
|
1332
1320
|
// That's our return value then. As we use a dedicated variable, it's
|
|
1333
1321
|
// OK that way.
|
|
1334
|
-
*operand1 =
|
|
1322
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
1335
1323
|
goto exit_result_ok;
|
|
1336
1324
|
|
|
1337
1325
|
exit_result_ok:
|
|
@@ -1426,7 +1414,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
|
|
|
1426
1414
|
goto exit_inplace_result_object;
|
|
1427
1415
|
}
|
|
1428
1416
|
|
|
1429
|
-
|
|
1417
|
+
Py_DECREF_IMMORTAL(x);
|
|
1430
1418
|
}
|
|
1431
1419
|
|
|
1432
1420
|
{
|
|
@@ -1452,7 +1440,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
|
|
|
1452
1440
|
goto exit_inplace_result_object;
|
|
1453
1441
|
}
|
|
1454
1442
|
|
|
1455
|
-
|
|
1443
|
+
Py_DECREF_IMMORTAL(x);
|
|
1456
1444
|
}
|
|
1457
1445
|
|
|
1458
1446
|
if (slot2 != NULL) {
|
|
@@ -1463,7 +1451,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
|
|
|
1463
1451
|
goto exit_inplace_result_object;
|
|
1464
1452
|
}
|
|
1465
1453
|
|
|
1466
|
-
|
|
1454
|
+
Py_DECREF_IMMORTAL(x);
|
|
1467
1455
|
}
|
|
1468
1456
|
|
|
1469
1457
|
#if PYTHON_VERSION < 0x300
|
|
@@ -1555,7 +1543,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
|
|
|
1555
1543
|
}
|
|
1556
1544
|
}
|
|
1557
1545
|
|
|
1558
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1546
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'float'", type1->tp_name);
|
|
1559
1547
|
goto exit_inplace_exception;
|
|
1560
1548
|
}
|
|
1561
1549
|
|
|
@@ -1675,7 +1663,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
|
|
|
1675
1663
|
goto exit_inplace_result_object;
|
|
1676
1664
|
}
|
|
1677
1665
|
|
|
1678
|
-
|
|
1666
|
+
Py_DECREF_IMMORTAL(x);
|
|
1679
1667
|
slot2 = NULL;
|
|
1680
1668
|
}
|
|
1681
1669
|
}
|
|
@@ -1687,7 +1675,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
|
|
|
1687
1675
|
goto exit_inplace_result_object;
|
|
1688
1676
|
}
|
|
1689
1677
|
|
|
1690
|
-
|
|
1678
|
+
Py_DECREF_IMMORTAL(x);
|
|
1691
1679
|
}
|
|
1692
1680
|
|
|
1693
1681
|
if (slot2 != NULL) {
|
|
@@ -1698,7 +1686,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
|
|
|
1698
1686
|
goto exit_inplace_result_object;
|
|
1699
1687
|
}
|
|
1700
1688
|
|
|
1701
|
-
|
|
1689
|
+
Py_DECREF_IMMORTAL(x);
|
|
1702
1690
|
}
|
|
1703
1691
|
|
|
1704
1692
|
#if PYTHON_VERSION < 0x300
|
|
@@ -1780,7 +1768,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
|
|
|
1780
1768
|
// No inplace sequence repeat slot sq_inplace_concat available for this type.
|
|
1781
1769
|
}
|
|
1782
1770
|
|
|
1783
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1771
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'float' and '%s'", type2->tp_name);
|
|
1784
1772
|
goto exit_inplace_exception;
|
|
1785
1773
|
}
|
|
1786
1774
|
|
|
@@ -1893,7 +1881,7 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_LONG(PyObject **operand1, PyObje
|
|
|
1893
1881
|
goto exit_inplace_result_object;
|
|
1894
1882
|
}
|
|
1895
1883
|
|
|
1896
|
-
|
|
1884
|
+
Py_DECREF_IMMORTAL(x);
|
|
1897
1885
|
}
|
|
1898
1886
|
|
|
1899
1887
|
// Statically recognized that coercion is not possible with these types
|
|
@@ -1904,9 +1892,9 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_LONG(PyObject **operand1, PyObje
|
|
|
1904
1892
|
}
|
|
1905
1893
|
|
|
1906
1894
|
#if PYTHON_VERSION < 0x300
|
|
1907
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1895
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'float' and 'long'");
|
|
1908
1896
|
#else
|
|
1909
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1897
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'float' and 'int'");
|
|
1910
1898
|
#endif
|
|
1911
1899
|
goto exit_inplace_exception;
|
|
1912
1900
|
}
|
|
@@ -1972,7 +1960,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_FLOAT(PyObject **operand1, PyObje
|
|
|
1972
1960
|
goto exit_inplace_result_object;
|
|
1973
1961
|
}
|
|
1974
1962
|
|
|
1975
|
-
|
|
1963
|
+
Py_DECREF_IMMORTAL(x);
|
|
1976
1964
|
}
|
|
1977
1965
|
|
|
1978
1966
|
// Statically recognized that coercion is not possible with these types
|
|
@@ -1983,9 +1971,9 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_FLOAT(PyObject **operand1, PyObje
|
|
|
1983
1971
|
}
|
|
1984
1972
|
|
|
1985
1973
|
#if PYTHON_VERSION < 0x300
|
|
1986
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1974
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'long' and 'float'");
|
|
1987
1975
|
#else
|
|
1988
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
1976
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and 'float'");
|
|
1989
1977
|
#endif
|
|
1990
1978
|
goto exit_inplace_exception;
|
|
1991
1979
|
}
|
|
@@ -2046,7 +2034,7 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_INT(PyObject **operand1, PyObjec
|
|
|
2046
2034
|
goto exit_inplace_result_object;
|
|
2047
2035
|
}
|
|
2048
2036
|
|
|
2049
|
-
|
|
2037
|
+
Py_DECREF_IMMORTAL(x);
|
|
2050
2038
|
}
|
|
2051
2039
|
|
|
2052
2040
|
// Statically recognized that coercion is not possible with these types
|
|
@@ -2056,7 +2044,7 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_INT(PyObject **operand1, PyObjec
|
|
|
2056
2044
|
// No inplace sequence repeat slot sq_inplace_concat available for this type.
|
|
2057
2045
|
}
|
|
2058
2046
|
|
|
2059
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2047
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'float' and 'int'");
|
|
2060
2048
|
goto exit_inplace_exception;
|
|
2061
2049
|
}
|
|
2062
2050
|
|
|
@@ -2123,7 +2111,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_FLOAT(PyObject **operand1, PyObjec
|
|
|
2123
2111
|
goto exit_inplace_result_object;
|
|
2124
2112
|
}
|
|
2125
2113
|
|
|
2126
|
-
|
|
2114
|
+
Py_DECREF_IMMORTAL(x);
|
|
2127
2115
|
}
|
|
2128
2116
|
|
|
2129
2117
|
// Statically recognized that coercion is not possible with these types
|
|
@@ -2133,7 +2121,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_FLOAT(PyObject **operand1, PyObjec
|
|
|
2133
2121
|
// No inplace sequence repeat slot sq_inplace_concat available for this type.
|
|
2134
2122
|
}
|
|
2135
2123
|
|
|
2136
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2124
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and 'float'");
|
|
2137
2125
|
goto exit_inplace_exception;
|
|
2138
2126
|
}
|
|
2139
2127
|
|
|
@@ -2194,7 +2182,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_INT(PyObject **operand1, PyObject
|
|
|
2194
2182
|
goto exit_inplace_result_object;
|
|
2195
2183
|
}
|
|
2196
2184
|
|
|
2197
|
-
|
|
2185
|
+
Py_DECREF_IMMORTAL(x);
|
|
2198
2186
|
}
|
|
2199
2187
|
|
|
2200
2188
|
// Statically recognized that coercion is not possible with these types
|
|
@@ -2204,7 +2192,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_INT(PyObject **operand1, PyObject
|
|
|
2204
2192
|
// No inplace sequence repeat slot sq_inplace_concat available for this type.
|
|
2205
2193
|
}
|
|
2206
2194
|
|
|
2207
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2195
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'long' and 'int'");
|
|
2208
2196
|
goto exit_inplace_exception;
|
|
2209
2197
|
}
|
|
2210
2198
|
|
|
@@ -2271,7 +2259,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_LONG(PyObject **operand1, PyObject
|
|
|
2271
2259
|
goto exit_inplace_result_object;
|
|
2272
2260
|
}
|
|
2273
2261
|
|
|
2274
|
-
|
|
2262
|
+
Py_DECREF_IMMORTAL(x);
|
|
2275
2263
|
}
|
|
2276
2264
|
|
|
2277
2265
|
// Statically recognized that coercion is not possible with these types
|
|
@@ -2281,7 +2269,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_LONG(PyObject **operand1, PyObject
|
|
|
2281
2269
|
// No inplace sequence repeat slot sq_inplace_concat available for this type.
|
|
2282
2270
|
}
|
|
2283
2271
|
|
|
2284
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2272
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and 'long'");
|
|
2285
2273
|
goto exit_inplace_exception;
|
|
2286
2274
|
}
|
|
2287
2275
|
|
|
@@ -2341,9 +2329,10 @@ static inline bool _INPLACE_OPERATION_ADD_INT_CLONG(PyObject **operand1, long op
|
|
|
2341
2329
|
clong_result = x;
|
|
2342
2330
|
goto exit_result_ok_clong;
|
|
2343
2331
|
}
|
|
2332
|
+
|
|
2344
2333
|
{
|
|
2345
2334
|
PyObject *operand1_object = *operand1;
|
|
2346
|
-
PyObject *operand2_object =
|
|
2335
|
+
PyObject *operand2_object = Nuitka_PyLong_FromLong(operand2);
|
|
2347
2336
|
|
|
2348
2337
|
PyObject *r = PyLong_Type.tp_as_number->nb_add(operand1_object, operand2_object);
|
|
2349
2338
|
assert(r != Py_NotImplemented);
|
|
@@ -2361,7 +2350,7 @@ exit_result_ok_clong:
|
|
|
2361
2350
|
|
|
2362
2351
|
// That's our return value then. As we use a dedicated variable, it's
|
|
2363
2352
|
// OK that way.
|
|
2364
|
-
*operand1 =
|
|
2353
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
2365
2354
|
goto exit_result_ok;
|
|
2366
2355
|
|
|
2367
2356
|
exit_result_object:
|
|
@@ -2408,11 +2397,11 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2408
2397
|
|
|
2409
2398
|
PyLongObject *operand1_long_object = (PyLongObject *)*operand1;
|
|
2410
2399
|
|
|
2411
|
-
if (
|
|
2412
|
-
long r = MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2;
|
|
2400
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
|
|
2401
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2);
|
|
2413
2402
|
|
|
2414
2403
|
if (Py_REFCNT(*operand1) == 1) {
|
|
2415
|
-
Nuitka_LongUpdateFromCLong(&*operand1, r);
|
|
2404
|
+
Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
|
|
2416
2405
|
goto exit_result_ok;
|
|
2417
2406
|
} else {
|
|
2418
2407
|
PyObject *obj = Nuitka_LongFromCLong(r);
|
|
@@ -2428,13 +2417,13 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2428
2417
|
digit const *b_digits = (digit *)&operand2;
|
|
2429
2418
|
Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
|
|
2430
2419
|
|
|
2431
|
-
bool a_negative =
|
|
2420
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
2432
2421
|
bool b_negative = operand2 < 0;
|
|
2433
2422
|
|
|
2434
2423
|
if (a_negative) {
|
|
2435
2424
|
if (b_negative) {
|
|
2436
2425
|
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
2437
|
-
|
|
2426
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
2438
2427
|
} else {
|
|
2439
2428
|
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
2440
2429
|
}
|
|
@@ -2451,9 +2440,9 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2451
2440
|
{
|
|
2452
2441
|
PyLongObject *z;
|
|
2453
2442
|
|
|
2454
|
-
digit const *a_digits = operand1_long_object
|
|
2455
|
-
Py_ssize_t a_digit_count =
|
|
2456
|
-
bool a_negative =
|
|
2443
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
2444
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
2445
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
2457
2446
|
digit const *b_digits = (digit *)&operand2;
|
|
2458
2447
|
Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
|
|
2459
2448
|
bool b_negative = operand2 < 0;
|
|
@@ -2461,7 +2450,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long o
|
|
|
2461
2450
|
if (a_negative) {
|
|
2462
2451
|
if (b_negative) {
|
|
2463
2452
|
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2464
|
-
|
|
2453
|
+
Nuitka_LongFlipSign(z);
|
|
2465
2454
|
} else {
|
|
2466
2455
|
z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
|
|
2467
2456
|
}
|
|
@@ -2493,7 +2482,7 @@ exit_result_ok_clong:
|
|
|
2493
2482
|
|
|
2494
2483
|
// That's our return value then. As we use a dedicated variable, it's
|
|
2495
2484
|
// OK that way.
|
|
2496
|
-
*operand1 =
|
|
2485
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
2497
2486
|
goto exit_result_ok;
|
|
2498
2487
|
|
|
2499
2488
|
exit_result_ok:
|
|
@@ -2507,6 +2496,153 @@ bool INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long operand2) {
|
|
|
2507
2496
|
return _INPLACE_OPERATION_ADD_LONG_DIGIT(operand1, operand2);
|
|
2508
2497
|
}
|
|
2509
2498
|
|
|
2499
|
+
/* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "CLONG" to C platform long value. */
|
|
2500
|
+
static inline bool _INPLACE_OPERATION_ADD_LONG_CLONG(PyObject **operand1, long operand2) {
|
|
2501
|
+
assert(operand1); // Pointer must be non-null.
|
|
2502
|
+
|
|
2503
|
+
CHECK_OBJECT(*operand1);
|
|
2504
|
+
assert(PyLong_CheckExact(*operand1));
|
|
2505
|
+
|
|
2506
|
+
// Not every code path will make use of all possible results.
|
|
2507
|
+
#ifdef _MSC_VER
|
|
2508
|
+
#pragma warning(push)
|
|
2509
|
+
#pragma warning(disable : 4101)
|
|
2510
|
+
#endif
|
|
2511
|
+
NUITKA_MAY_BE_UNUSED PyObject *obj_result;
|
|
2512
|
+
NUITKA_MAY_BE_UNUSED long clong_result;
|
|
2513
|
+
#ifdef _MSC_VER
|
|
2514
|
+
#pragma warning(pop)
|
|
2515
|
+
#endif
|
|
2516
|
+
|
|
2517
|
+
PyLongObject *operand1_long_object = (PyLongObject *)*operand1;
|
|
2518
|
+
|
|
2519
|
+
bool operand2_is_negative;
|
|
2520
|
+
unsigned long operand2_abs_ival;
|
|
2521
|
+
|
|
2522
|
+
if (operand2 < 0) {
|
|
2523
|
+
operand2_abs_ival = (unsigned long)(-1 - operand2) + 1;
|
|
2524
|
+
operand2_is_negative = true;
|
|
2525
|
+
} else {
|
|
2526
|
+
operand2_abs_ival = (unsigned long)operand2;
|
|
2527
|
+
operand2_is_negative = false;
|
|
2528
|
+
}
|
|
2529
|
+
|
|
2530
|
+
Py_ssize_t operand2_digit_count = 0;
|
|
2531
|
+
digit operand2_digits[5] = {0}; // Could be more minimal and depend on sizeof(digit)
|
|
2532
|
+
{
|
|
2533
|
+
unsigned long t = operand2_abs_ival;
|
|
2534
|
+
|
|
2535
|
+
while (t != 0) {
|
|
2536
|
+
operand2_digit_count += 1;
|
|
2537
|
+
assert(operand2_digit_count <= (Py_ssize_t)(sizeof(operand2_digit_count) / sizeof(digit)));
|
|
2538
|
+
|
|
2539
|
+
operand2_digits[operand2_digit_count] = (digit)(t & PyLong_MASK);
|
|
2540
|
+
t >>= PyLong_SHIFT;
|
|
2541
|
+
}
|
|
2542
|
+
}
|
|
2543
|
+
|
|
2544
|
+
NUITKA_MAY_BE_UNUSED Py_ssize_t operand2_size =
|
|
2545
|
+
operand2_is_negative == false ? operand2_digit_count : -operand2_digit_count;
|
|
2546
|
+
|
|
2547
|
+
if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && operand2_digit_count <= 1) {
|
|
2548
|
+
long r = (long)(MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2);
|
|
2549
|
+
|
|
2550
|
+
if (Py_REFCNT(*operand1) == 1) {
|
|
2551
|
+
Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
|
|
2552
|
+
goto exit_result_ok;
|
|
2553
|
+
} else {
|
|
2554
|
+
PyObject *obj = Nuitka_LongFromCLong(r);
|
|
2555
|
+
|
|
2556
|
+
obj_result = obj;
|
|
2557
|
+
goto exit_result_object;
|
|
2558
|
+
}
|
|
2559
|
+
clong_result = r;
|
|
2560
|
+
goto exit_result_ok_clong;
|
|
2561
|
+
}
|
|
2562
|
+
|
|
2563
|
+
if (Py_REFCNT(*operand1) == 1) {
|
|
2564
|
+
digit const *b_digits = operand2_digits;
|
|
2565
|
+
Py_ssize_t b_digit_count = operand2_digit_count;
|
|
2566
|
+
|
|
2567
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
2568
|
+
bool b_negative = operand2_is_negative;
|
|
2569
|
+
|
|
2570
|
+
if (a_negative) {
|
|
2571
|
+
if (b_negative) {
|
|
2572
|
+
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
2573
|
+
Nuitka_LongSetSignNegative(*operand1);
|
|
2574
|
+
} else {
|
|
2575
|
+
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
|
|
2576
|
+
}
|
|
2577
|
+
} else {
|
|
2578
|
+
if (b_negative) {
|
|
2579
|
+
*operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, 1);
|
|
2580
|
+
} else {
|
|
2581
|
+
*operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
|
|
2582
|
+
}
|
|
2583
|
+
}
|
|
2584
|
+
|
|
2585
|
+
goto exit_result_ok;
|
|
2586
|
+
}
|
|
2587
|
+
{
|
|
2588
|
+
PyLongObject *z;
|
|
2589
|
+
|
|
2590
|
+
digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
|
|
2591
|
+
Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
|
|
2592
|
+
bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
|
|
2593
|
+
digit const *b_digits = operand2_digits;
|
|
2594
|
+
Py_ssize_t b_digit_count = operand2_digit_count;
|
|
2595
|
+
bool b_negative = operand2_is_negative;
|
|
2596
|
+
|
|
2597
|
+
if (a_negative) {
|
|
2598
|
+
if (b_negative) {
|
|
2599
|
+
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2600
|
+
Nuitka_LongFlipSign(z);
|
|
2601
|
+
} else {
|
|
2602
|
+
z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
|
|
2603
|
+
}
|
|
2604
|
+
} else {
|
|
2605
|
+
if (b_negative) {
|
|
2606
|
+
z = _Nuitka_LongSubDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2607
|
+
} else {
|
|
2608
|
+
z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2612
|
+
obj_result = (PyObject *)z;
|
|
2613
|
+
goto exit_result_object;
|
|
2614
|
+
}
|
|
2615
|
+
|
|
2616
|
+
exit_result_object:
|
|
2617
|
+
if (unlikely(obj_result == NULL)) {
|
|
2618
|
+
goto exit_result_exception;
|
|
2619
|
+
}
|
|
2620
|
+
// We got an object handed, that we have to release.
|
|
2621
|
+
Py_DECREF(*operand1);
|
|
2622
|
+
*operand1 = obj_result;
|
|
2623
|
+
goto exit_result_ok;
|
|
2624
|
+
|
|
2625
|
+
exit_result_ok_clong:
|
|
2626
|
+
|
|
2627
|
+
// We got an object handed, that we have to release.
|
|
2628
|
+
Py_DECREF(*operand1);
|
|
2629
|
+
|
|
2630
|
+
// That's our return value then. As we use a dedicated variable, it's
|
|
2631
|
+
// OK that way.
|
|
2632
|
+
*operand1 = Nuitka_PyLong_FromLong(clong_result);
|
|
2633
|
+
goto exit_result_ok;
|
|
2634
|
+
|
|
2635
|
+
exit_result_ok:
|
|
2636
|
+
return true;
|
|
2637
|
+
|
|
2638
|
+
exit_result_exception:
|
|
2639
|
+
return false;
|
|
2640
|
+
}
|
|
2641
|
+
|
|
2642
|
+
bool INPLACE_OPERATION_ADD_LONG_CLONG(PyObject **operand1, long operand2) {
|
|
2643
|
+
return _INPLACE_OPERATION_ADD_LONG_CLONG(operand1, operand2);
|
|
2644
|
+
}
|
|
2645
|
+
|
|
2510
2646
|
/* Code referring to "FLOAT" corresponds to Python 'float' and "CFLOAT" to C platform float value. */
|
|
2511
2647
|
static inline bool _INPLACE_OPERATION_ADD_FLOAT_CFLOAT(PyObject **operand1, double operand2) {
|
|
2512
2648
|
assert(operand1); // Pointer must be non-null.
|
|
@@ -2567,7 +2703,7 @@ static inline bool _INPLACE_OPERATION_ADD_STR_STR(PyObject **operand1, PyObject
|
|
|
2567
2703
|
assert(PyString_CheckExact(operand2));
|
|
2568
2704
|
|
|
2569
2705
|
if (Py_REFCNT(*operand1) == 1) {
|
|
2570
|
-
// We more or less own the operand, so we might
|
|
2706
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
2571
2707
|
// execute stuff in-place.
|
|
2572
2708
|
#if PYTHON_VERSION < 0x300
|
|
2573
2709
|
if (1 && !PyString_CHECK_INTERNED(*operand1) && 1) {
|
|
@@ -2645,7 +2781,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **op
|
|
|
2645
2781
|
goto exit_inplace_result_object;
|
|
2646
2782
|
}
|
|
2647
2783
|
|
|
2648
|
-
|
|
2784
|
+
Py_DECREF_IMMORTAL(x);
|
|
2649
2785
|
}
|
|
2650
2786
|
|
|
2651
2787
|
{
|
|
@@ -2660,7 +2796,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **op
|
|
|
2660
2796
|
goto exit_inplace_result_object;
|
|
2661
2797
|
}
|
|
2662
2798
|
|
|
2663
|
-
|
|
2799
|
+
Py_DECREF_IMMORTAL(x);
|
|
2664
2800
|
}
|
|
2665
2801
|
|
|
2666
2802
|
#if PYTHON_VERSION < 0x300
|
|
@@ -2718,7 +2854,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **op
|
|
|
2718
2854
|
}
|
|
2719
2855
|
}
|
|
2720
2856
|
|
|
2721
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
2857
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'str'", type1->tp_name);
|
|
2722
2858
|
goto exit_inplace_exception;
|
|
2723
2859
|
}
|
|
2724
2860
|
|
|
@@ -2747,7 +2883,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **operand1, PyObje
|
|
|
2747
2883
|
assert(PyString_CheckExact(operand2));
|
|
2748
2884
|
|
|
2749
2885
|
if (Py_REFCNT(*operand1) == 1) {
|
|
2750
|
-
// We more or less own the operand, so we might
|
|
2886
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
2751
2887
|
// execute stuff in-place.
|
|
2752
2888
|
#if PYTHON_VERSION < 0x300
|
|
2753
2889
|
if (PyString_CheckExact(*operand1) && !PyString_CHECK_INTERNED(*operand1) && 1) {
|
|
@@ -2829,7 +2965,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_STR_OBJECT(PyObject **op
|
|
|
2829
2965
|
goto exit_inplace_result_object;
|
|
2830
2966
|
}
|
|
2831
2967
|
|
|
2832
|
-
|
|
2968
|
+
Py_DECREF_IMMORTAL(x);
|
|
2833
2969
|
}
|
|
2834
2970
|
|
|
2835
2971
|
#if PYTHON_VERSION < 0x300
|
|
@@ -2908,7 +3044,7 @@ static inline bool _INPLACE_OPERATION_ADD_STR_OBJECT(PyObject **operand1, PyObje
|
|
|
2908
3044
|
CHECK_OBJECT(operand2);
|
|
2909
3045
|
|
|
2910
3046
|
if (Py_REFCNT(*operand1) == 1) {
|
|
2911
|
-
// We more or less own the operand, so we might
|
|
3047
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
2912
3048
|
// execute stuff in-place.
|
|
2913
3049
|
#if PYTHON_VERSION < 0x300
|
|
2914
3050
|
if (1 && !PyString_CHECK_INTERNED(*operand1) && PyString_CheckExact(operand2)) {
|
|
@@ -2967,7 +3103,7 @@ static inline bool _INPLACE_OPERATION_ADD_UNICODE_UNICODE(PyObject **operand1, P
|
|
|
2967
3103
|
assert(PyUnicode_CheckExact(operand2));
|
|
2968
3104
|
|
|
2969
3105
|
if (Py_REFCNT(*operand1) == 1) {
|
|
2970
|
-
// We more or less own the operand, so we might
|
|
3106
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
2971
3107
|
// execute stuff in-place.
|
|
2972
3108
|
|
|
2973
3109
|
#if PYTHON_VERSION >= 0x300
|
|
@@ -3037,7 +3173,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject
|
|
|
3037
3173
|
goto exit_inplace_result_object;
|
|
3038
3174
|
}
|
|
3039
3175
|
|
|
3040
|
-
|
|
3176
|
+
Py_DECREF_IMMORTAL(x);
|
|
3041
3177
|
}
|
|
3042
3178
|
|
|
3043
3179
|
{
|
|
@@ -3052,7 +3188,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject
|
|
|
3052
3188
|
goto exit_inplace_result_object;
|
|
3053
3189
|
}
|
|
3054
3190
|
|
|
3055
|
-
|
|
3191
|
+
Py_DECREF_IMMORTAL(x);
|
|
3056
3192
|
}
|
|
3057
3193
|
|
|
3058
3194
|
#if PYTHON_VERSION < 0x300
|
|
@@ -3111,9 +3247,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject
|
|
|
3111
3247
|
}
|
|
3112
3248
|
|
|
3113
3249
|
#if PYTHON_VERSION < 0x300
|
|
3114
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
3250
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'unicode'", type1->tp_name);
|
|
3115
3251
|
#else
|
|
3116
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
3252
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'str'", type1->tp_name);
|
|
3117
3253
|
#endif
|
|
3118
3254
|
goto exit_inplace_exception;
|
|
3119
3255
|
}
|
|
@@ -3143,7 +3279,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject **operand1, Py
|
|
|
3143
3279
|
assert(PyUnicode_CheckExact(operand2));
|
|
3144
3280
|
|
|
3145
3281
|
if (Py_REFCNT(*operand1) == 1) {
|
|
3146
|
-
// We more or less own the operand, so we might
|
|
3282
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
3147
3283
|
// execute stuff in-place.
|
|
3148
3284
|
|
|
3149
3285
|
#if PYTHON_VERSION >= 0x300
|
|
@@ -3229,7 +3365,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_UNICODE_OBJECT(PyObject
|
|
|
3229
3365
|
goto exit_inplace_result_object;
|
|
3230
3366
|
}
|
|
3231
3367
|
|
|
3232
|
-
|
|
3368
|
+
Py_DECREF_IMMORTAL(x);
|
|
3233
3369
|
}
|
|
3234
3370
|
|
|
3235
3371
|
#if PYTHON_VERSION < 0x300
|
|
@@ -3308,7 +3444,7 @@ static inline bool _INPLACE_OPERATION_ADD_UNICODE_OBJECT(PyObject **operand1, Py
|
|
|
3308
3444
|
CHECK_OBJECT(operand2);
|
|
3309
3445
|
|
|
3310
3446
|
if (Py_REFCNT(*operand1) == 1) {
|
|
3311
|
-
// We more or less own the operand, so we might
|
|
3447
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
3312
3448
|
// execute stuff in-place.
|
|
3313
3449
|
|
|
3314
3450
|
#if PYTHON_VERSION >= 0x300
|
|
@@ -3372,7 +3508,7 @@ static inline bool _INPLACE_OPERATION_ADD_BYTES_BYTES(PyObject **operand1, PyObj
|
|
|
3372
3508
|
assert(PyBytes_CheckExact(operand2));
|
|
3373
3509
|
|
|
3374
3510
|
if (Py_REFCNT(*operand1) == 1) {
|
|
3375
|
-
// We more or less own the operand, so we might
|
|
3511
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
3376
3512
|
// execute stuff in-place.
|
|
3377
3513
|
|
|
3378
3514
|
#if PYTHON_VERSION >= 0x300
|
|
@@ -3439,7 +3575,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **
|
|
|
3439
3575
|
goto exit_inplace_result_object;
|
|
3440
3576
|
}
|
|
3441
3577
|
|
|
3442
|
-
|
|
3578
|
+
Py_DECREF_IMMORTAL(x);
|
|
3443
3579
|
}
|
|
3444
3580
|
|
|
3445
3581
|
{
|
|
@@ -3454,7 +3590,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **
|
|
|
3454
3590
|
goto exit_inplace_result_object;
|
|
3455
3591
|
}
|
|
3456
3592
|
|
|
3457
|
-
|
|
3593
|
+
Py_DECREF_IMMORTAL(x);
|
|
3458
3594
|
}
|
|
3459
3595
|
|
|
3460
3596
|
#if PYTHON_VERSION < 0x300
|
|
@@ -3512,7 +3648,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **
|
|
|
3512
3648
|
}
|
|
3513
3649
|
}
|
|
3514
3650
|
|
|
3515
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
3651
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'bytes'", type1->tp_name);
|
|
3516
3652
|
goto exit_inplace_exception;
|
|
3517
3653
|
}
|
|
3518
3654
|
|
|
@@ -3541,7 +3677,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **operand1, PyOb
|
|
|
3541
3677
|
assert(PyBytes_CheckExact(operand2));
|
|
3542
3678
|
|
|
3543
3679
|
if (Py_REFCNT(*operand1) == 1) {
|
|
3544
|
-
// We more or less own the operand, so we might
|
|
3680
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
3545
3681
|
// execute stuff in-place.
|
|
3546
3682
|
|
|
3547
3683
|
#if PYTHON_VERSION >= 0x300
|
|
@@ -3624,7 +3760,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_BYTES_OBJECT(PyObject **
|
|
|
3624
3760
|
goto exit_inplace_result_object;
|
|
3625
3761
|
}
|
|
3626
3762
|
|
|
3627
|
-
|
|
3763
|
+
Py_DECREF_IMMORTAL(x);
|
|
3628
3764
|
}
|
|
3629
3765
|
|
|
3630
3766
|
#if PYTHON_VERSION < 0x300
|
|
@@ -3703,7 +3839,7 @@ static inline bool _INPLACE_OPERATION_ADD_BYTES_OBJECT(PyObject **operand1, PyOb
|
|
|
3703
3839
|
CHECK_OBJECT(operand2);
|
|
3704
3840
|
|
|
3705
3841
|
if (Py_REFCNT(*operand1) == 1) {
|
|
3706
|
-
// We more or less own the operand, so we might
|
|
3842
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
3707
3843
|
// execute stuff in-place.
|
|
3708
3844
|
|
|
3709
3845
|
#if PYTHON_VERSION >= 0x300
|
|
@@ -3777,7 +3913,10 @@ static inline bool _INPLACE_OPERATION_ADD_TUPLE_TUPLE(PyObject **operand1, PyObj
|
|
|
3777
3913
|
// Not every code path will make use of all possible results.
|
|
3778
3914
|
NUITKA_MAY_BE_UNUSED PyObject *obj_result;
|
|
3779
3915
|
|
|
3780
|
-
|
|
3916
|
+
// TODO: Have this more globally passed in
|
|
3917
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
3918
|
+
|
|
3919
|
+
PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
|
|
3781
3920
|
|
|
3782
3921
|
assert(x != Py_NotImplemented);
|
|
3783
3922
|
obj_result = x;
|
|
@@ -3829,7 +3968,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **
|
|
|
3829
3968
|
goto exit_inplace_result_object;
|
|
3830
3969
|
}
|
|
3831
3970
|
|
|
3832
|
-
|
|
3971
|
+
Py_DECREF_IMMORTAL(x);
|
|
3833
3972
|
}
|
|
3834
3973
|
|
|
3835
3974
|
{
|
|
@@ -3844,7 +3983,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **
|
|
|
3844
3983
|
goto exit_inplace_result_object;
|
|
3845
3984
|
}
|
|
3846
3985
|
|
|
3847
|
-
|
|
3986
|
+
Py_DECREF_IMMORTAL(x);
|
|
3848
3987
|
}
|
|
3849
3988
|
|
|
3850
3989
|
#if PYTHON_VERSION < 0x300
|
|
@@ -3902,7 +4041,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **
|
|
|
3902
4041
|
}
|
|
3903
4042
|
}
|
|
3904
4043
|
|
|
3905
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
4044
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'tuple'", type1->tp_name);
|
|
3906
4045
|
goto exit_inplace_exception;
|
|
3907
4046
|
}
|
|
3908
4047
|
|
|
@@ -3938,7 +4077,10 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **operand1, PyOb
|
|
|
3938
4077
|
// Not every code path will make use of all possible results.
|
|
3939
4078
|
NUITKA_MAY_BE_UNUSED PyObject *obj_result;
|
|
3940
4079
|
|
|
3941
|
-
|
|
4080
|
+
// TODO: Have this more globally passed in
|
|
4081
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
4082
|
+
|
|
4083
|
+
PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
|
|
3942
4084
|
|
|
3943
4085
|
assert(x != Py_NotImplemented);
|
|
3944
4086
|
obj_result = x;
|
|
@@ -4001,7 +4143,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_TUPLE_OBJECT(PyObject **
|
|
|
4001
4143
|
goto exit_inplace_result_object;
|
|
4002
4144
|
}
|
|
4003
4145
|
|
|
4004
|
-
|
|
4146
|
+
Py_DECREF_IMMORTAL(x);
|
|
4005
4147
|
}
|
|
4006
4148
|
|
|
4007
4149
|
#if PYTHON_VERSION < 0x300
|
|
@@ -4100,7 +4242,10 @@ static inline bool _INPLACE_OPERATION_ADD_TUPLE_OBJECT(PyObject **operand1, PyOb
|
|
|
4100
4242
|
// Not every code path will make use of all possible results.
|
|
4101
4243
|
NUITKA_MAY_BE_UNUSED PyObject *obj_result;
|
|
4102
4244
|
|
|
4103
|
-
|
|
4245
|
+
// TODO: Have this more globally passed in
|
|
4246
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
4247
|
+
|
|
4248
|
+
PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
|
|
4104
4249
|
|
|
4105
4250
|
assert(x != Py_NotImplemented);
|
|
4106
4251
|
obj_result = x;
|
|
@@ -4159,7 +4304,10 @@ static inline bool _INPLACE_OPERATION_ADD_LIST_LIST(PyObject **operand1, PyObjec
|
|
|
4159
4304
|
// Not every code path will make use of all possible results.
|
|
4160
4305
|
NUITKA_MAY_BE_UNUSED PyObject *obj_result;
|
|
4161
4306
|
|
|
4162
|
-
|
|
4307
|
+
// TODO: Have this more globally passed in
|
|
4308
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
4309
|
+
|
|
4310
|
+
PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
|
|
4163
4311
|
assert(x != Py_NotImplemented);
|
|
4164
4312
|
|
|
4165
4313
|
obj_result = x;
|
|
@@ -4212,7 +4360,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **o
|
|
|
4212
4360
|
goto exit_inplace_result_object;
|
|
4213
4361
|
}
|
|
4214
4362
|
|
|
4215
|
-
|
|
4363
|
+
Py_DECREF_IMMORTAL(x);
|
|
4216
4364
|
}
|
|
4217
4365
|
|
|
4218
4366
|
{
|
|
@@ -4227,7 +4375,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **o
|
|
|
4227
4375
|
goto exit_inplace_result_object;
|
|
4228
4376
|
}
|
|
4229
4377
|
|
|
4230
|
-
|
|
4378
|
+
Py_DECREF_IMMORTAL(x);
|
|
4231
4379
|
}
|
|
4232
4380
|
|
|
4233
4381
|
#if PYTHON_VERSION < 0x300
|
|
@@ -4285,7 +4433,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **o
|
|
|
4285
4433
|
}
|
|
4286
4434
|
}
|
|
4287
4435
|
|
|
4288
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
4436
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'list'", type1->tp_name);
|
|
4289
4437
|
goto exit_inplace_exception;
|
|
4290
4438
|
}
|
|
4291
4439
|
|
|
@@ -4325,7 +4473,10 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **operand1, PyObj
|
|
|
4325
4473
|
// Not every code path will make use of all possible results.
|
|
4326
4474
|
NUITKA_MAY_BE_UNUSED PyObject *obj_result;
|
|
4327
4475
|
|
|
4328
|
-
|
|
4476
|
+
// TODO: Have this more globally passed in
|
|
4477
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
4478
|
+
|
|
4479
|
+
PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
|
|
4329
4480
|
assert(x != Py_NotImplemented);
|
|
4330
4481
|
|
|
4331
4482
|
obj_result = x;
|
|
@@ -4389,7 +4540,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LIST_OBJECT(PyObject **o
|
|
|
4389
4540
|
goto exit_inplace_result_object;
|
|
4390
4541
|
}
|
|
4391
4542
|
|
|
4392
|
-
|
|
4543
|
+
Py_DECREF_IMMORTAL(x);
|
|
4393
4544
|
}
|
|
4394
4545
|
|
|
4395
4546
|
#if PYTHON_VERSION < 0x300
|
|
@@ -4497,7 +4648,10 @@ static inline bool _INPLACE_OPERATION_ADD_LIST_OBJECT(PyObject **operand1, PyObj
|
|
|
4497
4648
|
// Not every code path will make use of all possible results.
|
|
4498
4649
|
NUITKA_MAY_BE_UNUSED PyObject *obj_result;
|
|
4499
4650
|
|
|
4500
|
-
|
|
4651
|
+
// TODO: Have this more globally passed in
|
|
4652
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
4653
|
+
|
|
4654
|
+
PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
|
|
4501
4655
|
assert(x != Py_NotImplemented);
|
|
4502
4656
|
|
|
4503
4657
|
obj_result = x;
|
|
@@ -4675,6 +4829,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
4675
4829
|
clong_result = x;
|
|
4676
4830
|
goto exit_result_ok_clong;
|
|
4677
4831
|
}
|
|
4832
|
+
|
|
4678
4833
|
{
|
|
4679
4834
|
PyObject *operand1_object = *operand1;
|
|
4680
4835
|
PyObject *operand2_object = operand2;
|
|
@@ -4693,7 +4848,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
4693
4848
|
|
|
4694
4849
|
// That's our return value then. As we use a dedicated variable, it's
|
|
4695
4850
|
// OK that way.
|
|
4696
|
-
*operand1 =
|
|
4851
|
+
*operand1 = Nuitka_PyInt_FromLong(clong_result);
|
|
4697
4852
|
goto exit_result_ok;
|
|
4698
4853
|
|
|
4699
4854
|
exit_result_object:
|
|
@@ -4715,7 +4870,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
4715
4870
|
#endif
|
|
4716
4871
|
|
|
4717
4872
|
if (Py_REFCNT(*operand1) == 1) {
|
|
4718
|
-
// We more or less own the operand, so we might
|
|
4873
|
+
// We more or less own the operand, so we might reuse its storage and
|
|
4719
4874
|
// execute stuff in-place.
|
|
4720
4875
|
#if PYTHON_VERSION < 0x300
|
|
4721
4876
|
if (PyString_CheckExact(*operand1) && !PyString_CHECK_INTERNED(*operand1) && PyString_CheckExact(operand2)) {
|
|
@@ -4798,7 +4953,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
4798
4953
|
goto exit_inplace_result_object;
|
|
4799
4954
|
}
|
|
4800
4955
|
|
|
4801
|
-
|
|
4956
|
+
Py_DECREF_IMMORTAL(x);
|
|
4802
4957
|
}
|
|
4803
4958
|
|
|
4804
4959
|
{
|
|
@@ -4826,7 +4981,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
4826
4981
|
goto exit_inplace_result_object;
|
|
4827
4982
|
}
|
|
4828
4983
|
|
|
4829
|
-
|
|
4984
|
+
Py_DECREF_IMMORTAL(x);
|
|
4830
4985
|
slot2 = NULL;
|
|
4831
4986
|
}
|
|
4832
4987
|
}
|
|
@@ -4838,7 +4993,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
4838
4993
|
goto exit_inplace_result_object;
|
|
4839
4994
|
}
|
|
4840
4995
|
|
|
4841
|
-
|
|
4996
|
+
Py_DECREF_IMMORTAL(x);
|
|
4842
4997
|
}
|
|
4843
4998
|
|
|
4844
4999
|
if (slot2 != NULL) {
|
|
@@ -4849,7 +5004,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
4849
5004
|
goto exit_inplace_result_object;
|
|
4850
5005
|
}
|
|
4851
5006
|
|
|
4852
|
-
|
|
5007
|
+
Py_DECREF_IMMORTAL(x);
|
|
4853
5008
|
}
|
|
4854
5009
|
|
|
4855
5010
|
#if PYTHON_VERSION < 0x300
|
|
@@ -4942,7 +5097,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
|
|
|
4942
5097
|
}
|
|
4943
5098
|
}
|
|
4944
5099
|
|
|
4945
|
-
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for
|
|
5100
|
+
PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and '%s'", type1->tp_name,
|
|
4946
5101
|
type2->tp_name);
|
|
4947
5102
|
goto exit_inplace_exception;
|
|
4948
5103
|
}
|
|
@@ -5039,3 +5194,18 @@ exit_inplace_result_object:
|
|
|
5039
5194
|
bool INPLACE_OPERATION_ADD_LIST_TUPLE(PyObject **operand1, PyObject *operand2) {
|
|
5040
5195
|
return _INPLACE_OPERATION_ADD_LIST_TUPLE(operand1, operand2);
|
|
5041
5196
|
}
|
|
5197
|
+
|
|
5198
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
5199
|
+
// integrates with CPython, but also works on its own.
|
|
5200
|
+
//
|
|
5201
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5202
|
+
// you may not use this file except in compliance with the License.
|
|
5203
|
+
// You may obtain a copy of the License at
|
|
5204
|
+
//
|
|
5205
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
5206
|
+
//
|
|
5207
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
5208
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
5209
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
5210
|
+
// See the License for the specific language governing permissions and
|
|
5211
|
+
// limitations under the License.
|