Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.4.8__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.4.8.data/scripts/nuitka-run.cmd +9 -9
- Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka.cmd +15 -15
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/METADATA +4 -3
- Nuitka_winsvc-2.4.8.dist-info/RECORD +954 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/WHEEL +1 -1
- nuitka/Builtins.py +18 -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 +400 -0
- nuitka/MainControl.py +200 -112
- nuitka/ModuleRegistry.py +83 -20
- nuitka/OptionParsing.py +368 -175
- nuitka/Options.py +632 -213
- nuitka/OutputDirectories.py +40 -21
- nuitka/PostProcessing.py +73 -50
- nuitka/Progress.py +58 -24
- nuitka/PythonFlavors.py +141 -32
- nuitka/PythonOperators.py +18 -17
- nuitka/PythonVersions.py +106 -19
- nuitka/Serialization.py +68 -55
- nuitka/SourceCodeReferences.py +19 -17
- nuitka/Tracing.py +108 -70
- nuitka/TreeXML.py +31 -26
- nuitka/Variables.py +39 -41
- nuitka/Version.py +21 -7
- nuitka/__init__.py +5 -4
- nuitka/__main__.py +95 -29
- nuitka/__past__.py +44 -34
- nuitka/build/Backend.scons +202 -140
- nuitka/build/CCompilerVersion.scons +39 -31
- nuitka/build/DataComposerInterface.py +20 -17
- nuitka/build/Onefile.scons +50 -54
- nuitka/build/SconsCaching.py +93 -90
- nuitka/build/SconsCompilerSettings.py +157 -69
- nuitka/build/SconsHacks.py +25 -19
- nuitka/build/SconsInterface.py +154 -54
- nuitka/build/SconsProgress.py +19 -18
- nuitka/build/SconsSpawn.py +62 -33
- nuitka/build/SconsUtils.py +147 -55
- nuitka/build/__init__.py +5 -4
- nuitka/build/include/nuitka/allocator.h +105 -22
- nuitka/build/include/nuitka/builtins.h +17 -17
- nuitka/build/include/nuitka/calling.h +18 -18
- nuitka/build/include/nuitka/checkers.h +17 -18
- nuitka/build/include/nuitka/checksum_tools.h +14 -19
- nuitka/build/include/nuitka/compiled_asyncgen.h +18 -18
- 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 +91 -53
- 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 +29 -18
- nuitka/build/include/nuitka/constants_blob.h +17 -17
- 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 +593 -190
- 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 -18
- 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 +17 -17
- 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 +24 -22
- 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 +32 -20
- nuitka/build/include/nuitka/helper/iterators.h +17 -17
- 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 +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_add.h +17 -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_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 +17 -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 +17 -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 +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/raising.h +29 -17
- nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
- nuitka/build/include/nuitka/helper/richcomparisons.h +14 -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 +38 -20
- nuitka/build/include/nuitka/importing.h +28 -21
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +128 -46
- nuitka/build/include/nuitka/printing.h +22 -17
- 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 +32 -33
- nuitka/build/include/nuitka/tracing.h +28 -18
- nuitka/build/include/nuitka/type_aliases.h +27 -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/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 +176 -182
- nuitka/build/static_src/CompiledCellType.c +63 -40
- nuitka/build/static_src/CompiledCodeHelpers.c +181 -128
- nuitka/build/static_src/CompiledCoroutineType.c +196 -203
- nuitka/build/static_src/CompiledFrameType.c +287 -133
- nuitka/build/static_src/CompiledFunctionType.c +389 -95
- nuitka/build/static_src/CompiledGeneratorType.c +376 -252
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +185 -198
- nuitka/build/static_src/CompiledMethodType.c +83 -71
- nuitka/build/static_src/HelpersAllocator.c +88 -19
- nuitka/build/static_src/HelpersAttributes.c +33 -54
- nuitka/build/static_src/HelpersBuiltin.c +43 -33
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
- nuitka/build/static_src/HelpersBytes.c +19 -20
- nuitka/build/static_src/HelpersCalling.c +33 -30
- nuitka/build/static_src/HelpersCallingGenerated.c +1000 -181
- nuitka/build/static_src/HelpersChecksumTools.c +35 -21
- nuitka/build/static_src/HelpersClasses.c +17 -17
- nuitka/build/static_src/HelpersComparisonEq.c +518 -492
- nuitka/build/static_src/HelpersComparisonEqUtils.c +21 -19
- nuitka/build/static_src/HelpersComparisonGe.c +513 -497
- nuitka/build/static_src/HelpersComparisonGt.c +512 -496
- nuitka/build/static_src/HelpersComparisonLe.c +513 -497
- nuitka/build/static_src/HelpersComparisonLt.c +512 -496
- nuitka/build/static_src/HelpersComparisonNe.c +520 -492
- nuitka/build/static_src/HelpersConsole.c +96 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +542 -519
- nuitka/build/static_src/HelpersDeepcopy.c +33 -33
- nuitka/build/static_src/HelpersDictionaries.c +51 -29
- nuitka/build/static_src/HelpersDictionariesGenerated.c +177 -68
- 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 +161 -50
- nuitka/build/static_src/HelpersFiles.c +37 -17
- 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 +48 -20
- nuitka/build/static_src/HelpersImportHard.c +53 -17
- nuitka/build/static_src/HelpersJitSources.c +46 -0
- nuitka/build/static_src/HelpersLists.c +140 -50
- 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 +173 -146
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +99 -52
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +47 -47
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +24 -24
- nuitka/build/static_src/HelpersOperationBinaryMod.c +107 -107
- nuitka/build/static_src/HelpersOperationBinaryMult.c +81 -75
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryPow.c +44 -44
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +47 -47
- nuitka/build/static_src/HelpersOperationBinarySub.c +80 -80
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +41 -41
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +171 -153
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +62 -62
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +44 -44
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +37 -37
- nuitka/build/static_src/HelpersOperationInplaceMod.c +134 -134
- nuitka/build/static_src/HelpersOperationInplaceMult.c +78 -78
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +62 -62
- nuitka/build/static_src/HelpersOperationInplacePow.c +62 -62
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +44 -44
- nuitka/build/static_src/HelpersOperationInplaceSub.c +112 -112
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +62 -62
- nuitka/build/static_src/HelpersProfiling.c +24 -23
- nuitka/build/static_src/HelpersPythonPgo.c +22 -22
- nuitka/build/static_src/HelpersRaising.c +88 -20
- 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 +234 -37
- nuitka/build/static_src/HelpersTuples.c +46 -34
- nuitka/build/static_src/HelpersTypes.c +68 -23
- nuitka/build/static_src/InspectPatcher.c +108 -27
- nuitka/build/static_src/MainProgram.c +359 -263
- nuitka/build/static_src/MetaPathBasedLoader.c +367 -242
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +97 -22
- nuitka/build/static_src/OnefileBootstrap.c +276 -164
- nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
- nuitka/code_generation/AsyncgenCodes.py +19 -17
- nuitka/code_generation/AttributeCodes.py +31 -27
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +24 -20
- nuitka/code_generation/BranchCodes.py +19 -17
- nuitka/code_generation/BuiltinCodes.py +20 -17
- nuitka/code_generation/CallCodes.py +19 -17
- nuitka/code_generation/ClassCodes.py +19 -17
- nuitka/code_generation/CodeGeneration.py +48 -27
- nuitka/code_generation/CodeHelperSelection.py +19 -17
- nuitka/code_generation/CodeHelpers.py +24 -20
- nuitka/code_generation/CodeObjectCodes.py +34 -24
- nuitka/code_generation/ComparisonCodes.py +38 -20
- nuitka/code_generation/ComparisonHelperDefinitions.py +19 -17
- nuitka/code_generation/ConditionalCodes.py +19 -17
- nuitka/code_generation/ConstantCodes.py +82 -28
- nuitka/code_generation/Contexts.py +152 -26
- nuitka/code_generation/CoroutineCodes.py +19 -17
- nuitka/code_generation/CtypesCodes.py +19 -17
- nuitka/code_generation/DictCodes.py +25 -23
- nuitka/code_generation/Emission.py +21 -18
- nuitka/code_generation/ErrorCodes.py +27 -33
- nuitka/code_generation/EvalCodes.py +24 -20
- nuitka/code_generation/ExceptionCodes.py +27 -18
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +20 -17
- nuitka/code_generation/ExpressionCodes.py +19 -17
- nuitka/code_generation/FrameCodes.py +24 -20
- nuitka/code_generation/FunctionCodes.py +24 -21
- nuitka/code_generation/GeneratorCodes.py +23 -20
- nuitka/code_generation/GlobalConstants.py +43 -23
- nuitka/code_generation/GlobalsLocalsCodes.py +21 -19
- 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 +19 -17
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +19 -17
- nuitka/code_generation/LineNumberCodes.py +19 -17
- 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 +43 -25
- nuitka/code_generation/Namify.py +27 -23
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +29 -31
- nuitka/code_generation/PackageResourceCodes.py +59 -23
- nuitka/code_generation/PrintCodes.py +19 -17
- nuitka/code_generation/PythonAPICodes.py +19 -17
- nuitka/code_generation/RaisingCodes.py +19 -17
- nuitka/code_generation/Reports.py +19 -17
- nuitka/code_generation/ReturnCodes.py +19 -17
- 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 +19 -17
- nuitka/code_generation/TupleCodes.py +20 -18
- nuitka/code_generation/TypeAliasCodes.py +71 -0
- nuitka/code_generation/VariableCodes.py +26 -22
- nuitka/code_generation/VariableDeclarations.py +20 -17
- nuitka/code_generation/YieldCodes.py +22 -20
- nuitka/code_generation/__init__.py +5 -4
- nuitka/code_generation/c_types/CTypeBases.py +19 -17
- 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 +19 -17
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +19 -18
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +19 -17
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +27 -25
- nuitka/code_generation/c_types/CTypeVoids.py +20 -17
- nuitka/code_generation/c_types/__init__.py +5 -4
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesConstants.py +132 -36
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +19 -18
- nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesFunction.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +19 -17
- nuitka/code_generation/templates/CodeTemplatesIterators.py +18 -18
- nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
- nuitka/code_generation/templates/CodeTemplatesModules.py +244 -165
- nuitka/code_generation/templates/CodeTemplatesVariables.py +42 -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 +18 -18
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +76 -25
- 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 +121 -48
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +18 -18
- 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/HelperOperationComparison.c.j2 +35 -35
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +28 -28
- 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 +44 -32
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +24 -24
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +33 -29
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +27 -27
- 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 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +26 -24
- 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 +19 -18
- nuitka/containers/OrderedSetsFallback.py +19 -17
- nuitka/containers/__init__.py +5 -4
- nuitka/distutils/Build.py +19 -18
- nuitka/distutils/DistutilCommands.py +34 -23
- nuitka/distutils/__init__.py +5 -4
- nuitka/finalizations/Finalization.py +20 -17
- nuitka/finalizations/FinalizeMarkups.py +21 -41
- nuitka/finalizations/__init__.py +5 -4
- nuitka/freezer/DependsExe.py +48 -28
- nuitka/freezer/DllDependenciesCommon.py +47 -20
- nuitka/freezer/DllDependenciesMacOS.py +147 -57
- nuitka/freezer/DllDependenciesPosix.py +29 -19
- nuitka/freezer/DllDependenciesWin32.py +29 -21
- nuitka/freezer/ImportDetection.py +20 -17
- nuitka/freezer/IncludedDataFiles.py +118 -47
- nuitka/freezer/IncludedEntryPoints.py +102 -38
- nuitka/freezer/Onefile.py +32 -22
- nuitka/freezer/Standalone.py +105 -50
- 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 +286 -92
- nuitka/importing/PreloadedPackages.py +21 -18
- nuitka/importing/Recursion.py +131 -47
- nuitka/importing/StandardLibrary.py +46 -28
- nuitka/importing/__init__.py +5 -4
- nuitka/nodes/AsyncgenNodes.py +19 -17
- 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 +24 -20
- 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 +68 -19
- 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 +1250 -302
- nuitka/nodes/ClassNodes.py +49 -29
- nuitka/nodes/CodeObjectSpecs.py +29 -18
- nuitka/nodes/ComparisonNodes.py +19 -17
- nuitka/nodes/ConditionalNodes.py +21 -23
- nuitka/nodes/ConstantRefNodes.py +57 -17
- nuitka/nodes/ContainerMakingNodes.py +19 -17
- nuitka/nodes/ContainerOperationNodes.py +19 -17
- nuitka/nodes/CoroutineNodes.py +19 -17
- nuitka/nodes/CtypesNodes.py +19 -18
- nuitka/nodes/DictionaryNodes.py +19 -18
- nuitka/nodes/ExceptionNodes.py +29 -17
- nuitka/nodes/ExecEvalNodes.py +19 -17
- nuitka/nodes/ExpressionBases.py +34 -26
- nuitka/nodes/ExpressionBasesGenerated.py +54 -32
- nuitka/nodes/ExpressionShapeMixins.py +19 -17
- nuitka/nodes/FrameNodes.py +19 -17
- nuitka/nodes/FunctionAttributeNodes.py +19 -17
- nuitka/nodes/FunctionNodes.py +81 -35
- nuitka/nodes/FutureSpecs.py +35 -20
- nuitka/nodes/GeneratorNodes.py +21 -19
- nuitka/nodes/GlobalsLocalsNodes.py +22 -17
- nuitka/nodes/HardImportNodesGenerated.py +545 -129
- nuitka/nodes/ImportHardNodes.py +46 -38
- nuitka/nodes/ImportNodes.py +436 -446
- 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 +45 -43
- nuitka/nodes/NodeMakingHelpers.py +21 -19
- nuitka/nodes/NodeMetaClasses.py +45 -28
- nuitka/nodes/OperatorNodes.py +28 -26
- nuitka/nodes/OperatorNodesUnary.py +20 -17
- nuitka/nodes/OsSysNodes.py +66 -18
- nuitka/nodes/OutlineNodes.py +22 -20
- 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 -77
- nuitka/nodes/StatementNodes.py +19 -17
- nuitka/nodes/StrNodes.py +19 -17
- nuitka/nodes/StringConcatenationNodes.py +20 -17
- nuitka/nodes/SubscriptNodes.py +26 -24
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +19 -17
- nuitka/nodes/TypeMatchNodes.py +19 -17
- nuitka/nodes/TypeNodes.py +40 -17
- 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 +145 -39
- nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
- nuitka/nodes/shapes/ShapeMixins.py +40 -17
- nuitka/nodes/shapes/StandardShapes.py +27 -20
- nuitka/nodes/shapes/__init__.py +5 -4
- nuitka/optimizations/BytecodeDemotion.py +19 -17
- 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 +610 -109
- nuitka/plugins/Plugins.py +241 -58
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +5 -4
- nuitka/plugins/standard/AntiBloatPlugin.py +357 -129
- 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 +407 -46
- nuitka/plugins/standard/KivyPlugin.py +30 -17
- nuitka/plugins/standard/MatplotlibPlugin.py +88 -42
- nuitka/plugins/standard/MultiprocessingPlugin.py +25 -20
- 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/PmwPlugin.py +30 -27
- nuitka/plugins/standard/PySidePyQtPlugin.py +74 -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 +103 -53
- nuitka/plugins/standard/TorchPlugin.py +20 -17
- nuitka/plugins/standard/TransformersPlugin.py +94 -30
- 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 +3449 -1299
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +121 -66
- nuitka/reports/CompilationReportReader.py +67 -0
- nuitka/reports/LicenseReport.rst.j2 +21 -21
- nuitka/reports/Reports.py +352 -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 +30 -20
- nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
- nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
- nuitka/specs/HardImportSpecs.py +67 -22
- nuitka/specs/ParameterSpecs.py +56 -41
- 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 +19 -21
- 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 +93 -71
- nuitka/tools/specialize/Common.py +18 -17
- nuitka/tools/specialize/SpecializeC.py +31 -27
- nuitka/tools/specialize/SpecializePython.py +108 -45
- nuitka/tools/specialize/__init__.py +5 -4
- nuitka/tools/testing/Common.py +106 -52
- 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 +36 -29
- 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 +22 -25
- nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
- nuitka/tools/testing/run_nuitka_tests/__main__.py +57 -40
- nuitka/tools/watch/AutoStage.py +144 -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 +176 -147
- nuitka/tree/ComplexCallHelperFunctions.py +80 -58
- nuitka/tree/Extractions.py +19 -17
- nuitka/tree/InternalModule.py +29 -20
- nuitka/tree/Operations.py +19 -17
- nuitka/tree/ReformulationAssertStatements.py +20 -17
- nuitka/tree/ReformulationAssignmentStatements.py +92 -91
- nuitka/tree/ReformulationBooleanExpressions.py +19 -17
- nuitka/tree/ReformulationCallExpressions.py +20 -18
- nuitka/tree/ReformulationClasses.py +45 -39
- nuitka/tree/ReformulationClasses3.py +146 -98
- nuitka/tree/ReformulationComparisonExpressions.py +29 -35
- nuitka/tree/ReformulationContractionExpressions.py +58 -55
- nuitka/tree/ReformulationDictionaryCreation.py +40 -35
- nuitka/tree/ReformulationExecStatements.py +42 -39
- nuitka/tree/ReformulationForLoopStatements.py +30 -34
- nuitka/tree/ReformulationFunctionStatements.py +58 -54
- nuitka/tree/ReformulationImportStatements.py +34 -29
- nuitka/tree/ReformulationLambdaExpressions.py +23 -24
- nuitka/tree/ReformulationMatchStatements.py +244 -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 +21 -19
- 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 +84 -19
- nuitka/utils/Distributions.py +445 -54
- nuitka/utils/Download.py +89 -57
- nuitka/utils/Execution.py +73 -34
- nuitka/utils/FileOperations.py +318 -74
- nuitka/utils/Hashing.py +55 -33
- nuitka/utils/Images.py +26 -19
- nuitka/utils/Importing.py +118 -24
- nuitka/utils/InstalledPythons.py +80 -75
- nuitka/utils/InstanceCounters.py +20 -17
- nuitka/utils/Jinja2.py +30 -22
- nuitka/utils/Json.py +19 -17
- nuitka/utils/MacOSApp.py +26 -18
- nuitka/utils/MemoryUsage.py +20 -18
- nuitka/utils/ModuleNames.py +42 -26
- 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 +115 -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.4.8.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.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
|
#ifndef __NUITKA_EXCEPTIONS_H__
|
|
19
4
|
#define __NUITKA_EXCEPTIONS_H__
|
|
20
5
|
|
|
@@ -26,7 +11,7 @@
|
|
|
26
11
|
#include "nuitka/printing.h"
|
|
27
12
|
|
|
28
13
|
// Did an error occur.
|
|
29
|
-
NUITKA_MAY_BE_UNUSED static inline bool HAS_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
14
|
+
NUITKA_MAY_BE_UNUSED static inline bool HAS_ERROR_OCCURRED(PyThreadState const *tstate) {
|
|
30
15
|
#if PYTHON_VERSION < 0x3c0
|
|
31
16
|
return tstate->curexc_type != NULL;
|
|
32
17
|
#else
|
|
@@ -34,16 +19,57 @@ NUITKA_MAY_BE_UNUSED static inline bool HAS_ERROR_OCCURRED(PyThreadState *tstate
|
|
|
34
19
|
#endif
|
|
35
20
|
}
|
|
36
21
|
|
|
37
|
-
// Get the error type occurred.
|
|
38
|
-
NUITKA_MAY_BE_UNUSED static inline PyObject *GET_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
22
|
+
// Get the error type occurred, no reference given.
|
|
23
|
+
NUITKA_MAY_BE_UNUSED static inline PyObject *GET_ERROR_OCCURRED(PyThreadState const *const tstate) {
|
|
39
24
|
#if PYTHON_VERSION < 0x3c0
|
|
40
25
|
return tstate->curexc_type;
|
|
41
26
|
#else
|
|
42
|
-
return (PyObject *)
|
|
27
|
+
return tstate->current_exception ? (PyObject *)PyExceptionInstance_Class(tstate->current_exception) : NULL;
|
|
28
|
+
#endif
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Checks that an exception value is normalized or NULL.
|
|
32
|
+
NUITKA_MAY_BE_UNUSED static inline void ASSERT_NORMALIZED_EXCEPTION_VALUE_X(PyObject const *const exception_value) {
|
|
33
|
+
CHECK_OBJECT_X(exception_value);
|
|
34
|
+
assert(exception_value == NULL || PyExceptionInstance_Check(exception_value));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Checks that an exception value is normalized and not NULL.
|
|
38
|
+
NUITKA_MAY_BE_UNUSED static inline void ASSERT_NORMALIZED_EXCEPTION_VALUE(PyObject *exception_value) {
|
|
39
|
+
CHECK_OBJECT(exception_value);
|
|
40
|
+
assert(PyExceptionInstance_Check(exception_value));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
extern void Nuitka_Err_NormalizeException(PyThreadState *tstate, PyObject **exc, PyObject **val,
|
|
44
|
+
PyTracebackObject **tb);
|
|
45
|
+
|
|
46
|
+
// Normalize an exception, may release old values and replace them, expects
|
|
47
|
+
// references passed and returns them.
|
|
48
|
+
NUITKA_MAY_BE_UNUSED static inline void NORMALIZE_EXCEPTION(PyThreadState *tstate, PyObject **exception_type,
|
|
49
|
+
PyObject **exception_value,
|
|
50
|
+
PyTracebackObject **exception_tb) {
|
|
51
|
+
#if _DEBUG_EXCEPTIONS
|
|
52
|
+
PRINT_STRING("NORMALIZE_EXCEPTION: Enter\n");
|
|
53
|
+
PRINT_EXCEPTION(*exception_type, *exception_value, *exception_tb);
|
|
54
|
+
#endif
|
|
55
|
+
CHECK_OBJECT_X(*exception_type);
|
|
56
|
+
CHECK_OBJECT_X(*exception_value);
|
|
57
|
+
if (exception_tb) {
|
|
58
|
+
CHECK_OBJECT_X(*exception_tb);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// TODO: Often we already know this to be true.
|
|
62
|
+
if (*exception_type != Py_None && *exception_type != NULL) {
|
|
63
|
+
Nuitka_Err_NormalizeException(tstate, exception_type, exception_value, exception_tb);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#if _DEBUG_EXCEPTIONS
|
|
67
|
+
PRINT_STRING("NORMALIZE_EXCEPTION: Leave\n");
|
|
68
|
+
PRINT_EXCEPTION(*exception_type, *exception_value, exception_tb ? *exception_tb : NULL);
|
|
43
69
|
#endif
|
|
44
70
|
}
|
|
45
71
|
|
|
46
|
-
// Clear error, which likely set, similar to _PyErr_Clear(tstate)
|
|
72
|
+
// Clear error, which likely set, similar to "_PyErr_Clear(tstate)" and "PyErr_Clear"
|
|
47
73
|
NUITKA_MAY_BE_UNUSED static inline void CLEAR_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
48
74
|
#if PYTHON_VERSION < 0x3c0
|
|
49
75
|
PyObject *old_type = tstate->curexc_type;
|
|
@@ -58,13 +84,16 @@ NUITKA_MAY_BE_UNUSED static inline void CLEAR_ERROR_OCCURRED(PyThreadState *tsta
|
|
|
58
84
|
Py_XDECREF(old_value);
|
|
59
85
|
Py_XDECREF(old_tb);
|
|
60
86
|
#else
|
|
61
|
-
PyObject *
|
|
87
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
88
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
89
|
+
|
|
62
90
|
tstate->current_exception = NULL;
|
|
63
|
-
|
|
91
|
+
|
|
92
|
+
Py_XDECREF(old_exception_value);
|
|
64
93
|
#endif
|
|
65
94
|
}
|
|
66
95
|
|
|
67
|
-
// Clear error, which is not likely set, use CLEAR_ERROR_OCCURRED not sure there is an error.
|
|
96
|
+
// Clear error, which is not likely set, use "CLEAR_ERROR_OCCURRED" not sure there is an error.
|
|
68
97
|
NUITKA_MAY_BE_UNUSED static inline bool DROP_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
69
98
|
|
|
70
99
|
#if PYTHON_VERSION < 0x3c0
|
|
@@ -85,11 +114,12 @@ NUITKA_MAY_BE_UNUSED static inline bool DROP_ERROR_OCCURRED(PyThreadState *tstat
|
|
|
85
114
|
}
|
|
86
115
|
#else
|
|
87
116
|
if (unlikely(tstate->current_exception != NULL)) {
|
|
88
|
-
PyObject *
|
|
117
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
118
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(old_exception_value);
|
|
89
119
|
|
|
90
120
|
tstate->current_exception = NULL;
|
|
91
121
|
|
|
92
|
-
Py_DECREF(
|
|
122
|
+
Py_DECREF(old_exception_value);
|
|
93
123
|
|
|
94
124
|
return true;
|
|
95
125
|
}
|
|
@@ -97,9 +127,8 @@ NUITKA_MAY_BE_UNUSED static inline bool DROP_ERROR_OCCURRED(PyThreadState *tstat
|
|
|
97
127
|
return false;
|
|
98
128
|
}
|
|
99
129
|
|
|
100
|
-
// Python3.12: TODO, fetching into a structure is probably needed.
|
|
101
130
|
#if PYTHON_VERSION < 0x3c0
|
|
102
|
-
// Fetch the current error into object variables
|
|
131
|
+
// Fetch the current error into object variables, transfers reference coming from tstate ownership
|
|
103
132
|
NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED(PyThreadState *tstate, PyObject **exception_type,
|
|
104
133
|
PyObject **exception_value,
|
|
105
134
|
PyTracebackObject **exception_traceback) {
|
|
@@ -315,7 +344,7 @@ NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION(PyThreadState *tst
|
|
|
315
344
|
#endif
|
|
316
345
|
|
|
317
346
|
#if _NUITKA_MAINTAIN_SYS_EXC_VARS
|
|
318
|
-
// Set sys attributes in the fastest possible way
|
|
347
|
+
// Set sys attributes in the fastest possible way, spell-checker: ignore sysdict
|
|
319
348
|
PyObject *sys_dict = tstate->interp->sysdict;
|
|
320
349
|
CHECK_OBJECT(sys_dict);
|
|
321
350
|
|
|
@@ -338,7 +367,7 @@ NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION(PyThreadState *tst
|
|
|
338
367
|
}
|
|
339
368
|
|
|
340
369
|
// Helper that sets the current thread exception, and has no reference passed.
|
|
341
|
-
// Similar to PyErr_SetNone.
|
|
370
|
+
// Similar to "PyErr_SetNone".
|
|
342
371
|
NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION_TYPE0(PyThreadState *tstate, PyObject *exception_type) {
|
|
343
372
|
CHECK_OBJECT(exception_type);
|
|
344
373
|
|
|
@@ -362,9 +391,12 @@ NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION_TYPE0(PyThreadStat
|
|
|
362
391
|
Py_XDECREF(old_exception_traceback);
|
|
363
392
|
#else
|
|
364
393
|
PyObject *old_exception = tstate->current_exception;
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
394
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception);
|
|
395
|
+
PyObject *exception_value = NULL;
|
|
396
|
+
NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, NULL);
|
|
397
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
|
|
398
|
+
tstate->current_exception = exception_value;
|
|
399
|
+
Py_DECREF(exception_type);
|
|
368
400
|
|
|
369
401
|
#if _DEBUG_EXCEPTIONS
|
|
370
402
|
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0:\n");
|
|
@@ -376,9 +408,12 @@ NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION_TYPE0(PyThreadStat
|
|
|
376
408
|
}
|
|
377
409
|
|
|
378
410
|
// Same as "PyErr_SetObject" CPython API, use this instead.
|
|
379
|
-
#if PYTHON_VERSION < 0x3c0
|
|
380
411
|
NUITKA_MAY_BE_UNUSED inline static void
|
|
381
412
|
SET_CURRENT_EXCEPTION_TYPE0_VALUE0(PyThreadState *tstate, PyObject *exception_type, PyObject *exception_value) {
|
|
413
|
+
CHECK_OBJECT(exception_type);
|
|
414
|
+
CHECK_OBJECT(exception_value);
|
|
415
|
+
|
|
416
|
+
#if PYTHON_VERSION < 0x3c0
|
|
382
417
|
PyObject *old_exception_type = tstate->curexc_type;
|
|
383
418
|
PyObject *old_exception_value = tstate->curexc_value;
|
|
384
419
|
PyObject *old_exception_traceback = tstate->curexc_traceback;
|
|
@@ -397,10 +432,27 @@ SET_CURRENT_EXCEPTION_TYPE0_VALUE0(PyThreadState *tstate, PyObject *exception_ty
|
|
|
397
432
|
Py_XDECREF(old_exception_type);
|
|
398
433
|
Py_XDECREF(old_exception_value);
|
|
399
434
|
Py_XDECREF(old_exception_traceback);
|
|
435
|
+
#else
|
|
436
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
437
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
438
|
+
|
|
439
|
+
NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, NULL);
|
|
440
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
|
|
441
|
+
tstate->current_exception = exception_value;
|
|
442
|
+
Py_INCREF(exception_value);
|
|
443
|
+
|
|
444
|
+
#if _DEBUG_EXCEPTIONS
|
|
445
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE_0VALUE0:\n");
|
|
446
|
+
PRINT_CURRENT_EXCEPTION();
|
|
447
|
+
#endif
|
|
448
|
+
|
|
449
|
+
Py_XDECREF(old_exception_value);
|
|
450
|
+
#endif
|
|
400
451
|
}
|
|
401
452
|
|
|
402
453
|
NUITKA_MAY_BE_UNUSED inline static void
|
|
403
454
|
SET_CURRENT_EXCEPTION_TYPE0_VALUE1(PyThreadState *tstate, PyObject *exception_type, PyObject *exception_value) {
|
|
455
|
+
#if PYTHON_VERSION < 0x3c0
|
|
404
456
|
PyObject *old_exception_type = tstate->curexc_type;
|
|
405
457
|
PyObject *old_exception_value = tstate->curexc_value;
|
|
406
458
|
PyObject *old_exception_traceback = tstate->curexc_traceback;
|
|
@@ -418,10 +470,23 @@ SET_CURRENT_EXCEPTION_TYPE0_VALUE1(PyThreadState *tstate, PyObject *exception_ty
|
|
|
418
470
|
Py_XDECREF(old_exception_type);
|
|
419
471
|
Py_XDECREF(old_exception_value);
|
|
420
472
|
Py_XDECREF(old_exception_traceback);
|
|
421
|
-
|
|
473
|
+
#else
|
|
474
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
475
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
476
|
+
|
|
477
|
+
NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, NULL);
|
|
478
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_value);
|
|
479
|
+
tstate->current_exception = exception_value;
|
|
422
480
|
|
|
481
|
+
#if _DEBUG_EXCEPTIONS
|
|
482
|
+
PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0_VALUE1:\n");
|
|
483
|
+
PRINT_CURRENT_EXCEPTION();
|
|
423
484
|
#endif
|
|
424
485
|
|
|
486
|
+
Py_XDECREF(old_exception_value);
|
|
487
|
+
#endif
|
|
488
|
+
}
|
|
489
|
+
|
|
425
490
|
// Helper that sets the current thread exception, and has no reference passed.
|
|
426
491
|
// Same as CPython API PyErr_SetString
|
|
427
492
|
|
|
@@ -429,6 +494,10 @@ NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION_TYPE0_STR(PyThread
|
|
|
429
494
|
char const *value) {
|
|
430
495
|
PyObject *exception_value = Nuitka_String_FromString(value);
|
|
431
496
|
|
|
497
|
+
#if PYTHON_VERSION >= 0x3c0
|
|
498
|
+
NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, NULL);
|
|
499
|
+
#endif
|
|
500
|
+
|
|
432
501
|
SET_CURRENT_EXCEPTION_TYPE0_VALUE1(tstate, exception_type, exception_value);
|
|
433
502
|
}
|
|
434
503
|
|
|
@@ -466,7 +535,7 @@ NUITKA_MAY_BE_UNUSED static inline void PRESERVE_FRAME_EXCEPTION(PyThreadState *
|
|
|
466
535
|
PRINT_STRING("PRESERVE_FRAME_EXCEPTION: no exception to preserve\n");
|
|
467
536
|
#endif
|
|
468
537
|
frame->f_exc_type = Py_None;
|
|
469
|
-
|
|
538
|
+
Py_INCREF_IMMORTAL(frame->f_exc_type);
|
|
470
539
|
frame->f_exc_value = NULL;
|
|
471
540
|
frame->f_exc_traceback = NULL;
|
|
472
541
|
}
|
|
@@ -517,32 +586,33 @@ NUITKA_MAY_BE_UNUSED static inline void RESTORE_FRAME_EXCEPTION(PyThreadState *t
|
|
|
517
586
|
|
|
518
587
|
#endif
|
|
519
588
|
|
|
520
|
-
// Similar to PyException_SetTraceback, only done for Python3.
|
|
589
|
+
// Similar to "PyException_SetTraceback", only done for Python3.
|
|
521
590
|
#if PYTHON_VERSION < 0x300
|
|
522
591
|
#define ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_value, exception_tb) ;
|
|
523
592
|
#else
|
|
524
593
|
NUITKA_MAY_BE_UNUSED static inline void ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(PyObject *exception_value,
|
|
525
594
|
PyTracebackObject *exception_tb) {
|
|
526
595
|
CHECK_OBJECT(exception_value);
|
|
527
|
-
|
|
596
|
+
CHECK_OBJECT_X(exception_tb);
|
|
528
597
|
|
|
529
|
-
if (exception_tb == (PyTracebackObject *)Py_None
|
|
530
|
-
|
|
598
|
+
if (exception_tb == (PyTracebackObject *)Py_None) {
|
|
599
|
+
exception_tb = NULL;
|
|
531
600
|
}
|
|
532
601
|
|
|
533
602
|
assert(PyExceptionInstance_Check(exception_value));
|
|
534
|
-
assert(PyTraceBack_Check(exception_tb));
|
|
603
|
+
assert(exception_tb == NULL || PyTraceBack_Check(exception_tb));
|
|
535
604
|
|
|
536
605
|
PyBaseExceptionObject *e = (PyBaseExceptionObject *)exception_value;
|
|
537
606
|
|
|
538
607
|
PyObject *old = e->traceback;
|
|
539
|
-
|
|
608
|
+
Py_XINCREF(exception_tb);
|
|
540
609
|
e->traceback = (PyObject *)exception_tb;
|
|
541
610
|
Py_XDECREF(old);
|
|
542
611
|
}
|
|
543
612
|
|
|
544
613
|
// Much like "PyException_GetTraceback", but does not give a reference.
|
|
545
614
|
NUITKA_MAY_BE_UNUSED static inline PyTracebackObject *GET_EXCEPTION_TRACEBACK(PyObject *exception_value) {
|
|
615
|
+
CHECK_OBJECT(exception_value);
|
|
546
616
|
assert(PyExceptionInstance_Check(exception_value));
|
|
547
617
|
|
|
548
618
|
PyBaseExceptionObject *exc_object = (PyBaseExceptionObject *)(exception_value);
|
|
@@ -550,36 +620,6 @@ NUITKA_MAY_BE_UNUSED static inline PyTracebackObject *GET_EXCEPTION_TRACEBACK(Py
|
|
|
550
620
|
}
|
|
551
621
|
#endif
|
|
552
622
|
|
|
553
|
-
#if PYTHON_VERSION < 0x3c0
|
|
554
|
-
extern void Nuitka_Err_NormalizeException(PyThreadState *tstate, PyObject **exc, PyObject **val,
|
|
555
|
-
PyTracebackObject **tb);
|
|
556
|
-
|
|
557
|
-
// Normalize an exception.
|
|
558
|
-
NUITKA_MAY_BE_UNUSED static inline void NORMALIZE_EXCEPTION(PyThreadState *tstate, PyObject **exception_type,
|
|
559
|
-
PyObject **exception_value,
|
|
560
|
-
PyTracebackObject **exception_tb) {
|
|
561
|
-
#if _DEBUG_EXCEPTIONS
|
|
562
|
-
PRINT_STRING("NORMALIZE_EXCEPTION: Enter\n");
|
|
563
|
-
PRINT_EXCEPTION(*exception_type, *exception_value, *exception_tb);
|
|
564
|
-
#endif
|
|
565
|
-
CHECK_OBJECT_X(*exception_type);
|
|
566
|
-
CHECK_OBJECT_X(*exception_value);
|
|
567
|
-
if (exception_tb) {
|
|
568
|
-
CHECK_OBJECT_X(*exception_tb);
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
// TODO: Often we already know this to be true.
|
|
572
|
-
if (*exception_type != Py_None && *exception_type != NULL) {
|
|
573
|
-
Nuitka_Err_NormalizeException(tstate, exception_type, exception_value, exception_tb);
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
#if _DEBUG_EXCEPTIONS
|
|
577
|
-
PRINT_STRING("NORMALIZE_EXCEPTION: Leave\n");
|
|
578
|
-
PRINT_EXCEPTION(*exception_type, *exception_value, exception_tb ? *exception_tb : NULL);
|
|
579
|
-
#endif
|
|
580
|
-
}
|
|
581
|
-
#endif
|
|
582
|
-
|
|
583
623
|
// Publish an exception, erasing the values of the variables.
|
|
584
624
|
NUITKA_MAY_BE_UNUSED static inline void PUBLISH_CURRENT_EXCEPTION(PyThreadState *tstate, PyObject **exception_type,
|
|
585
625
|
PyObject **exception_value,
|
|
@@ -614,6 +654,444 @@ NUITKA_MAY_BE_UNUSED static inline void PUBLISH_CURRENT_EXCEPTION(PyThreadState
|
|
|
614
654
|
*exception_tb = NULL;
|
|
615
655
|
}
|
|
616
656
|
|
|
657
|
+
#if PYTHON_VERSION >= 0x300
|
|
658
|
+
// Attach the exception context if necessary.
|
|
659
|
+
NUITKA_MAY_BE_UNUSED static inline void ADD_EXCEPTION_CONTEXT(PyThreadState *tstate, PyObject **exception_type,
|
|
660
|
+
PyObject **exception_value) {
|
|
661
|
+
PyObject *context = EXC_VALUE(tstate);
|
|
662
|
+
|
|
663
|
+
if (context != NULL) {
|
|
664
|
+
NORMALIZE_EXCEPTION(tstate, exception_type, exception_value, NULL);
|
|
665
|
+
|
|
666
|
+
Py_INCREF(context);
|
|
667
|
+
PyException_SetContext(*exception_value, context);
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
#endif
|
|
671
|
+
|
|
672
|
+
NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_BOOL_SINGLE(PyThreadState *tstate, PyObject *exception_value,
|
|
673
|
+
PyObject *exception_checked);
|
|
674
|
+
|
|
675
|
+
NUITKA_MAY_BE_UNUSED static bool _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(PyThreadState *tstate, PyObject *exception_type) {
|
|
676
|
+
#if PYTHON_VERSION < 0x3c0
|
|
677
|
+
PyObject *exception_current = tstate->curexc_type;
|
|
678
|
+
#else
|
|
679
|
+
PyObject *exception_current = tstate->current_exception;
|
|
680
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_current);
|
|
681
|
+
#endif
|
|
682
|
+
if (exception_current == NULL) {
|
|
683
|
+
return true;
|
|
684
|
+
} else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_current, exception_type)) {
|
|
685
|
+
CHECK_OBJECT(exception_current);
|
|
686
|
+
|
|
687
|
+
#if PYTHON_VERSION < 0x3c0
|
|
688
|
+
// Clear the exception first, we believe we know it doesn't have side effects.
|
|
689
|
+
Py_DECREF(exception_current);
|
|
690
|
+
tstate->curexc_type = NULL;
|
|
691
|
+
|
|
692
|
+
PyObject *old_value = tstate->curexc_value;
|
|
693
|
+
PyObject *old_tb = tstate->curexc_traceback;
|
|
694
|
+
|
|
695
|
+
tstate->curexc_value = NULL;
|
|
696
|
+
tstate->curexc_traceback = NULL;
|
|
697
|
+
|
|
698
|
+
Py_XDECREF(old_value);
|
|
699
|
+
Py_XDECREF(old_tb);
|
|
700
|
+
#else
|
|
701
|
+
tstate->current_exception = NULL;
|
|
702
|
+
Py_DECREF(exception_current);
|
|
703
|
+
#endif
|
|
704
|
+
|
|
705
|
+
return true;
|
|
706
|
+
} else {
|
|
707
|
+
return false;
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
/* Special helper that checks for StopIteration and if so clears it, only
|
|
712
|
+
indicating if it was set in the return value.
|
|
713
|
+
|
|
714
|
+
Equivalent to if(PyErr_ExceptionMatches(PyExc_StopIteration) PyErr_Clear();
|
|
715
|
+
|
|
716
|
+
If error is raised by built-in function next() and an iterator’s __next__()
|
|
717
|
+
method to signal that there are no further items produced by the iterator then
|
|
718
|
+
it resets the TSTATE to NULL and returns True else return False
|
|
719
|
+
|
|
720
|
+
*/
|
|
721
|
+
NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED(PyThreadState *tstate) {
|
|
722
|
+
return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_StopIteration);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/* Special helper that checks for KeyError and if so clears it, only
|
|
726
|
+
indicating if it was set in the return value.
|
|
727
|
+
|
|
728
|
+
Equivalent to if(PyErr_ExceptionMatches(PyExc_KeyError) PyErr_Clear();
|
|
729
|
+
|
|
730
|
+
*/
|
|
731
|
+
NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_KEY_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
732
|
+
return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_KeyError);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_ATTRIBUTE_ERROR_OCCURRED(PyThreadState *tstate) {
|
|
736
|
+
return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_AttributeError);
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
// Format a NameError exception for a variable name, chains with existing exception.
|
|
740
|
+
extern void SET_CURRENT_EXCEPTION_NAME_ERROR(PyThreadState *tstate, PyObject *variable_name);
|
|
741
|
+
|
|
742
|
+
#if PYTHON_VERSION < 0x340
|
|
743
|
+
// Same as SET_CURRENT_EXCEPTION_NAME_ERROR with different wording, sometimes for Python2.
|
|
744
|
+
extern void SET_CURRENT_EXCEPTION_GLOBAL_NAME_ERROR(PyThreadState *tstate, PyObject *variable_name);
|
|
745
|
+
#endif
|
|
746
|
+
|
|
747
|
+
// Format a UnboundLocalError exception for a variable name.
|
|
748
|
+
extern void FORMAT_UNBOUND_LOCAL_ERROR(PyObject **exception_type, PyObject **exception_value, PyObject *variable_name);
|
|
749
|
+
|
|
750
|
+
extern void FORMAT_UNBOUND_CLOSURE_ERROR(PyObject **exception_type, PyObject **exception_value,
|
|
751
|
+
PyObject *variable_name);
|
|
752
|
+
|
|
753
|
+
#if PYTHON_VERSION >= 0x3c0
|
|
754
|
+
NUITKA_MAY_BE_UNUSED static PyObject *MAKE_TUPLE1(PyThreadState *tstate, PyObject *element1);
|
|
755
|
+
|
|
756
|
+
NUITKA_MAY_BE_UNUSED static PyObject *MAKE_EXCEPTION_FROM_TYPE_ARG0(PyThreadState *tstate, PyObject *type,
|
|
757
|
+
PyObject *arg) {
|
|
758
|
+
PyBaseExceptionObject *self;
|
|
759
|
+
|
|
760
|
+
PyTypeObject *type_object = (PyTypeObject *)type;
|
|
761
|
+
|
|
762
|
+
self = (PyBaseExceptionObject *)(type_object->tp_alloc(type_object, 0));
|
|
763
|
+
|
|
764
|
+
self->dict = NULL;
|
|
765
|
+
self->notes = NULL;
|
|
766
|
+
self->traceback = self->cause = self->context = NULL;
|
|
767
|
+
self->suppress_context = 0;
|
|
768
|
+
|
|
769
|
+
assert(arg != NULL);
|
|
770
|
+
|
|
771
|
+
if (!PyTuple_Check(arg)) {
|
|
772
|
+
self->args = MAKE_TUPLE1(tstate, arg);
|
|
773
|
+
} else {
|
|
774
|
+
self->args = Py_NewRef(arg);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
return (PyObject *)self;
|
|
778
|
+
}
|
|
779
|
+
#else
|
|
780
|
+
|
|
781
|
+
extern PyObject *CALL_FUNCTION_WITH_SINGLE_ARG(PyThreadState *tstate, PyObject *called, PyObject *arg);
|
|
782
|
+
|
|
783
|
+
NUITKA_MAY_BE_UNUSED static PyObject *MAKE_EXCEPTION_FROM_TYPE_ARG0(PyThreadState *tstate, PyObject *type,
|
|
784
|
+
PyObject *arg) {
|
|
785
|
+
return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, type, arg);
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
#endif
|
|
789
|
+
|
|
790
|
+
#if PYTHON_VERSION < 0x3c0
|
|
791
|
+
struct Nuitka_ExceptionPreservationItem {
|
|
792
|
+
PyObject *exception_type;
|
|
793
|
+
PyObject *exception_value;
|
|
794
|
+
PyTracebackObject *exception_tb;
|
|
795
|
+
};
|
|
796
|
+
|
|
797
|
+
// Fetch the current exception into state, transfers reference coming from tstate ownership. Old values are overwritten.
|
|
798
|
+
NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED_STATE(PyThreadState *tstate,
|
|
799
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
800
|
+
FETCH_ERROR_OCCURRED(tstate, &exception_state->exception_type, &exception_state->exception_value,
|
|
801
|
+
&exception_state->exception_tb);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
// Restore the current exception from state, transfers reference from state to tstate ownership.
|
|
805
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
806
|
+
RESTORE_ERROR_OCCURRED_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
807
|
+
RESTORE_ERROR_OCCURRED(tstate, exception_state->exception_type, exception_state->exception_value,
|
|
808
|
+
exception_state->exception_tb);
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
812
|
+
FETCH_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
813
|
+
FETCH_ERROR_OCCURRED_UNTRACED(tstate, &exception_state->exception_type, &exception_state->exception_value,
|
|
814
|
+
&exception_state->exception_tb);
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
818
|
+
RESTORE_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
819
|
+
RESTORE_ERROR_OCCURRED_UNTRACED(tstate, exception_state->exception_type, exception_state->exception_value,
|
|
820
|
+
exception_state->exception_tb);
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
824
|
+
ASSERT_SAME_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state1,
|
|
825
|
+
struct Nuitka_ExceptionPreservationItem const *exception_state2) {
|
|
826
|
+
assert(exception_state1->exception_type == exception_state2->exception_type);
|
|
827
|
+
assert(exception_state1->exception_value == exception_state2->exception_value);
|
|
828
|
+
assert(exception_state1->exception_tb == exception_state2->exception_tb);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
832
|
+
ASSERT_EMPTY_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
833
|
+
assert(exception_state->exception_type == NULL);
|
|
834
|
+
assert(exception_state->exception_value == NULL);
|
|
835
|
+
assert(exception_state->exception_tb == NULL);
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
NUITKA_MAY_BE_UNUSED static void INIT_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
839
|
+
exception_state->exception_type = NULL;
|
|
840
|
+
exception_state->exception_value = NULL;
|
|
841
|
+
exception_state->exception_tb = NULL;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
845
|
+
RELEASE_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
846
|
+
CHECK_OBJECT(exception_state->exception_type);
|
|
847
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
848
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
849
|
+
Py_DECREF(exception_state->exception_type);
|
|
850
|
+
Py_XDECREF(exception_state->exception_value);
|
|
851
|
+
Py_XDECREF(exception_state->exception_tb);
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
855
|
+
RELEASE_ERROR_OCCURRED_STATE_X(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
856
|
+
CHECK_OBJECT_X(exception_state->exception_type);
|
|
857
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
858
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
859
|
+
|
|
860
|
+
Py_XDECREF(exception_state->exception_type);
|
|
861
|
+
Py_XDECREF(exception_state->exception_value);
|
|
862
|
+
Py_XDECREF(exception_state->exception_tb);
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(
|
|
866
|
+
PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state, PyObject *exception_type,
|
|
867
|
+
PyObject *exception_value, PyTracebackObject *exception_tb) {
|
|
868
|
+
Py_INCREF(exception_type);
|
|
869
|
+
Py_XINCREF(exception_value);
|
|
870
|
+
Py_XINCREF(exception_tb);
|
|
871
|
+
|
|
872
|
+
exception_state->exception_type = exception_type;
|
|
873
|
+
exception_state->exception_value = exception_value;
|
|
874
|
+
exception_state->exception_tb = exception_tb;
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
878
|
+
ASSIGN_ARGS_FROM_EXCEPTION_PRESERVATION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
879
|
+
PyObject **exception_type, PyObject **exception_value,
|
|
880
|
+
PyTracebackObject **exception_tb) {
|
|
881
|
+
|
|
882
|
+
*exception_type = exception_state->exception_type;
|
|
883
|
+
Py_INCREF(*exception_type);
|
|
884
|
+
*exception_value = exception_state->exception_value;
|
|
885
|
+
Py_XINCREF(*exception_value);
|
|
886
|
+
*exception_tb = exception_state->exception_tb;
|
|
887
|
+
Py_XINCREF(*exception_tb);
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
NUITKA_MAY_BE_UNUSED static PyTracebackObject *
|
|
891
|
+
GET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
892
|
+
return exception_state->exception_tb;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
// Transfer ownership of the traceback to the exception state.
|
|
896
|
+
NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
897
|
+
PyTracebackObject *exception_tb) {
|
|
898
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
899
|
+
CHECK_OBJECT_X(exception_tb);
|
|
900
|
+
Py_XDECREF(exception_state->exception_tb);
|
|
901
|
+
exception_state->exception_tb = exception_tb;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
NUITKA_MAY_BE_UNUSED static bool HAS_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
905
|
+
return exception_state->exception_type != NULL;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
NUITKA_MAY_BE_UNUSED static bool
|
|
909
|
+
EXCEPTION_STATE_MATCH_BOOL_SINGLE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
910
|
+
PyObject *exception_checked) {
|
|
911
|
+
return EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_state->exception_type, exception_checked);
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
915
|
+
CHECK_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
916
|
+
CHECK_OBJECT(exception_state->exception_type);
|
|
917
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
918
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
922
|
+
CHECK_EXCEPTION_STATE_X(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
923
|
+
CHECK_OBJECT_X(exception_state->exception_type);
|
|
924
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
925
|
+
CHECK_OBJECT_X(exception_state->exception_tb);
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
#else
|
|
929
|
+
struct Nuitka_ExceptionPreservationItem {
|
|
930
|
+
PyObject *exception_value;
|
|
931
|
+
};
|
|
932
|
+
|
|
933
|
+
// Fetch the current exception into state, transfers reference coming from tstate ownership. Old value is overwritten.
|
|
934
|
+
NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED_STATE(PyThreadState *tstate,
|
|
935
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
936
|
+
exception_state->exception_value = tstate->current_exception;
|
|
937
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
938
|
+
|
|
939
|
+
#if _DEBUG_EXCEPTIONS
|
|
940
|
+
PRINT_STRING("FETCH_ERROR_OCCURRED_STATE:\n");
|
|
941
|
+
PRINT_CURRENT_EXCEPTION();
|
|
942
|
+
#endif
|
|
943
|
+
|
|
944
|
+
tstate->current_exception = NULL;
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
948
|
+
FETCH_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
949
|
+
exception_state->exception_value = tstate->current_exception;
|
|
950
|
+
tstate->current_exception = NULL;
|
|
951
|
+
|
|
952
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
956
|
+
RESTORE_ERROR_OCCURRED_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
957
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
958
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
959
|
+
|
|
960
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
961
|
+
tstate->current_exception = exception_state->exception_value;
|
|
962
|
+
|
|
963
|
+
#if _DEBUG_EXCEPTIONS
|
|
964
|
+
PRINT_STRING("RESTORE_ERROR_OCCURRED:\n");
|
|
965
|
+
PRINT_CURRENT_EXCEPTION();
|
|
966
|
+
#endif
|
|
967
|
+
|
|
968
|
+
Py_XDECREF(old_exception_value);
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
972
|
+
RESTORE_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
973
|
+
PyObject *old_exception_value = tstate->current_exception;
|
|
974
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
|
|
975
|
+
|
|
976
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
977
|
+
tstate->current_exception = exception_state->exception_value;
|
|
978
|
+
|
|
979
|
+
Py_XDECREF(old_exception_value);
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
983
|
+
ASSERT_SAME_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state1,
|
|
984
|
+
struct Nuitka_ExceptionPreservationItem *exception_state2) {
|
|
985
|
+
assert(exception_state1->exception_value == exception_state2->exception_value);
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
989
|
+
ASSERT_EMPTY_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
990
|
+
assert(exception_state->exception_value == NULL);
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
NUITKA_MAY_BE_UNUSED static void INIT_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
994
|
+
exception_state->exception_value = NULL;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
998
|
+
RELEASE_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
999
|
+
CHECK_OBJECT(exception_state->exception_value);
|
|
1000
|
+
Py_DECREF(exception_state->exception_value);
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
1004
|
+
RELEASE_ERROR_OCCURRED_STATE_X(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
1005
|
+
CHECK_OBJECT_X(exception_state->exception_value);
|
|
1006
|
+
Py_XDECREF(exception_state->exception_value);
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(
|
|
1010
|
+
PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state, PyObject *exception_type,
|
|
1011
|
+
PyObject *exception_value, PyTracebackObject *exception_tb) {
|
|
1012
|
+
|
|
1013
|
+
Py_XINCREF(exception_type);
|
|
1014
|
+
Py_XINCREF(exception_value);
|
|
1015
|
+
Py_XINCREF(exception_tb);
|
|
1016
|
+
|
|
1017
|
+
NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, &exception_tb);
|
|
1018
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
|
|
1019
|
+
|
|
1020
|
+
exception_state->exception_value = exception_value;
|
|
1021
|
+
Py_INCREF(exception_value);
|
|
1022
|
+
|
|
1023
|
+
ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_value, exception_tb);
|
|
1024
|
+
|
|
1025
|
+
Py_XDECREF(exception_type);
|
|
1026
|
+
Py_XDECREF(exception_value);
|
|
1027
|
+
Py_XDECREF(exception_tb);
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
NUITKA_MAY_BE_UNUSED static void
|
|
1031
|
+
ASSIGN_ARGS_FROM_EXCEPTION_PRESERVATION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1032
|
+
PyObject **exception_type, PyObject **exception_value,
|
|
1033
|
+
PyTracebackObject **exception_tb) {
|
|
1034
|
+
|
|
1035
|
+
*exception_value = exception_state->exception_value;
|
|
1036
|
+
|
|
1037
|
+
if (*exception_value) {
|
|
1038
|
+
Py_INCREF(*exception_value);
|
|
1039
|
+
|
|
1040
|
+
*exception_type = (PyObject *)PyExceptionInstance_Class(*exception_value);
|
|
1041
|
+
Py_INCREF(*exception_type);
|
|
1042
|
+
*exception_tb = GET_EXCEPTION_TRACEBACK(*exception_value);
|
|
1043
|
+
Py_XINCREF(*exception_tb);
|
|
1044
|
+
} else {
|
|
1045
|
+
*exception_type = NULL;
|
|
1046
|
+
*exception_tb = NULL;
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
NUITKA_MAY_BE_UNUSED static PyTracebackObject *
|
|
1051
|
+
GET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
1052
|
+
return GET_EXCEPTION_TRACEBACK(exception_state->exception_value);
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
// Transfer ownership of the traceback to the exception state.
|
|
1056
|
+
NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1057
|
+
PyTracebackObject *exception_tb) {
|
|
1058
|
+
ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_state->exception_value, exception_tb);
|
|
1059
|
+
Py_XDECREF(exception_tb);
|
|
1060
|
+
CHECK_OBJECT_X(exception_tb);
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
NUITKA_MAY_BE_UNUSED static bool HAS_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
1064
|
+
return exception_state->exception_value != NULL;
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
NUITKA_MAY_BE_UNUSED static bool
|
|
1068
|
+
EXCEPTION_STATE_MATCH_BOOL_SINGLE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem const *exception_state,
|
|
1069
|
+
PyObject *exception_checked) {
|
|
1070
|
+
return EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_state->exception_value, exception_checked);
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1074
|
+
CHECK_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
1075
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_state->exception_value);
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1079
|
+
CHECK_EXCEPTION_STATE_X(struct Nuitka_ExceptionPreservationItem const *exception_state) {
|
|
1080
|
+
ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
#endif
|
|
1084
|
+
|
|
1085
|
+
NUITKA_MAY_BE_UNUSED inline static void
|
|
1086
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_STR(PyThreadState *tstate,
|
|
1087
|
+
struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
1088
|
+
PyObject *exception_type, char const *value) {
|
|
1089
|
+
PyObject *exception_value = Nuitka_String_FromString(value);
|
|
1090
|
+
|
|
1091
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, exception_state, exception_type, exception_value, NULL);
|
|
1092
|
+
Py_DECREF(exception_value);
|
|
1093
|
+
}
|
|
1094
|
+
|
|
617
1095
|
NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_GENERATOR(PyThreadState *tstate, PyObject *exception_value) {
|
|
618
1096
|
CHECK_OBJECT(exception_value);
|
|
619
1097
|
|
|
@@ -629,9 +1107,8 @@ NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_GENERATOR(PyThreadState *tstate
|
|
|
629
1107
|
|
|
630
1108
|
if (PyExceptionClass_Check(exception_value)) {
|
|
631
1109
|
// Save the current exception, if any, we must preserve it.
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
|
|
1110
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1111
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
635
1112
|
|
|
636
1113
|
int res = PyObject_IsSubclass(exception_value, PyExc_GeneratorExit);
|
|
637
1114
|
|
|
@@ -651,7 +1128,7 @@ NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_GENERATOR(PyThreadState *tstate
|
|
|
651
1128
|
PyErr_WriteUnraisable(exception_value);
|
|
652
1129
|
}
|
|
653
1130
|
|
|
654
|
-
|
|
1131
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
655
1132
|
|
|
656
1133
|
return res == 1;
|
|
657
1134
|
}
|
|
@@ -676,9 +1153,8 @@ NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_BOOL_SINGLE(PyThreadState *tsta
|
|
|
676
1153
|
|
|
677
1154
|
if (PyExceptionClass_Check(exception_value)) {
|
|
678
1155
|
// Save the current exception, if any, we must preserve it.
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
|
|
1156
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1157
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
682
1158
|
|
|
683
1159
|
int res = PyObject_IsSubclass(exception_value, exception_checked);
|
|
684
1160
|
|
|
@@ -687,7 +1163,7 @@ NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_BOOL_SINGLE(PyThreadState *tsta
|
|
|
687
1163
|
PyErr_WriteUnraisable(exception_value);
|
|
688
1164
|
}
|
|
689
1165
|
|
|
690
|
-
|
|
1166
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
691
1167
|
|
|
692
1168
|
return res == 1;
|
|
693
1169
|
}
|
|
@@ -711,9 +1187,8 @@ NUITKA_MAY_BE_UNUSED static inline int _EXCEPTION_MATCH_BOOL(PyThreadState *tsta
|
|
|
711
1187
|
#if PYTHON_VERSION < 0x300
|
|
712
1188
|
if (PyExceptionClass_Check(exception_class) && PyExceptionClass_Check(exception_checked)) {
|
|
713
1189
|
// Save the current exception, if any, we must preserve it.
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
|
|
1190
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1191
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
717
1192
|
|
|
718
1193
|
// Avoid recursion limit being exceeded just then
|
|
719
1194
|
int recursion_limit = Py_GetRecursionLimit();
|
|
@@ -731,7 +1206,7 @@ NUITKA_MAY_BE_UNUSED static inline int _EXCEPTION_MATCH_BOOL(PyThreadState *tsta
|
|
|
731
1206
|
res = 0;
|
|
732
1207
|
}
|
|
733
1208
|
|
|
734
|
-
|
|
1209
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
735
1210
|
|
|
736
1211
|
return res;
|
|
737
1212
|
} else {
|
|
@@ -795,118 +1270,46 @@ NUITKA_MAY_BE_UNUSED static inline int EXCEPTION_MATCH_BOOL(PyThreadState *tstat
|
|
|
795
1270
|
}
|
|
796
1271
|
}
|
|
797
1272
|
|
|
798
|
-
#if PYTHON_VERSION >=
|
|
799
|
-
// Attach the exception context if necessary.
|
|
800
|
-
NUITKA_MAY_BE_UNUSED static inline void ADD_EXCEPTION_CONTEXT(PyThreadState *tstate, PyObject **exception_type,
|
|
801
|
-
PyObject **exception_value) {
|
|
802
|
-
PyObject *context = EXC_VALUE(tstate);
|
|
803
|
-
|
|
804
|
-
if (context != NULL) {
|
|
805
|
-
NORMALIZE_EXCEPTION(tstate, exception_type, exception_value, NULL);
|
|
806
|
-
|
|
807
|
-
Py_INCREF(context);
|
|
808
|
-
PyException_SetContext(*exception_value, context);
|
|
809
|
-
}
|
|
810
|
-
}
|
|
811
|
-
#endif
|
|
812
|
-
|
|
813
|
-
NUITKA_MAY_BE_UNUSED static bool _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(PyThreadState *tstate, PyObject *exception_type) {
|
|
814
|
-
#if PYTHON_VERSION < 0x3c0
|
|
815
|
-
PyObject *exception_current = tstate->curexc_type;
|
|
816
|
-
#else
|
|
817
|
-
PyObject *exception_current = tstate->current_exception;
|
|
818
|
-
|
|
819
|
-
#endif
|
|
820
|
-
if (exception_current == NULL) {
|
|
821
|
-
return true;
|
|
822
|
-
} else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_current, exception_type)) {
|
|
823
|
-
// Clear the exception first, we believe we know it doesn't have side effects.
|
|
824
|
-
Py_DECREF(exception_current);
|
|
825
|
-
|
|
826
|
-
#if PYTHON_VERSION < 0x3c0
|
|
827
|
-
tstate->curexc_type = NULL;
|
|
828
|
-
|
|
829
|
-
PyObject *old_value = tstate->curexc_value;
|
|
830
|
-
PyObject *old_tb = tstate->curexc_traceback;
|
|
831
|
-
|
|
832
|
-
tstate->curexc_value = NULL;
|
|
833
|
-
tstate->curexc_traceback = NULL;
|
|
834
|
-
|
|
835
|
-
Py_XDECREF(old_value);
|
|
836
|
-
Py_XDECREF(old_tb);
|
|
837
|
-
#else
|
|
838
|
-
tstate->current_exception = NULL;
|
|
839
|
-
#endif
|
|
840
|
-
|
|
841
|
-
return true;
|
|
842
|
-
} else {
|
|
843
|
-
return false;
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
|
|
847
|
-
/* Special helper that checks for StopIteration and if so clears it, only
|
|
848
|
-
indicating if it was set in the return value.
|
|
849
|
-
|
|
850
|
-
Equivalent to if(PyErr_ExceptionMatches(PyExc_StopIteration) PyErr_Clear();
|
|
851
|
-
|
|
852
|
-
If error is raised by built-in function next() and an iterator’s __next__()
|
|
853
|
-
method to signal that there are no further items produced by the iterator then
|
|
854
|
-
it resets the TSTATE to NULL and returns True else return False
|
|
855
|
-
|
|
856
|
-
*/
|
|
857
|
-
NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED(PyThreadState *tstate) {
|
|
858
|
-
return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_StopIteration);
|
|
859
|
-
}
|
|
860
|
-
|
|
861
|
-
/* Special helper that checks for KeyError and if so clears it, only
|
|
862
|
-
indicating if it was set in the return value.
|
|
1273
|
+
#if PYTHON_VERSION >= 0x3c0
|
|
863
1274
|
|
|
864
|
-
|
|
1275
|
+
// Python3.12: TODO: Must get rid of those by generating code with exception_state
|
|
1276
|
+
NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED(PyThreadState *tstate, PyObject **exception_type,
|
|
1277
|
+
PyObject **exception_value,
|
|
1278
|
+
PyTracebackObject **exception_traceback) {
|
|
865
1279
|
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
1280
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
1281
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &exception_state);
|
|
1282
|
+
ASSIGN_ARGS_FROM_EXCEPTION_PRESERVATION_STATE(&exception_state, exception_type, exception_value,
|
|
1283
|
+
exception_traceback);
|
|
1284
|
+
RELEASE_ERROR_OCCURRED_STATE_X(&exception_state);
|
|
869
1285
|
}
|
|
870
1286
|
|
|
871
|
-
NUITKA_MAY_BE_UNUSED static
|
|
872
|
-
|
|
1287
|
+
NUITKA_MAY_BE_UNUSED static void RESTORE_ERROR_OCCURRED(PyThreadState *tstate, PyObject *exception_type,
|
|
1288
|
+
PyObject *exception_value, PyTracebackObject *exception_tb) {
|
|
1289
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
1290
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, &exception_state, exception_type, exception_value, exception_tb);
|
|
1291
|
+
Py_XDECREF(exception_type);
|
|
1292
|
+
Py_XDECREF(exception_value);
|
|
1293
|
+
Py_XDECREF(exception_tb);
|
|
1294
|
+
|
|
1295
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
|
|
873
1296
|
}
|
|
874
1297
|
|
|
875
|
-
// Format a NameError exception for a variable name.
|
|
876
|
-
extern void FORMAT_NAME_ERROR(PyObject **exception_type, PyObject **exception_value, PyObject *variable_name);
|
|
877
|
-
|
|
878
|
-
#if PYTHON_VERSION < 0x340
|
|
879
|
-
// Same as FORMAT_NAME_ERROR with different wording, sometimes used for older Python version.
|
|
880
|
-
extern void FORMAT_GLOBAL_NAME_ERROR(PyObject **exception_type, PyObject **exception_value, PyObject *variable_name);
|
|
881
1298
|
#endif
|
|
882
1299
|
|
|
883
|
-
// Format a UnboundLocalError exception for a variable name.
|
|
884
|
-
extern void FORMAT_UNBOUND_LOCAL_ERROR(PyObject **exception_type, PyObject **exception_value, PyObject *variable_name);
|
|
885
|
-
|
|
886
|
-
extern void FORMAT_UNBOUND_CLOSURE_ERROR(PyObject **exception_type, PyObject **exception_value,
|
|
887
|
-
PyObject *variable_name);
|
|
888
|
-
|
|
889
1300
|
#endif
|
|
890
1301
|
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
self->args = MAKE_TUPLE1(arg);
|
|
906
|
-
} else {
|
|
907
|
-
self->args = Py_NewRef(arg);
|
|
908
|
-
}
|
|
909
|
-
|
|
910
|
-
return (PyObject *)self;
|
|
911
|
-
}
|
|
912
|
-
#endif
|
|
1302
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1303
|
+
// integrates with CPython, but also works on its own.
|
|
1304
|
+
//
|
|
1305
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1306
|
+
// you may not use this file except in compliance with the License.
|
|
1307
|
+
// You may obtain a copy of the License at
|
|
1308
|
+
//
|
|
1309
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1310
|
+
//
|
|
1311
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1312
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1313
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1314
|
+
// See the License for the specific language governing permissions and
|
|
1315
|
+
// limitations under the License.
|