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
|
/** Compiled Coroutines.
|
|
19
4
|
*
|
|
20
5
|
* Unlike in CPython, we have one type for just coroutines, this doesn't do generators
|
|
@@ -29,7 +14,7 @@
|
|
|
29
14
|
#ifdef __IDE_ONLY__
|
|
30
15
|
#include "nuitka/freelists.h"
|
|
31
16
|
#include "nuitka/prelude.h"
|
|
32
|
-
#include
|
|
17
|
+
#include <structmember.h>
|
|
33
18
|
#endif
|
|
34
19
|
|
|
35
20
|
// For reporting about reference counts per type.
|
|
@@ -72,20 +57,21 @@ static void Nuitka_MarkCoroutineAsNotRunning(struct Nuitka_CoroutineObject *coro
|
|
|
72
57
|
}
|
|
73
58
|
|
|
74
59
|
static PyObject *_Nuitka_Coroutine_send(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine,
|
|
75
|
-
PyObject *value, bool closing,
|
|
76
|
-
|
|
60
|
+
PyObject *value, bool closing,
|
|
61
|
+
struct Nuitka_ExceptionPreservationItem *exception_state);
|
|
77
62
|
|
|
78
63
|
static long Nuitka_Coroutine_tp_hash(struct Nuitka_CoroutineObject *coroutine) { return coroutine->m_counter; }
|
|
79
64
|
|
|
80
|
-
static PyObject *Nuitka_Coroutine_get_name(
|
|
81
|
-
CHECK_OBJECT(
|
|
65
|
+
static PyObject *Nuitka_Coroutine_get_name(PyObject *self, void *data) {
|
|
66
|
+
CHECK_OBJECT(self);
|
|
82
67
|
|
|
68
|
+
struct Nuitka_CoroutineObject *coroutine = (struct Nuitka_CoroutineObject *)self;
|
|
83
69
|
Py_INCREF(coroutine->m_name);
|
|
84
70
|
return coroutine->m_name;
|
|
85
71
|
}
|
|
86
72
|
|
|
87
|
-
static int Nuitka_Coroutine_set_name(
|
|
88
|
-
CHECK_OBJECT(
|
|
73
|
+
static int Nuitka_Coroutine_set_name(PyObject *self, PyObject *value, void *data) {
|
|
74
|
+
CHECK_OBJECT(self);
|
|
89
75
|
CHECK_OBJECT_X(value);
|
|
90
76
|
|
|
91
77
|
// Cannot be deleted, not be non-unicode value.
|
|
@@ -96,6 +82,7 @@ static int Nuitka_Coroutine_set_name(struct Nuitka_CoroutineObject *coroutine, P
|
|
|
96
82
|
return -1;
|
|
97
83
|
}
|
|
98
84
|
|
|
85
|
+
struct Nuitka_CoroutineObject *coroutine = (struct Nuitka_CoroutineObject *)self;
|
|
99
86
|
PyObject *tmp = coroutine->m_name;
|
|
100
87
|
Py_INCREF(value);
|
|
101
88
|
coroutine->m_name = value;
|
|
@@ -104,15 +91,16 @@ static int Nuitka_Coroutine_set_name(struct Nuitka_CoroutineObject *coroutine, P
|
|
|
104
91
|
return 0;
|
|
105
92
|
}
|
|
106
93
|
|
|
107
|
-
static PyObject *Nuitka_Coroutine_get_qualname(
|
|
108
|
-
CHECK_OBJECT(
|
|
94
|
+
static PyObject *Nuitka_Coroutine_get_qualname(PyObject *self, void *data) {
|
|
95
|
+
CHECK_OBJECT(self);
|
|
109
96
|
|
|
97
|
+
struct Nuitka_CoroutineObject *coroutine = (struct Nuitka_CoroutineObject *)self;
|
|
110
98
|
Py_INCREF(coroutine->m_qualname);
|
|
111
99
|
return coroutine->m_qualname;
|
|
112
100
|
}
|
|
113
101
|
|
|
114
|
-
static int Nuitka_Coroutine_set_qualname(
|
|
115
|
-
CHECK_OBJECT(
|
|
102
|
+
static int Nuitka_Coroutine_set_qualname(PyObject *self, PyObject *value, void *data) {
|
|
103
|
+
CHECK_OBJECT(self);
|
|
116
104
|
CHECK_OBJECT_X(value);
|
|
117
105
|
|
|
118
106
|
// Cannot be deleted, not be non-unicode value.
|
|
@@ -123,6 +111,7 @@ static int Nuitka_Coroutine_set_qualname(struct Nuitka_CoroutineObject *coroutin
|
|
|
123
111
|
return -1;
|
|
124
112
|
}
|
|
125
113
|
|
|
114
|
+
struct Nuitka_CoroutineObject *coroutine = (struct Nuitka_CoroutineObject *)self;
|
|
126
115
|
PyObject *tmp = coroutine->m_qualname;
|
|
127
116
|
Py_INCREF(value);
|
|
128
117
|
coroutine->m_qualname = value;
|
|
@@ -131,20 +120,22 @@ static int Nuitka_Coroutine_set_qualname(struct Nuitka_CoroutineObject *coroutin
|
|
|
131
120
|
return 0;
|
|
132
121
|
}
|
|
133
122
|
|
|
134
|
-
static PyObject *Nuitka_Coroutine_get_cr_await(
|
|
123
|
+
static PyObject *Nuitka_Coroutine_get_cr_await(PyObject *self, void *data) {
|
|
124
|
+
struct Nuitka_CoroutineObject *coroutine = (struct Nuitka_CoroutineObject *)self;
|
|
135
125
|
CHECK_OBJECT(coroutine);
|
|
136
|
-
CHECK_OBJECT_X(coroutine->
|
|
126
|
+
CHECK_OBJECT_X(coroutine->m_yield_from);
|
|
137
127
|
|
|
138
|
-
if (coroutine->
|
|
139
|
-
Py_INCREF(coroutine->
|
|
140
|
-
return coroutine->
|
|
128
|
+
if (coroutine->m_yield_from) {
|
|
129
|
+
Py_INCREF(coroutine->m_yield_from);
|
|
130
|
+
return coroutine->m_yield_from;
|
|
141
131
|
} else {
|
|
142
|
-
|
|
132
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
143
133
|
return Py_None;
|
|
144
134
|
}
|
|
145
135
|
}
|
|
146
136
|
|
|
147
|
-
static PyObject *Nuitka_Coroutine_get_code(
|
|
137
|
+
static PyObject *Nuitka_Coroutine_get_code(PyObject *self, void *data) {
|
|
138
|
+
struct Nuitka_CoroutineObject *coroutine = (struct Nuitka_CoroutineObject *)self;
|
|
148
139
|
CHECK_OBJECT(coroutine);
|
|
149
140
|
CHECK_OBJECT(coroutine->m_code_object);
|
|
150
141
|
|
|
@@ -152,8 +143,8 @@ static PyObject *Nuitka_Coroutine_get_code(struct Nuitka_CoroutineObject *corout
|
|
|
152
143
|
return (PyObject *)coroutine->m_code_object;
|
|
153
144
|
}
|
|
154
145
|
|
|
155
|
-
static int Nuitka_Coroutine_set_code(
|
|
156
|
-
CHECK_OBJECT(
|
|
146
|
+
static int Nuitka_Coroutine_set_code(PyObject *self, PyObject *value, void *data) {
|
|
147
|
+
CHECK_OBJECT(self);
|
|
157
148
|
|
|
158
149
|
PyThreadState *tstate = PyThreadState_GET();
|
|
159
150
|
|
|
@@ -161,7 +152,8 @@ static int Nuitka_Coroutine_set_code(struct Nuitka_CoroutineObject *coroutine, P
|
|
|
161
152
|
return -1;
|
|
162
153
|
}
|
|
163
154
|
|
|
164
|
-
static PyObject *Nuitka_Coroutine_get_frame(
|
|
155
|
+
static PyObject *Nuitka_Coroutine_get_frame(PyObject *self, void *data) {
|
|
156
|
+
struct Nuitka_CoroutineObject *coroutine = (struct Nuitka_CoroutineObject *)self;
|
|
165
157
|
CHECK_OBJECT(coroutine);
|
|
166
158
|
CHECK_OBJECT_X(coroutine->m_frame);
|
|
167
159
|
|
|
@@ -169,13 +161,13 @@ static PyObject *Nuitka_Coroutine_get_frame(struct Nuitka_CoroutineObject *corou
|
|
|
169
161
|
Py_INCREF(coroutine->m_frame);
|
|
170
162
|
return (PyObject *)coroutine->m_frame;
|
|
171
163
|
} else {
|
|
172
|
-
|
|
164
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
173
165
|
return Py_None;
|
|
174
166
|
}
|
|
175
167
|
}
|
|
176
168
|
|
|
177
|
-
static int Nuitka_Coroutine_set_frame(
|
|
178
|
-
CHECK_OBJECT(
|
|
169
|
+
static int Nuitka_Coroutine_set_frame(PyObject *self, PyObject *value, void *data) {
|
|
170
|
+
CHECK_OBJECT(self);
|
|
179
171
|
CHECK_OBJECT_X(value);
|
|
180
172
|
|
|
181
173
|
PyThreadState *tstate = PyThreadState_GET();
|
|
@@ -196,30 +188,29 @@ static void Nuitka_Coroutine_release_closure(struct Nuitka_CoroutineObject *coro
|
|
|
196
188
|
}
|
|
197
189
|
|
|
198
190
|
// Note: Shared with asyncgen.
|
|
199
|
-
static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *
|
|
191
|
+
static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yield_from, PyObject *send_value,
|
|
200
192
|
PyObject **returned_value, bool mode) {
|
|
201
193
|
// Send iteration value to the sub-generator, which may be a CPython
|
|
202
194
|
// generator object, something with an iterator next, or a send method,
|
|
203
195
|
// where the later is only required if values other than "None" need to
|
|
204
196
|
// be passed in.
|
|
205
|
-
CHECK_OBJECT(
|
|
197
|
+
CHECK_OBJECT(yield_from);
|
|
206
198
|
CHECK_OBJECT_X(send_value);
|
|
207
199
|
|
|
208
200
|
assert(send_value != NULL || HAS_ERROR_OCCURRED(tstate));
|
|
209
201
|
|
|
210
202
|
PyObject *retval;
|
|
211
203
|
|
|
212
|
-
|
|
213
|
-
PyTracebackObject *exception_tb;
|
|
204
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
214
205
|
|
|
215
|
-
|
|
206
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &exception_state);
|
|
216
207
|
|
|
217
|
-
if (
|
|
208
|
+
if (HAS_EXCEPTION_STATE(&exception_state)) {
|
|
218
209
|
// Exception, was thrown into us, need to send that to sub-generator.
|
|
219
210
|
// We acquired ownership of the published exception and need to release it potentially.
|
|
220
211
|
|
|
221
212
|
// Transfer exception owner this.
|
|
222
|
-
retval = _Nuitka_YieldFromPassExceptionTo(tstate,
|
|
213
|
+
retval = _Nuitka_YieldFromPassExceptionTo(tstate, yield_from, &exception_state);
|
|
223
214
|
|
|
224
215
|
// TODO: This wants to look at retval most definitely, send_value is going to be NULL.
|
|
225
216
|
if (unlikely(send_value == NULL)) {
|
|
@@ -232,24 +223,28 @@ static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yieldfro
|
|
|
232
223
|
return NULL;
|
|
233
224
|
}
|
|
234
225
|
}
|
|
235
|
-
} else if (PyGen_CheckExact(
|
|
236
|
-
retval = Nuitka_PyGen_Send(tstate, (PyGenObject *)
|
|
237
|
-
} else if (send_value == Py_None && Nuitka_CoroutineWrapper_Check(
|
|
226
|
+
} else if (PyGen_CheckExact(yield_from) || PyCoro_CheckExact(yield_from)) {
|
|
227
|
+
retval = Nuitka_PyGen_Send(tstate, (PyGenObject *)yield_from, Py_None);
|
|
228
|
+
} else if (send_value == Py_None && Nuitka_CoroutineWrapper_Check(yield_from)) {
|
|
238
229
|
struct Nuitka_CoroutineObject *yieldfrom_coroutine =
|
|
239
|
-
((struct Nuitka_CoroutineWrapperObject *)
|
|
230
|
+
((struct Nuitka_CoroutineWrapperObject *)yield_from)->m_coroutine;
|
|
231
|
+
|
|
232
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
233
|
+
|
|
234
|
+
struct Nuitka_ExceptionPreservationItem no_exception_state;
|
|
235
|
+
INIT_ERROR_OCCURRED_STATE(&no_exception_state);
|
|
240
236
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
retval = Py_TYPE(yieldfrom)->tp_iternext(yieldfrom);
|
|
237
|
+
retval = _Nuitka_Coroutine_send(tstate, yieldfrom_coroutine, Py_None, mode ? false : true, &no_exception_state);
|
|
238
|
+
} else if (send_value == Py_None && Py_TYPE(yield_from)->tp_iternext != NULL) {
|
|
239
|
+
retval = Py_TYPE(yield_from)->tp_iternext(yield_from);
|
|
245
240
|
} else {
|
|
246
241
|
#if 0
|
|
247
242
|
// TODO: Add slow mode traces.
|
|
248
|
-
PRINT_ITEM(
|
|
243
|
+
PRINT_ITEM(yield_from);
|
|
249
244
|
PRINT_NEW_LINE();
|
|
250
245
|
#endif
|
|
251
246
|
|
|
252
|
-
retval = PyObject_CallMethodObjArgs(
|
|
247
|
+
retval = PyObject_CallMethodObjArgs(yield_from, const_str_plain_send, send_value, NULL);
|
|
253
248
|
}
|
|
254
249
|
|
|
255
250
|
// Check the sub-generator result
|
|
@@ -257,7 +252,7 @@ static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yieldfro
|
|
|
257
252
|
PyObject *error = GET_ERROR_OCCURRED(tstate);
|
|
258
253
|
|
|
259
254
|
if (error == NULL) {
|
|
260
|
-
|
|
255
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
261
256
|
*returned_value = Py_None;
|
|
262
257
|
} else if (likely(EXCEPTION_MATCH_BOOL_SINGLE(tstate, error, PyExc_StopIteration))) {
|
|
263
258
|
// The sub-generator has given an exception. In case of
|
|
@@ -284,23 +279,23 @@ static PyObject *_Nuitka_YieldFromCoroutineCore(PyThreadState *tstate, struct Nu
|
|
|
284
279
|
CHECK_OBJECT(coroutine);
|
|
285
280
|
CHECK_OBJECT_X(send_value);
|
|
286
281
|
|
|
287
|
-
PyObject *
|
|
288
|
-
CHECK_OBJECT(
|
|
282
|
+
PyObject *yield_from = coroutine->m_yield_from;
|
|
283
|
+
CHECK_OBJECT(yield_from);
|
|
289
284
|
|
|
290
285
|
// Need to make it unaccessible while using it.
|
|
291
|
-
coroutine->
|
|
286
|
+
coroutine->m_yield_from = NULL;
|
|
292
287
|
|
|
293
288
|
PyObject *returned_value;
|
|
294
|
-
PyObject *yielded = _Nuitka_YieldFromCore(tstate,
|
|
289
|
+
PyObject *yielded = _Nuitka_YieldFromCore(tstate, yield_from, send_value, &returned_value, mode);
|
|
295
290
|
|
|
296
291
|
if (yielded == NULL) {
|
|
297
|
-
assert(coroutine->
|
|
298
|
-
Py_DECREF(
|
|
292
|
+
assert(coroutine->m_yield_from == NULL);
|
|
293
|
+
Py_DECREF(yield_from);
|
|
299
294
|
|
|
300
295
|
yielded = ((coroutine_code)coroutine->m_code)(tstate, coroutine, returned_value);
|
|
301
296
|
} else {
|
|
302
|
-
assert(coroutine->
|
|
303
|
-
coroutine->
|
|
297
|
+
assert(coroutine->m_yield_from == NULL);
|
|
298
|
+
coroutine->m_yield_from = yield_from;
|
|
304
299
|
}
|
|
305
300
|
|
|
306
301
|
return yielded;
|
|
@@ -384,30 +379,26 @@ static void Nuitka_SetStopIterationValue(PyThreadState *tstate, PyObject *value)
|
|
|
384
379
|
// be normalized.
|
|
385
380
|
|
|
386
381
|
static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine,
|
|
387
|
-
PyObject *value, bool closing,
|
|
388
|
-
|
|
382
|
+
PyObject *value, bool closing,
|
|
383
|
+
struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
389
384
|
PyObject **result) {
|
|
390
385
|
CHECK_OBJECT(coroutine);
|
|
391
386
|
assert(Nuitka_Coroutine_Check((PyObject *)coroutine));
|
|
392
|
-
|
|
393
|
-
CHECK_OBJECT_X(exception_value);
|
|
394
|
-
CHECK_OBJECT_X(exception_tb);
|
|
387
|
+
CHECK_EXCEPTION_STATE_X(exception_state);
|
|
395
388
|
CHECK_OBJECT_X(value);
|
|
396
389
|
|
|
397
390
|
#if _DEBUG_COROUTINE
|
|
398
391
|
PRINT_COROUTINE_STATUS("Enter", coroutine);
|
|
399
392
|
PRINT_COROUTINE_STRING("closing", closing ? "(closing) " : "(not closing) ");
|
|
400
393
|
PRINT_COROUTINE_VALUE("value", value);
|
|
401
|
-
|
|
394
|
+
PRINT_EXCEPTION_STATE(exception_state);
|
|
402
395
|
PRINT_CURRENT_EXCEPTION();
|
|
403
396
|
PRINT_NEW_LINE();
|
|
404
397
|
#endif
|
|
405
398
|
|
|
406
399
|
// Not both a value and an exception please.
|
|
407
400
|
if (value != NULL) {
|
|
408
|
-
|
|
409
|
-
assert(exception_value == NULL);
|
|
410
|
-
assert(exception_tb == NULL);
|
|
401
|
+
ASSERT_EMPTY_EXCEPTION_STATE(exception_state);
|
|
411
402
|
}
|
|
412
403
|
|
|
413
404
|
if (coroutine->m_status == status_Unused && value != NULL && value != Py_None) {
|
|
@@ -449,11 +440,11 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
449
440
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
450
441
|
|
|
451
442
|
// Check for thrown exception, publish it to the coroutine code.
|
|
452
|
-
if (unlikely(
|
|
443
|
+
if (unlikely(HAS_EXCEPTION_STATE(exception_state))) {
|
|
453
444
|
assert(value == NULL);
|
|
454
445
|
|
|
455
446
|
// Transfer exception ownership to published.
|
|
456
|
-
|
|
447
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
|
|
457
448
|
}
|
|
458
449
|
|
|
459
450
|
#if _DEBUG_COROUTINE
|
|
@@ -466,7 +457,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
466
457
|
|
|
467
458
|
PyObject *yielded;
|
|
468
459
|
|
|
469
|
-
if (coroutine->
|
|
460
|
+
if (coroutine->m_yield_from == NULL) {
|
|
470
461
|
yielded = ((coroutine_code)coroutine->m_code)(tstate, coroutine, value);
|
|
471
462
|
} else {
|
|
472
463
|
// This does not release the value if any, so we need to do it afterwards.
|
|
@@ -474,16 +465,14 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
474
465
|
Py_XDECREF(value);
|
|
475
466
|
}
|
|
476
467
|
|
|
477
|
-
// If the coroutine returns with
|
|
468
|
+
// If the coroutine returns with m_yield_from set, it wants us to yield
|
|
478
469
|
// from that value from now on.
|
|
479
|
-
while (yielded == NULL && coroutine->
|
|
470
|
+
while (yielded == NULL && coroutine->m_yield_from != NULL) {
|
|
480
471
|
yielded = Nuitka_YieldFromCoroutineNext(tstate, coroutine);
|
|
481
472
|
}
|
|
482
473
|
|
|
483
474
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
484
475
|
|
|
485
|
-
tstate = PyThreadState_GET();
|
|
486
|
-
|
|
487
476
|
// Remove the back frame from coroutine if it's there.
|
|
488
477
|
if (coroutine->m_frame) {
|
|
489
478
|
// assert(tstate->frame == &coroutine->m_frame->m_frame);
|
|
@@ -550,30 +539,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
550
539
|
|
|
551
540
|
return PYGEN_RETURN;
|
|
552
541
|
} else if (error == PyExc_StopIteration) {
|
|
553
|
-
|
|
554
|
-
PyTracebackObject *saved_exception_tb;
|
|
555
|
-
|
|
556
|
-
// TODO: For Python3.12, this kind of code ought to use tstate methods entirely.
|
|
557
|
-
FETCH_ERROR_OCCURRED(tstate, &saved_exception_type, &saved_exception_value, &saved_exception_tb);
|
|
558
|
-
NORMALIZE_EXCEPTION(tstate, &saved_exception_type, &saved_exception_value, &saved_exception_tb);
|
|
559
|
-
|
|
560
|
-
PyErr_Format(PyExc_RuntimeError, "coroutine raised StopIteration");
|
|
561
|
-
|
|
562
|
-
FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
|
|
563
|
-
|
|
564
|
-
RAISE_EXCEPTION_WITH_CAUSE(tstate, &exception_type, &exception_value, &exception_tb,
|
|
565
|
-
saved_exception_value);
|
|
566
|
-
|
|
567
|
-
CHECK_OBJECT(exception_value);
|
|
568
|
-
CHECK_OBJECT(saved_exception_value);
|
|
569
|
-
|
|
570
|
-
Py_INCREF(saved_exception_value);
|
|
571
|
-
PyException_SetContext(exception_value, saved_exception_value);
|
|
572
|
-
|
|
573
|
-
Py_DECREF(saved_exception_type);
|
|
574
|
-
Py_XDECREF(saved_exception_tb);
|
|
575
|
-
|
|
576
|
-
RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
|
|
542
|
+
RAISE_RUNTIME_ERROR_RAISED_STOP_ITERATION(tstate, "coroutine raised StopIteration");
|
|
577
543
|
|
|
578
544
|
#if _DEBUG_COROUTINE
|
|
579
545
|
PRINT_COROUTINE_STATUS("Leave with exception set", coroutine);
|
|
@@ -592,9 +558,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
592
558
|
Py_XDECREF(value);
|
|
593
559
|
|
|
594
560
|
// Release exception if any, we are finished with it and will raise another.
|
|
595
|
-
|
|
596
|
-
Py_XDECREF(exception_value);
|
|
597
|
-
Py_XDECREF(exception_tb);
|
|
561
|
+
RELEASE_ERROR_OCCURRED_STATE_X(exception_state);
|
|
598
562
|
|
|
599
563
|
/* This is for status_Finished */
|
|
600
564
|
assert(coroutine->m_status == status_Finished);
|
|
@@ -626,18 +590,15 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
626
590
|
}
|
|
627
591
|
|
|
628
592
|
static PyObject *_Nuitka_Coroutine_send(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine,
|
|
629
|
-
PyObject *value, bool closing,
|
|
630
|
-
|
|
593
|
+
PyObject *value, bool closing,
|
|
594
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
631
595
|
|
|
632
596
|
PyObject *result;
|
|
633
|
-
PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, value, closing,
|
|
634
|
-
exception_tb, &result);
|
|
597
|
+
PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, value, closing, exception_state, &result);
|
|
635
598
|
|
|
636
599
|
switch (res) {
|
|
637
600
|
case PYGEN_RETURN:
|
|
638
|
-
if (result
|
|
639
|
-
SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
|
|
640
|
-
} else {
|
|
601
|
+
if (result != NULL) {
|
|
641
602
|
if (result != Py_None) {
|
|
642
603
|
Nuitka_SetStopIterationValue(tstate, result);
|
|
643
604
|
}
|
|
@@ -663,11 +624,15 @@ static PyObject *Nuitka_Coroutine_send(struct Nuitka_CoroutineObject *coroutine,
|
|
|
663
624
|
Py_INCREF(value);
|
|
664
625
|
|
|
665
626
|
PyThreadState *tstate = PyThreadState_GET();
|
|
666
|
-
|
|
627
|
+
|
|
628
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
629
|
+
INIT_ERROR_OCCURRED_STATE(&exception_state);
|
|
630
|
+
|
|
631
|
+
PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, value, false, &exception_state);
|
|
667
632
|
|
|
668
633
|
if (result == NULL) {
|
|
669
634
|
if (HAS_ERROR_OCCURRED(tstate) == false) {
|
|
670
|
-
|
|
635
|
+
SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
|
|
671
636
|
}
|
|
672
637
|
}
|
|
673
638
|
|
|
@@ -682,9 +647,10 @@ static bool _Nuitka_Coroutine_close(PyThreadState *tstate, struct Nuitka_Corouti
|
|
|
682
647
|
CHECK_OBJECT(coroutine);
|
|
683
648
|
|
|
684
649
|
if (coroutine->m_status == status_Running) {
|
|
685
|
-
|
|
650
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
651
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, &exception_state, PyExc_GeneratorExit, NULL, NULL);
|
|
686
652
|
|
|
687
|
-
PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, true,
|
|
653
|
+
PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, true, &exception_state);
|
|
688
654
|
|
|
689
655
|
if (unlikely(result)) {
|
|
690
656
|
Py_DECREF(result);
|
|
@@ -707,7 +673,7 @@ static PyObject *Nuitka_Coroutine_close(struct Nuitka_CoroutineObject *coroutine
|
|
|
707
673
|
if (unlikely(r == false)) {
|
|
708
674
|
return NULL;
|
|
709
675
|
} else {
|
|
710
|
-
|
|
676
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
711
677
|
return Py_None;
|
|
712
678
|
}
|
|
713
679
|
}
|
|
@@ -716,12 +682,11 @@ static PyObject *Nuitka_Coroutine_close(struct Nuitka_CoroutineObject *coroutine
|
|
|
716
682
|
static bool Nuitka_AsyncgenAsend_Check(PyObject *object);
|
|
717
683
|
struct Nuitka_AsyncgenAsendObject;
|
|
718
684
|
static PyObject *_Nuitka_AsyncgenAsend_throw2(PyThreadState *tstate, struct Nuitka_AsyncgenAsendObject *asyncgen_asend,
|
|
719
|
-
|
|
720
|
-
PyTracebackObject *exception_tb);
|
|
685
|
+
struct Nuitka_ExceptionPreservationItem *exception_state);
|
|
721
686
|
#endif
|
|
722
687
|
|
|
723
|
-
static bool
|
|
724
|
-
|
|
688
|
+
static bool _Nuitka_Generator_check_throw(PyThreadState *tstate,
|
|
689
|
+
struct Nuitka_ExceptionPreservationItem *exception_state);
|
|
725
690
|
|
|
726
691
|
// This function is called when yielding to a coroutine through "_Nuitka_YieldFromPassExceptionTo"
|
|
727
692
|
// and potentially wrapper objects used by generators, or by the throw method itself.
|
|
@@ -730,98 +695,90 @@ static bool _Nuitka_Generator_check_throw2(PyThreadState *tstate, PyObject **exc
|
|
|
730
695
|
// value of exception_type will not be NULL, but the actual exception will not necessarily
|
|
731
696
|
// be normalized.
|
|
732
697
|
static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine, bool closing,
|
|
733
|
-
|
|
734
|
-
PyTracebackObject *exception_tb) {
|
|
698
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
735
699
|
CHECK_OBJECT(coroutine);
|
|
736
700
|
assert(Nuitka_Coroutine_Check((PyObject *)coroutine));
|
|
737
|
-
|
|
738
|
-
CHECK_OBJECT_X(exception_value);
|
|
739
|
-
CHECK_OBJECT_X(exception_tb);
|
|
701
|
+
CHECK_EXCEPTION_STATE(exception_state);
|
|
740
702
|
|
|
741
703
|
#if _DEBUG_COROUTINE
|
|
742
704
|
PRINT_COROUTINE_STATUS("Enter", coroutine);
|
|
743
705
|
PRINT_COROUTINE_STRING("closing", closing ? "(closing) " : "(not closing) ");
|
|
744
|
-
PRINT_COROUTINE_VALUE("
|
|
745
|
-
|
|
706
|
+
PRINT_COROUTINE_VALUE("yield_from", coroutine->m_yield_from);
|
|
707
|
+
PRINT_EXCEPTION_STATE(exception_state);
|
|
746
708
|
PRINT_NEW_LINE();
|
|
747
709
|
#endif
|
|
748
710
|
|
|
749
|
-
if (coroutine->
|
|
750
|
-
if (
|
|
711
|
+
if (coroutine->m_yield_from != NULL) {
|
|
712
|
+
if (EXCEPTION_STATE_MATCH_BOOL_SINGLE(tstate, exception_state, PyExc_GeneratorExit)) {
|
|
751
713
|
// Coroutines need to close the yield_from.
|
|
752
714
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
753
|
-
bool res = Nuitka_gen_close_iter(tstate, coroutine->
|
|
715
|
+
bool res = Nuitka_gen_close_iter(tstate, coroutine->m_yield_from);
|
|
754
716
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
755
717
|
|
|
756
718
|
if (res == false) {
|
|
757
719
|
// Release exception, we are done with it now and pick up the new one.
|
|
758
|
-
|
|
759
|
-
Py_XDECREF(exception_value);
|
|
760
|
-
Py_XDECREF(exception_tb);
|
|
720
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
761
721
|
|
|
762
|
-
|
|
722
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, exception_state);
|
|
763
723
|
}
|
|
764
724
|
|
|
765
725
|
// Transferred exception ownership to "_Nuitka_Coroutine_send".
|
|
766
|
-
return _Nuitka_Coroutine_send(tstate, coroutine, NULL, false,
|
|
767
|
-
exception_tb);
|
|
726
|
+
return _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_state);
|
|
768
727
|
}
|
|
769
728
|
|
|
770
729
|
PyObject *ret;
|
|
771
730
|
|
|
772
731
|
#if _DEBUG_COROUTINE
|
|
773
732
|
PRINT_COROUTINE_STATUS("Passing to yielded from", coroutine);
|
|
774
|
-
PRINT_COROUTINE_VALUE("
|
|
733
|
+
PRINT_COROUTINE_VALUE("m_yield_from", coroutine->m_yield_from);
|
|
775
734
|
PRINT_NEW_LINE();
|
|
776
735
|
#endif
|
|
777
736
|
|
|
778
|
-
if (Nuitka_Generator_Check(coroutine->
|
|
779
|
-
struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)coroutine->
|
|
737
|
+
if (Nuitka_Generator_Check(coroutine->m_yield_from)) {
|
|
738
|
+
struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)coroutine->m_yield_from);
|
|
780
739
|
// Transferred exception ownership to "_Nuitka_Generator_throw2".
|
|
781
740
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
782
|
-
ret = _Nuitka_Generator_throw2(tstate, gen,
|
|
741
|
+
ret = _Nuitka_Generator_throw2(tstate, gen, exception_state);
|
|
783
742
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
784
|
-
} else if (Nuitka_Coroutine_Check(coroutine->
|
|
785
|
-
struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)coroutine->
|
|
743
|
+
} else if (Nuitka_Coroutine_Check(coroutine->m_yield_from)) {
|
|
744
|
+
struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)coroutine->m_yield_from);
|
|
786
745
|
// Transferred exception ownership to "_Nuitka_Coroutine_throw2".
|
|
787
746
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
788
|
-
ret = _Nuitka_Coroutine_throw2(tstate, coro, true,
|
|
747
|
+
ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_state);
|
|
789
748
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
790
749
|
#if NUITKA_UNCOMPILED_THROW_INTEGRATION
|
|
791
|
-
} else if (PyGen_CheckExact(coroutine->
|
|
792
|
-
PyGenObject *gen = (PyGenObject *)coroutine->
|
|
750
|
+
} else if (PyGen_CheckExact(coroutine->m_yield_from) || PyCoro_CheckExact(coroutine->m_yield_from)) {
|
|
751
|
+
PyGenObject *gen = (PyGenObject *)coroutine->m_yield_from;
|
|
793
752
|
|
|
794
753
|
// Transferred exception ownership to "Nuitka_UncompiledGenerator_throw".
|
|
795
754
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
796
|
-
ret = Nuitka_UncompiledGenerator_throw(tstate, gen, 1,
|
|
755
|
+
ret = Nuitka_UncompiledGenerator_throw(tstate, gen, 1, exception_state);
|
|
797
756
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
798
757
|
#endif
|
|
799
|
-
} else if (Nuitka_CoroutineWrapper_Check(coroutine->
|
|
758
|
+
} else if (Nuitka_CoroutineWrapper_Check(coroutine->m_yield_from)) {
|
|
800
759
|
struct Nuitka_CoroutineObject *coro =
|
|
801
|
-
((struct Nuitka_CoroutineWrapperObject *)coroutine->
|
|
760
|
+
((struct Nuitka_CoroutineWrapperObject *)coroutine->m_yield_from)->m_coroutine;
|
|
802
761
|
|
|
803
762
|
// Transferred exception ownership to "_Nuitka_Coroutine_throw2".
|
|
804
763
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
805
|
-
ret = _Nuitka_Coroutine_throw2(tstate, coro, true,
|
|
764
|
+
ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_state);
|
|
806
765
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
807
766
|
#if PYTHON_VERSION >= 0x360
|
|
808
|
-
} else if (Nuitka_AsyncgenAsend_Check(coroutine->
|
|
767
|
+
} else if (Nuitka_AsyncgenAsend_Check(coroutine->m_yield_from)) {
|
|
809
768
|
struct Nuitka_AsyncgenAsendObject *asyncgen_asend =
|
|
810
|
-
((struct Nuitka_AsyncgenAsendObject *)coroutine->
|
|
769
|
+
((struct Nuitka_AsyncgenAsendObject *)coroutine->m_yield_from);
|
|
811
770
|
|
|
812
771
|
// Transferred exception ownership to "_Nuitka_AsyncgenAsend_throw2".
|
|
813
772
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
814
|
-
ret = _Nuitka_AsyncgenAsend_throw2(tstate, asyncgen_asend,
|
|
773
|
+
ret = _Nuitka_AsyncgenAsend_throw2(tstate, asyncgen_asend, exception_state);
|
|
815
774
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
816
775
|
#endif
|
|
817
776
|
} else {
|
|
818
|
-
PyObject *meth = PyObject_GetAttr(coroutine->
|
|
777
|
+
PyObject *meth = PyObject_GetAttr(coroutine->m_yield_from, const_str_plain_throw);
|
|
819
778
|
if (unlikely(meth == NULL)) {
|
|
820
779
|
if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
|
|
821
780
|
// Release exception, we are done with it now.
|
|
822
|
-
|
|
823
|
-
Py_XDECREF(exception_value);
|
|
824
|
-
Py_XDECREF(exception_tb);
|
|
781
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
825
782
|
|
|
826
783
|
return NULL;
|
|
827
784
|
}
|
|
@@ -832,39 +789,37 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
|
|
|
832
789
|
goto throw_here;
|
|
833
790
|
}
|
|
834
791
|
|
|
835
|
-
|
|
792
|
+
CHECK_EXCEPTION_STATE(exception_state);
|
|
836
793
|
|
|
837
794
|
#if 0
|
|
838
795
|
// TODO: Add slow mode traces.
|
|
839
|
-
PRINT_ITEM(coroutine->
|
|
796
|
+
PRINT_ITEM(coroutine->m_yield_from);
|
|
840
797
|
PRINT_NEW_LINE();
|
|
841
798
|
#endif
|
|
842
799
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
843
|
-
ret =
|
|
800
|
+
ret = Nuitka_CallGeneratorThrowMethod(meth, exception_state);
|
|
844
801
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
845
802
|
|
|
846
803
|
Py_DECREF(meth);
|
|
847
804
|
|
|
848
805
|
// Release exception, we are done with it now.
|
|
849
|
-
|
|
850
|
-
Py_XDECREF(exception_value);
|
|
851
|
-
Py_XDECREF(exception_tb);
|
|
806
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
852
807
|
}
|
|
853
808
|
|
|
854
809
|
if (unlikely(ret == NULL)) {
|
|
855
810
|
// Return value or exception, not to continue with yielding from.
|
|
856
|
-
if (coroutine->
|
|
857
|
-
CHECK_OBJECT(coroutine->
|
|
811
|
+
if (coroutine->m_yield_from != NULL) {
|
|
812
|
+
CHECK_OBJECT(coroutine->m_yield_from);
|
|
858
813
|
#if _DEBUG_COROUTINE
|
|
859
814
|
PRINT_COROUTINE_STATUS("Null return, yield from removal:", coroutine);
|
|
860
|
-
PRINT_COROUTINE_VALUE("
|
|
815
|
+
PRINT_COROUTINE_VALUE("yield_from", coroutine->m_yield_from);
|
|
861
816
|
#endif
|
|
862
|
-
Py_DECREF(coroutine->
|
|
863
|
-
coroutine->
|
|
817
|
+
Py_DECREF(coroutine->m_yield_from);
|
|
818
|
+
coroutine->m_yield_from = NULL;
|
|
864
819
|
}
|
|
865
820
|
|
|
866
821
|
PyObject *val;
|
|
867
|
-
if (
|
|
822
|
+
if (Nuitka_PyGen_FetchStopIterationValue(tstate, &val)) {
|
|
868
823
|
CHECK_OBJECT(val);
|
|
869
824
|
|
|
870
825
|
#if _DEBUG_COROUTINE
|
|
@@ -873,15 +828,22 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
|
|
|
873
828
|
PRINT_NEW_LINE();
|
|
874
829
|
#endif
|
|
875
830
|
|
|
831
|
+
struct Nuitka_ExceptionPreservationItem no_exception_state;
|
|
832
|
+
INIT_ERROR_OCCURRED_STATE(&no_exception_state);
|
|
833
|
+
|
|
876
834
|
// The ownership of val is transferred.
|
|
877
|
-
ret = _Nuitka_Coroutine_send(tstate, coroutine, val, false,
|
|
835
|
+
ret = _Nuitka_Coroutine_send(tstate, coroutine, val, false, &no_exception_state);
|
|
878
836
|
} else {
|
|
879
837
|
#if _DEBUG_COROUTINE
|
|
880
838
|
PRINT_COROUTINE_STATUS("Sending exception value into ourselves", coroutine);
|
|
881
839
|
PRINT_CURRENT_EXCEPTION();
|
|
882
840
|
PRINT_NEW_LINE();
|
|
883
841
|
#endif
|
|
884
|
-
|
|
842
|
+
|
|
843
|
+
struct Nuitka_ExceptionPreservationItem no_exception_state;
|
|
844
|
+
INIT_ERROR_OCCURRED_STATE(&no_exception_state);
|
|
845
|
+
|
|
846
|
+
ret = _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, &no_exception_state);
|
|
885
847
|
}
|
|
886
848
|
|
|
887
849
|
#if _DEBUG_COROUTINE
|
|
@@ -907,15 +869,14 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
|
|
|
907
869
|
throw_here:
|
|
908
870
|
// We continue to have exception ownership here.
|
|
909
871
|
|
|
910
|
-
if (unlikely(
|
|
911
|
-
// Exception was released by
|
|
872
|
+
if (unlikely(_Nuitka_Generator_check_throw(tstate, exception_state) == false)) {
|
|
873
|
+
// Exception was released by _Nuitka_Generator_check_throw already.
|
|
912
874
|
return NULL;
|
|
913
875
|
}
|
|
914
876
|
|
|
915
877
|
if (coroutine->m_status == status_Running) {
|
|
916
878
|
// Transferred exception ownership to "_Nuitka_Coroutine_send".
|
|
917
|
-
PyObject *result =
|
|
918
|
-
_Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_type, exception_value, exception_tb);
|
|
879
|
+
PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_state);
|
|
919
880
|
return result;
|
|
920
881
|
} else if (coroutine->m_status == status_Finished) {
|
|
921
882
|
|
|
@@ -937,30 +898,31 @@ throw_here:
|
|
|
937
898
|
#endif
|
|
938
899
|
);
|
|
939
900
|
|
|
940
|
-
|
|
941
|
-
Py_XDECREF(exception_value);
|
|
942
|
-
Py_XDECREF(exception_tb);
|
|
901
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
943
902
|
|
|
944
903
|
return NULL;
|
|
945
904
|
}
|
|
946
905
|
#endif
|
|
947
906
|
// Passing exception to publication.
|
|
948
|
-
|
|
907
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
|
|
949
908
|
|
|
950
909
|
return NULL;
|
|
951
910
|
} else {
|
|
911
|
+
PyTracebackObject *exception_tb = GET_EXCEPTION_STATE_TRACEBACK(exception_state);
|
|
912
|
+
|
|
952
913
|
if (exception_tb == NULL) {
|
|
953
914
|
// TODO: Our compiled objects really need a way to store common
|
|
954
915
|
// stuff in a "shared" part across all instances, and outside of
|
|
955
916
|
// run time, so we could reuse this.
|
|
956
917
|
struct Nuitka_FrameObject *frame =
|
|
957
918
|
MAKE_FUNCTION_FRAME(tstate, coroutine->m_code_object, coroutine->m_module, 0);
|
|
958
|
-
|
|
919
|
+
SET_EXCEPTION_STATE_TRACEBACK(exception_state,
|
|
920
|
+
MAKE_TRACEBACK(frame, coroutine->m_code_object->co_firstlineno));
|
|
959
921
|
Py_DECREF(frame);
|
|
960
922
|
}
|
|
961
923
|
|
|
962
924
|
// Passing exception to publication.
|
|
963
|
-
|
|
925
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
|
|
964
926
|
|
|
965
927
|
#if _DEBUG_COROUTINE
|
|
966
928
|
PRINT_COROUTINE_STATUS("Finishing from exception", coroutine);
|
|
@@ -994,18 +956,20 @@ static PyObject *Nuitka_Coroutine_throw(struct Nuitka_CoroutineObject *coroutine
|
|
|
994
956
|
PRINT_NEW_LINE();
|
|
995
957
|
#endif
|
|
996
958
|
|
|
959
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
960
|
+
|
|
997
961
|
// Handing ownership of exception over, we need not release it ourselves
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
962
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
963
|
+
if (_Nuitka_Generator_make_throw_exception_state(tstate, &exception_state, exception_type, exception_value,
|
|
964
|
+
exception_tb) == false) {
|
|
965
|
+
return NULL;
|
|
966
|
+
}
|
|
1001
967
|
|
|
1002
|
-
|
|
1003
|
-
PyObject *result =
|
|
1004
|
-
_Nuitka_Coroutine_throw2(tstate, coroutine, false, exception_type, exception_value, exception_tb);
|
|
968
|
+
PyObject *result = _Nuitka_Coroutine_throw2(tstate, coroutine, false, &exception_state);
|
|
1005
969
|
|
|
1006
970
|
if (result == NULL) {
|
|
1007
971
|
if (HAS_ERROR_OCCURRED(tstate) == false) {
|
|
1008
|
-
|
|
972
|
+
SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
|
|
1009
973
|
}
|
|
1010
974
|
}
|
|
1011
975
|
|
|
@@ -1031,7 +995,7 @@ static long Nuitka_Coroutine_tp_traverse(struct Nuitka_CoroutineObject *coroutin
|
|
|
1031
995
|
CHECK_OBJECT(coroutine);
|
|
1032
996
|
|
|
1033
997
|
// TODO: Identify the impact of not visiting owned objects like module
|
|
1034
|
-
Py_VISIT(coroutine->
|
|
998
|
+
Py_VISIT(coroutine->m_yield_from);
|
|
1035
999
|
|
|
1036
1000
|
for (Py_ssize_t i = 0; i < coroutine->m_closure_given; i++) {
|
|
1037
1001
|
Py_VISIT(coroutine->m_closure[i]);
|
|
@@ -1085,7 +1049,11 @@ static PySendResult _Nuitka_Coroutine_am_send(struct Nuitka_CoroutineObject *cor
|
|
|
1085
1049
|
|
|
1086
1050
|
// We need to transfer ownership of the sent value.
|
|
1087
1051
|
Py_INCREF(arg);
|
|
1088
|
-
|
|
1052
|
+
|
|
1053
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
1054
|
+
INIT_ERROR_OCCURRED_STATE(&exception_state);
|
|
1055
|
+
|
|
1056
|
+
PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, arg, false, &exception_state, result);
|
|
1089
1057
|
|
|
1090
1058
|
#if _DEBUG_COROUTINE
|
|
1091
1059
|
PRINT_COROUTINE_STATUS("Leave", coroutine);
|
|
@@ -1103,9 +1071,8 @@ static void Nuitka_Coroutine_tp_finalize(struct Nuitka_CoroutineObject *coroutin
|
|
|
1103
1071
|
|
|
1104
1072
|
PyThreadState *tstate = PyThreadState_GET();
|
|
1105
1073
|
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
|
|
1074
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1075
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1109
1076
|
|
|
1110
1077
|
bool close_result = _Nuitka_Coroutine_close(tstate, coroutine);
|
|
1111
1078
|
|
|
@@ -1114,7 +1081,7 @@ static void Nuitka_Coroutine_tp_finalize(struct Nuitka_CoroutineObject *coroutin
|
|
|
1114
1081
|
}
|
|
1115
1082
|
|
|
1116
1083
|
/* Restore the saved exception if any. */
|
|
1117
|
-
|
|
1084
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1118
1085
|
}
|
|
1119
1086
|
|
|
1120
1087
|
#define MAX_COROUTINE_FREE_LIST_COUNT 100
|
|
@@ -1134,9 +1101,8 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
|
|
|
1134
1101
|
PyThreadState *tstate = PyThreadState_GET();
|
|
1135
1102
|
|
|
1136
1103
|
// Save the current exception, if any, we must preserve it.
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
|
|
1104
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1105
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1140
1106
|
|
|
1141
1107
|
#if _DEBUG_COROUTINE
|
|
1142
1108
|
PRINT_COROUTINE_STATUS("Enter", coroutine);
|
|
@@ -1154,7 +1120,7 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
|
|
|
1154
1120
|
// Allow for above code to resurrect the coroutine.
|
|
1155
1121
|
Py_SET_REFCNT(coroutine, Py_REFCNT(coroutine) - 1);
|
|
1156
1122
|
if (Py_REFCNT(coroutine) >= 1) {
|
|
1157
|
-
|
|
1123
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1158
1124
|
return;
|
|
1159
1125
|
}
|
|
1160
1126
|
|
|
@@ -1182,7 +1148,7 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
|
|
|
1182
1148
|
/* Put the object into free list or release to GC */
|
|
1183
1149
|
releaseToFreeList(free_list_coros, coroutine, MAX_COROUTINE_FREE_LIST_COUNT);
|
|
1184
1150
|
|
|
1185
|
-
|
|
1151
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1186
1152
|
}
|
|
1187
1153
|
|
|
1188
1154
|
// TODO: Set "__doc__" automatically for method clones of compiled types from
|
|
@@ -1194,12 +1160,12 @@ static PyMethodDef Nuitka_Coroutine_methods[] = {{"send", (PyCFunction)Nuitka_Co
|
|
|
1194
1160
|
|
|
1195
1161
|
// TODO: Set "__doc__" automatically for method clones of compiled types from
|
|
1196
1162
|
// the documentation of built-in original type.
|
|
1197
|
-
static PyGetSetDef
|
|
1198
|
-
{(char *)"__name__",
|
|
1199
|
-
{(char *)"__qualname__",
|
|
1200
|
-
{(char *)"cr_await",
|
|
1201
|
-
{(char *)"cr_code",
|
|
1202
|
-
{(char *)"cr_frame",
|
|
1163
|
+
static PyGetSetDef Nuitka_Coroutine_tp_getset[] = {
|
|
1164
|
+
{(char *)"__name__", Nuitka_Coroutine_get_name, Nuitka_Coroutine_set_name, NULL},
|
|
1165
|
+
{(char *)"__qualname__", Nuitka_Coroutine_get_qualname, Nuitka_Coroutine_set_qualname, NULL},
|
|
1166
|
+
{(char *)"cr_await", Nuitka_Coroutine_get_cr_await, NULL, NULL},
|
|
1167
|
+
{(char *)"cr_code", Nuitka_Coroutine_get_code, Nuitka_Coroutine_set_code, NULL},
|
|
1168
|
+
{(char *)"cr_frame", Nuitka_Coroutine_get_frame, Nuitka_Coroutine_set_frame, NULL},
|
|
1203
1169
|
|
|
1204
1170
|
{NULL}};
|
|
1205
1171
|
|
|
@@ -1251,7 +1217,7 @@ PyTypeObject Nuitka_Coroutine_Type = {
|
|
|
1251
1217
|
0, // tp_iternext
|
|
1252
1218
|
Nuitka_Coroutine_methods, // tp_methods
|
|
1253
1219
|
Nuitka_Coroutine_members, // tp_members
|
|
1254
|
-
|
|
1220
|
+
Nuitka_Coroutine_tp_getset, // tp_getset
|
|
1255
1221
|
0, // tp_base
|
|
1256
1222
|
0, // tp_dict
|
|
1257
1223
|
0, // tp_descr_get
|
|
@@ -1390,12 +1356,15 @@ static int Nuitka_PyInterpreterFrame_GetLine(_PyInterpreterFrame *frame) {
|
|
|
1390
1356
|
// we have the line number stored.
|
|
1391
1357
|
|
|
1392
1358
|
int addr = _PyInterpreterFrame_LASTI(frame) * sizeof(_Py_CODEUNIT);
|
|
1359
|
+
#if PYTHON_VERSION < 0x3d0
|
|
1393
1360
|
return PyCode_Addr2Line(frame->f_code, addr);
|
|
1361
|
+
#else
|
|
1362
|
+
return PyCode_Addr2Line((PyCodeObject *)frame->f_executable, addr);
|
|
1363
|
+
#endif
|
|
1394
1364
|
}
|
|
1395
1365
|
|
|
1396
|
-
static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
1397
|
-
|
|
1398
|
-
_PyInterpreterFrame *current_frame = tstate->cframe->current_frame;
|
|
1366
|
+
static PyObject *computeCoroutineOrigin(PyThreadState *tstate, int origin_depth) {
|
|
1367
|
+
_PyInterpreterFrame *current_frame = CURRENT_TSTATE_INTERPRETER_FRAME(tstate);
|
|
1399
1368
|
|
|
1400
1369
|
// Create result tuple with correct size.
|
|
1401
1370
|
int frame_count = 0;
|
|
@@ -1404,11 +1373,11 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
|
1404
1373
|
frame = frame->previous;
|
|
1405
1374
|
frame_count += 1;
|
|
1406
1375
|
}
|
|
1407
|
-
PyObject *cr_origin = MAKE_TUPLE_EMPTY_VAR(frame_count);
|
|
1376
|
+
PyObject *cr_origin = MAKE_TUPLE_EMPTY_VAR(tstate, frame_count);
|
|
1408
1377
|
|
|
1409
1378
|
frame = current_frame;
|
|
1410
1379
|
for (int i = 0; i < frame_count; i++) {
|
|
1411
|
-
PyCodeObject *code = frame
|
|
1380
|
+
PyCodeObject *code = Nuitka_InterpreterFrame_GetCodeObject(frame);
|
|
1412
1381
|
|
|
1413
1382
|
int line = Nuitka_PyInterpreterFrame_GetLine(frame);
|
|
1414
1383
|
|
|
@@ -1423,7 +1392,7 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
|
1423
1392
|
}
|
|
1424
1393
|
|
|
1425
1394
|
#elif PYTHON_VERSION >= 0x370
|
|
1426
|
-
static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
1395
|
+
static PyObject *computeCoroutineOrigin(PyThreadState *tstate, int origin_depth) {
|
|
1427
1396
|
PyFrameObject *frame = PyEval_GetFrame();
|
|
1428
1397
|
|
|
1429
1398
|
int frame_count = 0;
|
|
@@ -1433,13 +1402,13 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
|
1433
1402
|
frame_count += 1;
|
|
1434
1403
|
}
|
|
1435
1404
|
|
|
1436
|
-
PyObject *cr_origin = MAKE_TUPLE_EMPTY(frame_count);
|
|
1405
|
+
PyObject *cr_origin = MAKE_TUPLE_EMPTY(tstate, frame_count);
|
|
1437
1406
|
|
|
1438
1407
|
frame = PyEval_GetFrame();
|
|
1439
1408
|
|
|
1440
1409
|
for (int i = 0; i < frame_count; i++) {
|
|
1441
|
-
PyObject *frame_info =
|
|
1442
|
-
|
|
1410
|
+
PyObject *frame_info = Py_BuildValue("OiO", Nuitka_Frame_GetCodeObject(frame)->co_filename,
|
|
1411
|
+
PyFrame_GetLineNumber(frame), frame->f_code->co_name);
|
|
1443
1412
|
|
|
1444
1413
|
assert(frame_info);
|
|
1445
1414
|
|
|
@@ -1489,7 +1458,7 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
|
|
|
1489
1458
|
result->m_qualname = qualname;
|
|
1490
1459
|
Py_INCREF(qualname);
|
|
1491
1460
|
|
|
1492
|
-
result->
|
|
1461
|
+
result->m_yield_from = NULL;
|
|
1493
1462
|
|
|
1494
1463
|
memcpy(&result->m_closure[0], closure, closure_given * sizeof(struct Nuitka_CellObject *));
|
|
1495
1464
|
result->m_closure_given = closure_given;
|
|
@@ -1515,7 +1484,7 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
|
|
|
1515
1484
|
if (origin_depth == 0) {
|
|
1516
1485
|
result->m_origin = NULL;
|
|
1517
1486
|
} else {
|
|
1518
|
-
result->m_origin = computeCoroutineOrigin(origin_depth);
|
|
1487
|
+
result->m_origin = computeCoroutineOrigin(tstate, origin_depth);
|
|
1519
1488
|
}
|
|
1520
1489
|
#endif
|
|
1521
1490
|
|
|
@@ -1530,9 +1499,21 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
|
|
|
1530
1499
|
return (PyObject *)result;
|
|
1531
1500
|
}
|
|
1532
1501
|
|
|
1502
|
+
static inline PyCodeObject *_Nuitka_PyGen_GetCode(PyGenObject *gen) {
|
|
1503
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1504
|
+
return (PyCodeObject *)gen->gi_code;
|
|
1505
|
+
#elif PYTHON_VERSION < 0x3d0
|
|
1506
|
+
_PyInterpreterFrame *frame = (_PyInterpreterFrame *)(gen->gi_iframe);
|
|
1507
|
+
return frame->f_code;
|
|
1508
|
+
#else
|
|
1509
|
+
_PyInterpreterFrame *frame = (_PyInterpreterFrame *)(gen->gi_iframe);
|
|
1510
|
+
return (PyCodeObject *)frame->f_executable;
|
|
1511
|
+
#endif
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1533
1514
|
static int gen_is_coroutine(PyObject *object) {
|
|
1534
1515
|
if (PyGen_CheckExact(object)) {
|
|
1535
|
-
PyCodeObject *code = (
|
|
1516
|
+
PyCodeObject *code = _Nuitka_PyGen_GetCode((PyGenObject *)object);
|
|
1536
1517
|
|
|
1537
1518
|
if (code->co_flags & CO_ITERABLE_COROUTINE) {
|
|
1538
1519
|
return 1;
|
|
@@ -1677,17 +1658,24 @@ static PyObject *Nuitka_AIterWrapper_iternext(struct Nuitka_AIterWrapper *aw) {
|
|
|
1677
1658
|
|
|
1678
1659
|
#if PYTHON_VERSION < 0x360
|
|
1679
1660
|
SET_CURRENT_EXCEPTION_TYPE0_VALUE0(tstate, PyExc_StopIteration, aw->aw_aiter);
|
|
1680
|
-
#
|
|
1661
|
+
#elif PYTHON_VERSION < 0x3c0
|
|
1681
1662
|
if (!PyTuple_Check(aw->aw_aiter) && !PyExceptionInstance_Check(aw->aw_aiter)) {
|
|
1682
1663
|
SET_CURRENT_EXCEPTION_TYPE0_VALUE0(tstate, PyExc_StopIteration, aw->aw_aiter);
|
|
1683
1664
|
} else {
|
|
1684
|
-
PyObject *result =
|
|
1665
|
+
PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, PyExc_StopIteration, aw->aw_aiter);
|
|
1666
|
+
|
|
1685
1667
|
if (unlikely(result == NULL)) {
|
|
1686
1668
|
return NULL;
|
|
1687
1669
|
}
|
|
1688
1670
|
|
|
1689
|
-
|
|
1671
|
+
struct Nuitka_ExceptionPreservationItem exception_state = {_Py_NewRef(PyExc_StopIteration), result, NULL};
|
|
1672
|
+
|
|
1673
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
|
|
1690
1674
|
}
|
|
1675
|
+
#else
|
|
1676
|
+
struct Nuitka_ExceptionPreservationItem exception_state = {Nuitka_CreateStopIteration(tstate, aw->aw_aiter)};
|
|
1677
|
+
|
|
1678
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
|
|
1691
1679
|
#endif
|
|
1692
1680
|
|
|
1693
1681
|
return NULL;
|
|
@@ -1953,3 +1941,18 @@ static void _initCompiledCoroutineTypes(void) {
|
|
|
1953
1941
|
#if PYTHON_VERSION >= 0x360
|
|
1954
1942
|
#include "CompiledAsyncgenType.c"
|
|
1955
1943
|
#endif
|
|
1944
|
+
|
|
1945
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1946
|
+
// integrates with CPython, but also works on its own.
|
|
1947
|
+
//
|
|
1948
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1949
|
+
// you may not use this file except in compliance with the License.
|
|
1950
|
+
// You may obtain a copy of the License at
|
|
1951
|
+
//
|
|
1952
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1953
|
+
//
|
|
1954
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1955
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1956
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1957
|
+
// See the License for the specific language governing permissions and
|
|
1958
|
+
// limitations under the License.
|