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
|
/** 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,8 +57,8 @@ 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
|
|
|
@@ -133,13 +118,13 @@ static int Nuitka_Coroutine_set_qualname(struct Nuitka_CoroutineObject *coroutin
|
|
|
133
118
|
|
|
134
119
|
static PyObject *Nuitka_Coroutine_get_cr_await(struct Nuitka_CoroutineObject *coroutine) {
|
|
135
120
|
CHECK_OBJECT(coroutine);
|
|
136
|
-
CHECK_OBJECT_X(coroutine->
|
|
121
|
+
CHECK_OBJECT_X(coroutine->m_yield_from);
|
|
137
122
|
|
|
138
|
-
if (coroutine->
|
|
139
|
-
Py_INCREF(coroutine->
|
|
140
|
-
return coroutine->
|
|
123
|
+
if (coroutine->m_yield_from) {
|
|
124
|
+
Py_INCREF(coroutine->m_yield_from);
|
|
125
|
+
return coroutine->m_yield_from;
|
|
141
126
|
} else {
|
|
142
|
-
|
|
127
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
143
128
|
return Py_None;
|
|
144
129
|
}
|
|
145
130
|
}
|
|
@@ -169,7 +154,7 @@ static PyObject *Nuitka_Coroutine_get_frame(struct Nuitka_CoroutineObject *corou
|
|
|
169
154
|
Py_INCREF(coroutine->m_frame);
|
|
170
155
|
return (PyObject *)coroutine->m_frame;
|
|
171
156
|
} else {
|
|
172
|
-
|
|
157
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
173
158
|
return Py_None;
|
|
174
159
|
}
|
|
175
160
|
}
|
|
@@ -196,30 +181,29 @@ static void Nuitka_Coroutine_release_closure(struct Nuitka_CoroutineObject *coro
|
|
|
196
181
|
}
|
|
197
182
|
|
|
198
183
|
// Note: Shared with asyncgen.
|
|
199
|
-
static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *
|
|
184
|
+
static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yield_from, PyObject *send_value,
|
|
200
185
|
PyObject **returned_value, bool mode) {
|
|
201
186
|
// Send iteration value to the sub-generator, which may be a CPython
|
|
202
187
|
// generator object, something with an iterator next, or a send method,
|
|
203
188
|
// where the later is only required if values other than "None" need to
|
|
204
189
|
// be passed in.
|
|
205
|
-
CHECK_OBJECT(
|
|
190
|
+
CHECK_OBJECT(yield_from);
|
|
206
191
|
CHECK_OBJECT_X(send_value);
|
|
207
192
|
|
|
208
193
|
assert(send_value != NULL || HAS_ERROR_OCCURRED(tstate));
|
|
209
194
|
|
|
210
195
|
PyObject *retval;
|
|
211
196
|
|
|
212
|
-
|
|
213
|
-
PyTracebackObject *exception_tb;
|
|
197
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
214
198
|
|
|
215
|
-
|
|
199
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &exception_state);
|
|
216
200
|
|
|
217
|
-
if (
|
|
201
|
+
if (HAS_EXCEPTION_STATE(&exception_state)) {
|
|
218
202
|
// Exception, was thrown into us, need to send that to sub-generator.
|
|
219
203
|
// We acquired ownership of the published exception and need to release it potentially.
|
|
220
204
|
|
|
221
205
|
// Transfer exception owner this.
|
|
222
|
-
retval = _Nuitka_YieldFromPassExceptionTo(tstate,
|
|
206
|
+
retval = _Nuitka_YieldFromPassExceptionTo(tstate, yield_from, &exception_state);
|
|
223
207
|
|
|
224
208
|
// TODO: This wants to look at retval most definitely, send_value is going to be NULL.
|
|
225
209
|
if (unlikely(send_value == NULL)) {
|
|
@@ -232,24 +216,28 @@ static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yieldfro
|
|
|
232
216
|
return NULL;
|
|
233
217
|
}
|
|
234
218
|
}
|
|
235
|
-
} else if (PyGen_CheckExact(
|
|
236
|
-
retval = Nuitka_PyGen_Send(tstate, (PyGenObject *)
|
|
237
|
-
} else if (send_value == Py_None && Nuitka_CoroutineWrapper_Check(
|
|
219
|
+
} else if (PyGen_CheckExact(yield_from) || PyCoro_CheckExact(yield_from)) {
|
|
220
|
+
retval = Nuitka_PyGen_Send(tstate, (PyGenObject *)yield_from, Py_None);
|
|
221
|
+
} else if (send_value == Py_None && Nuitka_CoroutineWrapper_Check(yield_from)) {
|
|
238
222
|
struct Nuitka_CoroutineObject *yieldfrom_coroutine =
|
|
239
|
-
((struct Nuitka_CoroutineWrapperObject *)
|
|
223
|
+
((struct Nuitka_CoroutineWrapperObject *)yield_from)->m_coroutine;
|
|
240
224
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
225
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
226
|
+
|
|
227
|
+
struct Nuitka_ExceptionPreservationItem no_exception_state;
|
|
228
|
+
INIT_ERROR_OCCURRED_STATE(&no_exception_state);
|
|
229
|
+
|
|
230
|
+
retval = _Nuitka_Coroutine_send(tstate, yieldfrom_coroutine, Py_None, mode ? false : true, &no_exception_state);
|
|
231
|
+
} else if (send_value == Py_None && Py_TYPE(yield_from)->tp_iternext != NULL) {
|
|
232
|
+
retval = Py_TYPE(yield_from)->tp_iternext(yield_from);
|
|
245
233
|
} else {
|
|
246
234
|
#if 0
|
|
247
235
|
// TODO: Add slow mode traces.
|
|
248
|
-
PRINT_ITEM(
|
|
236
|
+
PRINT_ITEM(yield_from);
|
|
249
237
|
PRINT_NEW_LINE();
|
|
250
238
|
#endif
|
|
251
239
|
|
|
252
|
-
retval = PyObject_CallMethodObjArgs(
|
|
240
|
+
retval = PyObject_CallMethodObjArgs(yield_from, const_str_plain_send, send_value, NULL);
|
|
253
241
|
}
|
|
254
242
|
|
|
255
243
|
// Check the sub-generator result
|
|
@@ -257,7 +245,7 @@ static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yieldfro
|
|
|
257
245
|
PyObject *error = GET_ERROR_OCCURRED(tstate);
|
|
258
246
|
|
|
259
247
|
if (error == NULL) {
|
|
260
|
-
|
|
248
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
261
249
|
*returned_value = Py_None;
|
|
262
250
|
} else if (likely(EXCEPTION_MATCH_BOOL_SINGLE(tstate, error, PyExc_StopIteration))) {
|
|
263
251
|
// The sub-generator has given an exception. In case of
|
|
@@ -284,23 +272,23 @@ static PyObject *_Nuitka_YieldFromCoroutineCore(PyThreadState *tstate, struct Nu
|
|
|
284
272
|
CHECK_OBJECT(coroutine);
|
|
285
273
|
CHECK_OBJECT_X(send_value);
|
|
286
274
|
|
|
287
|
-
PyObject *
|
|
288
|
-
CHECK_OBJECT(
|
|
275
|
+
PyObject *yield_from = coroutine->m_yield_from;
|
|
276
|
+
CHECK_OBJECT(yield_from);
|
|
289
277
|
|
|
290
278
|
// Need to make it unaccessible while using it.
|
|
291
|
-
coroutine->
|
|
279
|
+
coroutine->m_yield_from = NULL;
|
|
292
280
|
|
|
293
281
|
PyObject *returned_value;
|
|
294
|
-
PyObject *yielded = _Nuitka_YieldFromCore(tstate,
|
|
282
|
+
PyObject *yielded = _Nuitka_YieldFromCore(tstate, yield_from, send_value, &returned_value, mode);
|
|
295
283
|
|
|
296
284
|
if (yielded == NULL) {
|
|
297
|
-
assert(coroutine->
|
|
298
|
-
Py_DECREF(
|
|
285
|
+
assert(coroutine->m_yield_from == NULL);
|
|
286
|
+
Py_DECREF(yield_from);
|
|
299
287
|
|
|
300
288
|
yielded = ((coroutine_code)coroutine->m_code)(tstate, coroutine, returned_value);
|
|
301
289
|
} else {
|
|
302
|
-
assert(coroutine->
|
|
303
|
-
coroutine->
|
|
290
|
+
assert(coroutine->m_yield_from == NULL);
|
|
291
|
+
coroutine->m_yield_from = yield_from;
|
|
304
292
|
}
|
|
305
293
|
|
|
306
294
|
return yielded;
|
|
@@ -384,30 +372,26 @@ static void Nuitka_SetStopIterationValue(PyThreadState *tstate, PyObject *value)
|
|
|
384
372
|
// be normalized.
|
|
385
373
|
|
|
386
374
|
static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine,
|
|
387
|
-
PyObject *value, bool closing,
|
|
388
|
-
|
|
375
|
+
PyObject *value, bool closing,
|
|
376
|
+
struct Nuitka_ExceptionPreservationItem *exception_state,
|
|
389
377
|
PyObject **result) {
|
|
390
378
|
CHECK_OBJECT(coroutine);
|
|
391
379
|
assert(Nuitka_Coroutine_Check((PyObject *)coroutine));
|
|
392
|
-
|
|
393
|
-
CHECK_OBJECT_X(exception_value);
|
|
394
|
-
CHECK_OBJECT_X(exception_tb);
|
|
380
|
+
CHECK_EXCEPTION_STATE_X(exception_state);
|
|
395
381
|
CHECK_OBJECT_X(value);
|
|
396
382
|
|
|
397
383
|
#if _DEBUG_COROUTINE
|
|
398
384
|
PRINT_COROUTINE_STATUS("Enter", coroutine);
|
|
399
385
|
PRINT_COROUTINE_STRING("closing", closing ? "(closing) " : "(not closing) ");
|
|
400
386
|
PRINT_COROUTINE_VALUE("value", value);
|
|
401
|
-
|
|
387
|
+
PRINT_EXCEPTION_STATE(exception_state);
|
|
402
388
|
PRINT_CURRENT_EXCEPTION();
|
|
403
389
|
PRINT_NEW_LINE();
|
|
404
390
|
#endif
|
|
405
391
|
|
|
406
392
|
// Not both a value and an exception please.
|
|
407
393
|
if (value != NULL) {
|
|
408
|
-
|
|
409
|
-
assert(exception_value == NULL);
|
|
410
|
-
assert(exception_tb == NULL);
|
|
394
|
+
ASSERT_EMPTY_EXCEPTION_STATE(exception_state);
|
|
411
395
|
}
|
|
412
396
|
|
|
413
397
|
if (coroutine->m_status == status_Unused && value != NULL && value != Py_None) {
|
|
@@ -449,11 +433,11 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
449
433
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
450
434
|
|
|
451
435
|
// Check for thrown exception, publish it to the coroutine code.
|
|
452
|
-
if (unlikely(
|
|
436
|
+
if (unlikely(HAS_EXCEPTION_STATE(exception_state))) {
|
|
453
437
|
assert(value == NULL);
|
|
454
438
|
|
|
455
439
|
// Transfer exception ownership to published.
|
|
456
|
-
|
|
440
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
|
|
457
441
|
}
|
|
458
442
|
|
|
459
443
|
#if _DEBUG_COROUTINE
|
|
@@ -466,7 +450,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
466
450
|
|
|
467
451
|
PyObject *yielded;
|
|
468
452
|
|
|
469
|
-
if (coroutine->
|
|
453
|
+
if (coroutine->m_yield_from == NULL) {
|
|
470
454
|
yielded = ((coroutine_code)coroutine->m_code)(tstate, coroutine, value);
|
|
471
455
|
} else {
|
|
472
456
|
// This does not release the value if any, so we need to do it afterwards.
|
|
@@ -474,16 +458,14 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
474
458
|
Py_XDECREF(value);
|
|
475
459
|
}
|
|
476
460
|
|
|
477
|
-
// If the coroutine returns with
|
|
461
|
+
// If the coroutine returns with m_yield_from set, it wants us to yield
|
|
478
462
|
// from that value from now on.
|
|
479
|
-
while (yielded == NULL && coroutine->
|
|
463
|
+
while (yielded == NULL && coroutine->m_yield_from != NULL) {
|
|
480
464
|
yielded = Nuitka_YieldFromCoroutineNext(tstate, coroutine);
|
|
481
465
|
}
|
|
482
466
|
|
|
483
467
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
484
468
|
|
|
485
|
-
tstate = PyThreadState_GET();
|
|
486
|
-
|
|
487
469
|
// Remove the back frame from coroutine if it's there.
|
|
488
470
|
if (coroutine->m_frame) {
|
|
489
471
|
// assert(tstate->frame == &coroutine->m_frame->m_frame);
|
|
@@ -550,30 +532,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
550
532
|
|
|
551
533
|
return PYGEN_RETURN;
|
|
552
534
|
} 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);
|
|
535
|
+
RAISE_RUNTIME_ERROR_RAISED_STOP_ITERATION(tstate, "coroutine raised StopIteration");
|
|
577
536
|
|
|
578
537
|
#if _DEBUG_COROUTINE
|
|
579
538
|
PRINT_COROUTINE_STATUS("Leave with exception set", coroutine);
|
|
@@ -592,9 +551,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
592
551
|
Py_XDECREF(value);
|
|
593
552
|
|
|
594
553
|
// Release exception if any, we are finished with it and will raise another.
|
|
595
|
-
|
|
596
|
-
Py_XDECREF(exception_value);
|
|
597
|
-
Py_XDECREF(exception_tb);
|
|
554
|
+
RELEASE_ERROR_OCCURRED_STATE_X(exception_state);
|
|
598
555
|
|
|
599
556
|
/* This is for status_Finished */
|
|
600
557
|
assert(coroutine->m_status == status_Finished);
|
|
@@ -626,18 +583,15 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
|
|
|
626
583
|
}
|
|
627
584
|
|
|
628
585
|
static PyObject *_Nuitka_Coroutine_send(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine,
|
|
629
|
-
PyObject *value, bool closing,
|
|
630
|
-
|
|
586
|
+
PyObject *value, bool closing,
|
|
587
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
631
588
|
|
|
632
589
|
PyObject *result;
|
|
633
|
-
PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, value, closing,
|
|
634
|
-
exception_tb, &result);
|
|
590
|
+
PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, value, closing, exception_state, &result);
|
|
635
591
|
|
|
636
592
|
switch (res) {
|
|
637
593
|
case PYGEN_RETURN:
|
|
638
|
-
if (result
|
|
639
|
-
SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
|
|
640
|
-
} else {
|
|
594
|
+
if (result != NULL) {
|
|
641
595
|
if (result != Py_None) {
|
|
642
596
|
Nuitka_SetStopIterationValue(tstate, result);
|
|
643
597
|
}
|
|
@@ -663,7 +617,11 @@ static PyObject *Nuitka_Coroutine_send(struct Nuitka_CoroutineObject *coroutine,
|
|
|
663
617
|
Py_INCREF(value);
|
|
664
618
|
|
|
665
619
|
PyThreadState *tstate = PyThreadState_GET();
|
|
666
|
-
|
|
620
|
+
|
|
621
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
622
|
+
INIT_ERROR_OCCURRED_STATE(&exception_state);
|
|
623
|
+
|
|
624
|
+
PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, value, false, &exception_state);
|
|
667
625
|
|
|
668
626
|
if (result == NULL) {
|
|
669
627
|
if (HAS_ERROR_OCCURRED(tstate) == false) {
|
|
@@ -682,9 +640,10 @@ static bool _Nuitka_Coroutine_close(PyThreadState *tstate, struct Nuitka_Corouti
|
|
|
682
640
|
CHECK_OBJECT(coroutine);
|
|
683
641
|
|
|
684
642
|
if (coroutine->m_status == status_Running) {
|
|
685
|
-
|
|
643
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
644
|
+
SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, &exception_state, PyExc_GeneratorExit, NULL, NULL);
|
|
686
645
|
|
|
687
|
-
PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, true,
|
|
646
|
+
PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, true, &exception_state);
|
|
688
647
|
|
|
689
648
|
if (unlikely(result)) {
|
|
690
649
|
Py_DECREF(result);
|
|
@@ -707,7 +666,7 @@ static PyObject *Nuitka_Coroutine_close(struct Nuitka_CoroutineObject *coroutine
|
|
|
707
666
|
if (unlikely(r == false)) {
|
|
708
667
|
return NULL;
|
|
709
668
|
} else {
|
|
710
|
-
|
|
669
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
711
670
|
return Py_None;
|
|
712
671
|
}
|
|
713
672
|
}
|
|
@@ -716,12 +675,11 @@ static PyObject *Nuitka_Coroutine_close(struct Nuitka_CoroutineObject *coroutine
|
|
|
716
675
|
static bool Nuitka_AsyncgenAsend_Check(PyObject *object);
|
|
717
676
|
struct Nuitka_AsyncgenAsendObject;
|
|
718
677
|
static PyObject *_Nuitka_AsyncgenAsend_throw2(PyThreadState *tstate, struct Nuitka_AsyncgenAsendObject *asyncgen_asend,
|
|
719
|
-
|
|
720
|
-
PyTracebackObject *exception_tb);
|
|
678
|
+
struct Nuitka_ExceptionPreservationItem *exception_state);
|
|
721
679
|
#endif
|
|
722
680
|
|
|
723
|
-
static bool
|
|
724
|
-
|
|
681
|
+
static bool _Nuitka_Generator_check_throw(PyThreadState *tstate,
|
|
682
|
+
struct Nuitka_ExceptionPreservationItem *exception_state);
|
|
725
683
|
|
|
726
684
|
// This function is called when yielding to a coroutine through "_Nuitka_YieldFromPassExceptionTo"
|
|
727
685
|
// and potentially wrapper objects used by generators, or by the throw method itself.
|
|
@@ -730,98 +688,90 @@ static bool _Nuitka_Generator_check_throw2(PyThreadState *tstate, PyObject **exc
|
|
|
730
688
|
// value of exception_type will not be NULL, but the actual exception will not necessarily
|
|
731
689
|
// be normalized.
|
|
732
690
|
static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine, bool closing,
|
|
733
|
-
|
|
734
|
-
PyTracebackObject *exception_tb) {
|
|
691
|
+
struct Nuitka_ExceptionPreservationItem *exception_state) {
|
|
735
692
|
CHECK_OBJECT(coroutine);
|
|
736
693
|
assert(Nuitka_Coroutine_Check((PyObject *)coroutine));
|
|
737
|
-
|
|
738
|
-
CHECK_OBJECT_X(exception_value);
|
|
739
|
-
CHECK_OBJECT_X(exception_tb);
|
|
694
|
+
CHECK_EXCEPTION_STATE(exception_state);
|
|
740
695
|
|
|
741
696
|
#if _DEBUG_COROUTINE
|
|
742
697
|
PRINT_COROUTINE_STATUS("Enter", coroutine);
|
|
743
698
|
PRINT_COROUTINE_STRING("closing", closing ? "(closing) " : "(not closing) ");
|
|
744
|
-
PRINT_COROUTINE_VALUE("
|
|
745
|
-
|
|
699
|
+
PRINT_COROUTINE_VALUE("yield_from", coroutine->m_yield_from);
|
|
700
|
+
PRINT_EXCEPTION_STATE(exception_state);
|
|
746
701
|
PRINT_NEW_LINE();
|
|
747
702
|
#endif
|
|
748
703
|
|
|
749
|
-
if (coroutine->
|
|
750
|
-
if (
|
|
704
|
+
if (coroutine->m_yield_from != NULL) {
|
|
705
|
+
if (EXCEPTION_STATE_MATCH_BOOL_SINGLE(tstate, exception_state, PyExc_GeneratorExit)) {
|
|
751
706
|
// Coroutines need to close the yield_from.
|
|
752
707
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
753
|
-
bool res = Nuitka_gen_close_iter(tstate, coroutine->
|
|
708
|
+
bool res = Nuitka_gen_close_iter(tstate, coroutine->m_yield_from);
|
|
754
709
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
755
710
|
|
|
756
711
|
if (res == false) {
|
|
757
712
|
// 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);
|
|
713
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
761
714
|
|
|
762
|
-
|
|
715
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, exception_state);
|
|
763
716
|
}
|
|
764
717
|
|
|
765
718
|
// Transferred exception ownership to "_Nuitka_Coroutine_send".
|
|
766
|
-
return _Nuitka_Coroutine_send(tstate, coroutine, NULL, false,
|
|
767
|
-
exception_tb);
|
|
719
|
+
return _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_state);
|
|
768
720
|
}
|
|
769
721
|
|
|
770
722
|
PyObject *ret;
|
|
771
723
|
|
|
772
724
|
#if _DEBUG_COROUTINE
|
|
773
725
|
PRINT_COROUTINE_STATUS("Passing to yielded from", coroutine);
|
|
774
|
-
PRINT_COROUTINE_VALUE("
|
|
726
|
+
PRINT_COROUTINE_VALUE("m_yield_from", coroutine->m_yield_from);
|
|
775
727
|
PRINT_NEW_LINE();
|
|
776
728
|
#endif
|
|
777
729
|
|
|
778
|
-
if (Nuitka_Generator_Check(coroutine->
|
|
779
|
-
struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)coroutine->
|
|
730
|
+
if (Nuitka_Generator_Check(coroutine->m_yield_from)) {
|
|
731
|
+
struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)coroutine->m_yield_from);
|
|
780
732
|
// Transferred exception ownership to "_Nuitka_Generator_throw2".
|
|
781
733
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
782
|
-
ret = _Nuitka_Generator_throw2(tstate, gen,
|
|
734
|
+
ret = _Nuitka_Generator_throw2(tstate, gen, exception_state);
|
|
783
735
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
784
|
-
} else if (Nuitka_Coroutine_Check(coroutine->
|
|
785
|
-
struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)coroutine->
|
|
736
|
+
} else if (Nuitka_Coroutine_Check(coroutine->m_yield_from)) {
|
|
737
|
+
struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)coroutine->m_yield_from);
|
|
786
738
|
// Transferred exception ownership to "_Nuitka_Coroutine_throw2".
|
|
787
739
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
788
|
-
ret = _Nuitka_Coroutine_throw2(tstate, coro, true,
|
|
740
|
+
ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_state);
|
|
789
741
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
790
742
|
#if NUITKA_UNCOMPILED_THROW_INTEGRATION
|
|
791
|
-
} else if (PyGen_CheckExact(coroutine->
|
|
792
|
-
PyGenObject *gen = (PyGenObject *)coroutine->
|
|
743
|
+
} else if (PyGen_CheckExact(coroutine->m_yield_from) || PyCoro_CheckExact(coroutine->m_yield_from)) {
|
|
744
|
+
PyGenObject *gen = (PyGenObject *)coroutine->m_yield_from;
|
|
793
745
|
|
|
794
746
|
// Transferred exception ownership to "Nuitka_UncompiledGenerator_throw".
|
|
795
747
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
796
|
-
ret = Nuitka_UncompiledGenerator_throw(tstate, gen, 1,
|
|
748
|
+
ret = Nuitka_UncompiledGenerator_throw(tstate, gen, 1, exception_state);
|
|
797
749
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
798
750
|
#endif
|
|
799
|
-
} else if (Nuitka_CoroutineWrapper_Check(coroutine->
|
|
751
|
+
} else if (Nuitka_CoroutineWrapper_Check(coroutine->m_yield_from)) {
|
|
800
752
|
struct Nuitka_CoroutineObject *coro =
|
|
801
|
-
((struct Nuitka_CoroutineWrapperObject *)coroutine->
|
|
753
|
+
((struct Nuitka_CoroutineWrapperObject *)coroutine->m_yield_from)->m_coroutine;
|
|
802
754
|
|
|
803
755
|
// Transferred exception ownership to "_Nuitka_Coroutine_throw2".
|
|
804
756
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
805
|
-
ret = _Nuitka_Coroutine_throw2(tstate, coro, true,
|
|
757
|
+
ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_state);
|
|
806
758
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
807
759
|
#if PYTHON_VERSION >= 0x360
|
|
808
|
-
} else if (Nuitka_AsyncgenAsend_Check(coroutine->
|
|
760
|
+
} else if (Nuitka_AsyncgenAsend_Check(coroutine->m_yield_from)) {
|
|
809
761
|
struct Nuitka_AsyncgenAsendObject *asyncgen_asend =
|
|
810
|
-
((struct Nuitka_AsyncgenAsendObject *)coroutine->
|
|
762
|
+
((struct Nuitka_AsyncgenAsendObject *)coroutine->m_yield_from);
|
|
811
763
|
|
|
812
764
|
// Transferred exception ownership to "_Nuitka_AsyncgenAsend_throw2".
|
|
813
765
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
814
|
-
ret = _Nuitka_AsyncgenAsend_throw2(tstate, asyncgen_asend,
|
|
766
|
+
ret = _Nuitka_AsyncgenAsend_throw2(tstate, asyncgen_asend, exception_state);
|
|
815
767
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
816
768
|
#endif
|
|
817
769
|
} else {
|
|
818
|
-
PyObject *meth = PyObject_GetAttr(coroutine->
|
|
770
|
+
PyObject *meth = PyObject_GetAttr(coroutine->m_yield_from, const_str_plain_throw);
|
|
819
771
|
if (unlikely(meth == NULL)) {
|
|
820
772
|
if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
|
|
821
773
|
// Release exception, we are done with it now.
|
|
822
|
-
|
|
823
|
-
Py_XDECREF(exception_value);
|
|
824
|
-
Py_XDECREF(exception_tb);
|
|
774
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
825
775
|
|
|
826
776
|
return NULL;
|
|
827
777
|
}
|
|
@@ -832,35 +782,33 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
|
|
|
832
782
|
goto throw_here;
|
|
833
783
|
}
|
|
834
784
|
|
|
835
|
-
|
|
785
|
+
CHECK_EXCEPTION_STATE(exception_state);
|
|
836
786
|
|
|
837
787
|
#if 0
|
|
838
788
|
// TODO: Add slow mode traces.
|
|
839
|
-
PRINT_ITEM(coroutine->
|
|
789
|
+
PRINT_ITEM(coroutine->m_yield_from);
|
|
840
790
|
PRINT_NEW_LINE();
|
|
841
791
|
#endif
|
|
842
792
|
Nuitka_MarkCoroutineAsRunning(coroutine);
|
|
843
|
-
ret =
|
|
793
|
+
ret = Nuitka_CallGeneratorThrowMethod(meth, exception_state);
|
|
844
794
|
Nuitka_MarkCoroutineAsNotRunning(coroutine);
|
|
845
795
|
|
|
846
796
|
Py_DECREF(meth);
|
|
847
797
|
|
|
848
798
|
// Release exception, we are done with it now.
|
|
849
|
-
|
|
850
|
-
Py_XDECREF(exception_value);
|
|
851
|
-
Py_XDECREF(exception_tb);
|
|
799
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
852
800
|
}
|
|
853
801
|
|
|
854
802
|
if (unlikely(ret == NULL)) {
|
|
855
803
|
// Return value or exception, not to continue with yielding from.
|
|
856
|
-
if (coroutine->
|
|
857
|
-
CHECK_OBJECT(coroutine->
|
|
804
|
+
if (coroutine->m_yield_from != NULL) {
|
|
805
|
+
CHECK_OBJECT(coroutine->m_yield_from);
|
|
858
806
|
#if _DEBUG_COROUTINE
|
|
859
807
|
PRINT_COROUTINE_STATUS("Null return, yield from removal:", coroutine);
|
|
860
|
-
PRINT_COROUTINE_VALUE("
|
|
808
|
+
PRINT_COROUTINE_VALUE("yield_from", coroutine->m_yield_from);
|
|
861
809
|
#endif
|
|
862
|
-
Py_DECREF(coroutine->
|
|
863
|
-
coroutine->
|
|
810
|
+
Py_DECREF(coroutine->m_yield_from);
|
|
811
|
+
coroutine->m_yield_from = NULL;
|
|
864
812
|
}
|
|
865
813
|
|
|
866
814
|
PyObject *val;
|
|
@@ -873,15 +821,22 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
|
|
|
873
821
|
PRINT_NEW_LINE();
|
|
874
822
|
#endif
|
|
875
823
|
|
|
824
|
+
struct Nuitka_ExceptionPreservationItem no_exception_state;
|
|
825
|
+
INIT_ERROR_OCCURRED_STATE(&no_exception_state);
|
|
826
|
+
|
|
876
827
|
// The ownership of val is transferred.
|
|
877
|
-
ret = _Nuitka_Coroutine_send(tstate, coroutine, val, false,
|
|
828
|
+
ret = _Nuitka_Coroutine_send(tstate, coroutine, val, false, &no_exception_state);
|
|
878
829
|
} else {
|
|
879
830
|
#if _DEBUG_COROUTINE
|
|
880
831
|
PRINT_COROUTINE_STATUS("Sending exception value into ourselves", coroutine);
|
|
881
832
|
PRINT_CURRENT_EXCEPTION();
|
|
882
833
|
PRINT_NEW_LINE();
|
|
883
834
|
#endif
|
|
884
|
-
|
|
835
|
+
|
|
836
|
+
struct Nuitka_ExceptionPreservationItem no_exception_state;
|
|
837
|
+
INIT_ERROR_OCCURRED_STATE(&no_exception_state);
|
|
838
|
+
|
|
839
|
+
ret = _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, &no_exception_state);
|
|
885
840
|
}
|
|
886
841
|
|
|
887
842
|
#if _DEBUG_COROUTINE
|
|
@@ -907,15 +862,14 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
|
|
|
907
862
|
throw_here:
|
|
908
863
|
// We continue to have exception ownership here.
|
|
909
864
|
|
|
910
|
-
if (unlikely(
|
|
911
|
-
// Exception was released by
|
|
865
|
+
if (unlikely(_Nuitka_Generator_check_throw(tstate, exception_state) == false)) {
|
|
866
|
+
// Exception was released by _Nuitka_Generator_check_throw already.
|
|
912
867
|
return NULL;
|
|
913
868
|
}
|
|
914
869
|
|
|
915
870
|
if (coroutine->m_status == status_Running) {
|
|
916
871
|
// Transferred exception ownership to "_Nuitka_Coroutine_send".
|
|
917
|
-
PyObject *result =
|
|
918
|
-
_Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_type, exception_value, exception_tb);
|
|
872
|
+
PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_state);
|
|
919
873
|
return result;
|
|
920
874
|
} else if (coroutine->m_status == status_Finished) {
|
|
921
875
|
|
|
@@ -937,30 +891,31 @@ throw_here:
|
|
|
937
891
|
#endif
|
|
938
892
|
);
|
|
939
893
|
|
|
940
|
-
|
|
941
|
-
Py_XDECREF(exception_value);
|
|
942
|
-
Py_XDECREF(exception_tb);
|
|
894
|
+
RELEASE_ERROR_OCCURRED_STATE(exception_state);
|
|
943
895
|
|
|
944
896
|
return NULL;
|
|
945
897
|
}
|
|
946
898
|
#endif
|
|
947
899
|
// Passing exception to publication.
|
|
948
|
-
|
|
900
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
|
|
949
901
|
|
|
950
902
|
return NULL;
|
|
951
903
|
} else {
|
|
904
|
+
PyTracebackObject *exception_tb = GET_EXCEPTION_STATE_TRACEBACK(exception_state);
|
|
905
|
+
|
|
952
906
|
if (exception_tb == NULL) {
|
|
953
907
|
// TODO: Our compiled objects really need a way to store common
|
|
954
908
|
// stuff in a "shared" part across all instances, and outside of
|
|
955
909
|
// run time, so we could reuse this.
|
|
956
910
|
struct Nuitka_FrameObject *frame =
|
|
957
911
|
MAKE_FUNCTION_FRAME(tstate, coroutine->m_code_object, coroutine->m_module, 0);
|
|
958
|
-
|
|
912
|
+
SET_EXCEPTION_STATE_TRACEBACK(exception_state,
|
|
913
|
+
MAKE_TRACEBACK(frame, coroutine->m_code_object->co_firstlineno));
|
|
959
914
|
Py_DECREF(frame);
|
|
960
915
|
}
|
|
961
916
|
|
|
962
917
|
// Passing exception to publication.
|
|
963
|
-
|
|
918
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
|
|
964
919
|
|
|
965
920
|
#if _DEBUG_COROUTINE
|
|
966
921
|
PRINT_COROUTINE_STATUS("Finishing from exception", coroutine);
|
|
@@ -994,14 +949,16 @@ static PyObject *Nuitka_Coroutine_throw(struct Nuitka_CoroutineObject *coroutine
|
|
|
994
949
|
PRINT_NEW_LINE();
|
|
995
950
|
#endif
|
|
996
951
|
|
|
952
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
953
|
+
|
|
997
954
|
// Handing ownership of exception over, we need not release it ourselves
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
955
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
956
|
+
if (_Nuitka_Generator_make_throw_exception_state(tstate, &exception_state, exception_type, exception_value,
|
|
957
|
+
exception_tb) == false) {
|
|
958
|
+
return NULL;
|
|
959
|
+
}
|
|
1001
960
|
|
|
1002
|
-
|
|
1003
|
-
PyObject *result =
|
|
1004
|
-
_Nuitka_Coroutine_throw2(tstate, coroutine, false, exception_type, exception_value, exception_tb);
|
|
961
|
+
PyObject *result = _Nuitka_Coroutine_throw2(tstate, coroutine, false, &exception_state);
|
|
1005
962
|
|
|
1006
963
|
if (result == NULL) {
|
|
1007
964
|
if (HAS_ERROR_OCCURRED(tstate) == false) {
|
|
@@ -1031,7 +988,7 @@ static long Nuitka_Coroutine_tp_traverse(struct Nuitka_CoroutineObject *coroutin
|
|
|
1031
988
|
CHECK_OBJECT(coroutine);
|
|
1032
989
|
|
|
1033
990
|
// TODO: Identify the impact of not visiting owned objects like module
|
|
1034
|
-
Py_VISIT(coroutine->
|
|
991
|
+
Py_VISIT(coroutine->m_yield_from);
|
|
1035
992
|
|
|
1036
993
|
for (Py_ssize_t i = 0; i < coroutine->m_closure_given; i++) {
|
|
1037
994
|
Py_VISIT(coroutine->m_closure[i]);
|
|
@@ -1085,7 +1042,11 @@ static PySendResult _Nuitka_Coroutine_am_send(struct Nuitka_CoroutineObject *cor
|
|
|
1085
1042
|
|
|
1086
1043
|
// We need to transfer ownership of the sent value.
|
|
1087
1044
|
Py_INCREF(arg);
|
|
1088
|
-
|
|
1045
|
+
|
|
1046
|
+
struct Nuitka_ExceptionPreservationItem exception_state;
|
|
1047
|
+
INIT_ERROR_OCCURRED_STATE(&exception_state);
|
|
1048
|
+
|
|
1049
|
+
PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, arg, false, &exception_state, result);
|
|
1089
1050
|
|
|
1090
1051
|
#if _DEBUG_COROUTINE
|
|
1091
1052
|
PRINT_COROUTINE_STATUS("Leave", coroutine);
|
|
@@ -1103,9 +1064,8 @@ static void Nuitka_Coroutine_tp_finalize(struct Nuitka_CoroutineObject *coroutin
|
|
|
1103
1064
|
|
|
1104
1065
|
PyThreadState *tstate = PyThreadState_GET();
|
|
1105
1066
|
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
|
|
1067
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1068
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1109
1069
|
|
|
1110
1070
|
bool close_result = _Nuitka_Coroutine_close(tstate, coroutine);
|
|
1111
1071
|
|
|
@@ -1114,7 +1074,7 @@ static void Nuitka_Coroutine_tp_finalize(struct Nuitka_CoroutineObject *coroutin
|
|
|
1114
1074
|
}
|
|
1115
1075
|
|
|
1116
1076
|
/* Restore the saved exception if any. */
|
|
1117
|
-
|
|
1077
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1118
1078
|
}
|
|
1119
1079
|
|
|
1120
1080
|
#define MAX_COROUTINE_FREE_LIST_COUNT 100
|
|
@@ -1134,9 +1094,8 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
|
|
|
1134
1094
|
PyThreadState *tstate = PyThreadState_GET();
|
|
1135
1095
|
|
|
1136
1096
|
// 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);
|
|
1097
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1098
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1140
1099
|
|
|
1141
1100
|
#if _DEBUG_COROUTINE
|
|
1142
1101
|
PRINT_COROUTINE_STATUS("Enter", coroutine);
|
|
@@ -1154,7 +1113,7 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
|
|
|
1154
1113
|
// Allow for above code to resurrect the coroutine.
|
|
1155
1114
|
Py_SET_REFCNT(coroutine, Py_REFCNT(coroutine) - 1);
|
|
1156
1115
|
if (Py_REFCNT(coroutine) >= 1) {
|
|
1157
|
-
|
|
1116
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1158
1117
|
return;
|
|
1159
1118
|
}
|
|
1160
1119
|
|
|
@@ -1182,7 +1141,7 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
|
|
|
1182
1141
|
/* Put the object into free list or release to GC */
|
|
1183
1142
|
releaseToFreeList(free_list_coros, coroutine, MAX_COROUTINE_FREE_LIST_COUNT);
|
|
1184
1143
|
|
|
1185
|
-
|
|
1144
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1186
1145
|
}
|
|
1187
1146
|
|
|
1188
1147
|
// TODO: Set "__doc__" automatically for method clones of compiled types from
|
|
@@ -1194,7 +1153,7 @@ static PyMethodDef Nuitka_Coroutine_methods[] = {{"send", (PyCFunction)Nuitka_Co
|
|
|
1194
1153
|
|
|
1195
1154
|
// TODO: Set "__doc__" automatically for method clones of compiled types from
|
|
1196
1155
|
// the documentation of built-in original type.
|
|
1197
|
-
static PyGetSetDef
|
|
1156
|
+
static PyGetSetDef Nuitka_Coroutine_tp_getset[] = {
|
|
1198
1157
|
{(char *)"__name__", (getter)Nuitka_Coroutine_get_name, (setter)Nuitka_Coroutine_set_name, NULL},
|
|
1199
1158
|
{(char *)"__qualname__", (getter)Nuitka_Coroutine_get_qualname, (setter)Nuitka_Coroutine_set_qualname, NULL},
|
|
1200
1159
|
{(char *)"cr_await", (getter)Nuitka_Coroutine_get_cr_await, (setter)NULL, NULL},
|
|
@@ -1251,7 +1210,7 @@ PyTypeObject Nuitka_Coroutine_Type = {
|
|
|
1251
1210
|
0, // tp_iternext
|
|
1252
1211
|
Nuitka_Coroutine_methods, // tp_methods
|
|
1253
1212
|
Nuitka_Coroutine_members, // tp_members
|
|
1254
|
-
|
|
1213
|
+
Nuitka_Coroutine_tp_getset, // tp_getset
|
|
1255
1214
|
0, // tp_base
|
|
1256
1215
|
0, // tp_dict
|
|
1257
1216
|
0, // tp_descr_get
|
|
@@ -1390,12 +1349,15 @@ static int Nuitka_PyInterpreterFrame_GetLine(_PyInterpreterFrame *frame) {
|
|
|
1390
1349
|
// we have the line number stored.
|
|
1391
1350
|
|
|
1392
1351
|
int addr = _PyInterpreterFrame_LASTI(frame) * sizeof(_Py_CODEUNIT);
|
|
1352
|
+
#if PYTHON_VERSION < 0x3d0
|
|
1393
1353
|
return PyCode_Addr2Line(frame->f_code, addr);
|
|
1354
|
+
#else
|
|
1355
|
+
return PyCode_Addr2Line((PyCodeObject *)frame->f_executable, addr);
|
|
1356
|
+
#endif
|
|
1394
1357
|
}
|
|
1395
1358
|
|
|
1396
|
-
static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
1397
|
-
|
|
1398
|
-
_PyInterpreterFrame *current_frame = tstate->cframe->current_frame;
|
|
1359
|
+
static PyObject *computeCoroutineOrigin(PyThreadState *tstate, int origin_depth) {
|
|
1360
|
+
_PyInterpreterFrame *current_frame = CURRENT_TSTATE_INTERPRETER_FRAME(tstate);
|
|
1399
1361
|
|
|
1400
1362
|
// Create result tuple with correct size.
|
|
1401
1363
|
int frame_count = 0;
|
|
@@ -1404,11 +1366,11 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
|
1404
1366
|
frame = frame->previous;
|
|
1405
1367
|
frame_count += 1;
|
|
1406
1368
|
}
|
|
1407
|
-
PyObject *cr_origin = MAKE_TUPLE_EMPTY_VAR(frame_count);
|
|
1369
|
+
PyObject *cr_origin = MAKE_TUPLE_EMPTY_VAR(tstate, frame_count);
|
|
1408
1370
|
|
|
1409
1371
|
frame = current_frame;
|
|
1410
1372
|
for (int i = 0; i < frame_count; i++) {
|
|
1411
|
-
PyCodeObject *code = frame
|
|
1373
|
+
PyCodeObject *code = Nuitka_InterpreterFrame_GetCodeObject(frame);
|
|
1412
1374
|
|
|
1413
1375
|
int line = Nuitka_PyInterpreterFrame_GetLine(frame);
|
|
1414
1376
|
|
|
@@ -1423,7 +1385,7 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
|
1423
1385
|
}
|
|
1424
1386
|
|
|
1425
1387
|
#elif PYTHON_VERSION >= 0x370
|
|
1426
|
-
static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
1388
|
+
static PyObject *computeCoroutineOrigin(PyThreadState *tstate, int origin_depth) {
|
|
1427
1389
|
PyFrameObject *frame = PyEval_GetFrame();
|
|
1428
1390
|
|
|
1429
1391
|
int frame_count = 0;
|
|
@@ -1433,13 +1395,13 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
|
|
|
1433
1395
|
frame_count += 1;
|
|
1434
1396
|
}
|
|
1435
1397
|
|
|
1436
|
-
PyObject *cr_origin = MAKE_TUPLE_EMPTY(frame_count);
|
|
1398
|
+
PyObject *cr_origin = MAKE_TUPLE_EMPTY(tstate, frame_count);
|
|
1437
1399
|
|
|
1438
1400
|
frame = PyEval_GetFrame();
|
|
1439
1401
|
|
|
1440
1402
|
for (int i = 0; i < frame_count; i++) {
|
|
1441
|
-
PyObject *frame_info =
|
|
1442
|
-
|
|
1403
|
+
PyObject *frame_info = Py_BuildValue("OiO", Nuitka_Frame_GetCodeObject(frame)->co_filename,
|
|
1404
|
+
PyFrame_GetLineNumber(frame), frame->f_code->co_name);
|
|
1443
1405
|
|
|
1444
1406
|
assert(frame_info);
|
|
1445
1407
|
|
|
@@ -1489,7 +1451,7 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
|
|
|
1489
1451
|
result->m_qualname = qualname;
|
|
1490
1452
|
Py_INCREF(qualname);
|
|
1491
1453
|
|
|
1492
|
-
result->
|
|
1454
|
+
result->m_yield_from = NULL;
|
|
1493
1455
|
|
|
1494
1456
|
memcpy(&result->m_closure[0], closure, closure_given * sizeof(struct Nuitka_CellObject *));
|
|
1495
1457
|
result->m_closure_given = closure_given;
|
|
@@ -1515,7 +1477,7 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
|
|
|
1515
1477
|
if (origin_depth == 0) {
|
|
1516
1478
|
result->m_origin = NULL;
|
|
1517
1479
|
} else {
|
|
1518
|
-
result->m_origin = computeCoroutineOrigin(origin_depth);
|
|
1480
|
+
result->m_origin = computeCoroutineOrigin(tstate, origin_depth);
|
|
1519
1481
|
}
|
|
1520
1482
|
#endif
|
|
1521
1483
|
|
|
@@ -1530,9 +1492,21 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
|
|
|
1530
1492
|
return (PyObject *)result;
|
|
1531
1493
|
}
|
|
1532
1494
|
|
|
1495
|
+
static inline PyCodeObject *_Nuitka_PyGen_GetCode(PyGenObject *gen) {
|
|
1496
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1497
|
+
return (PyCodeObject *)gen->gi_code;
|
|
1498
|
+
#elif PYTHON_VERSION < 0x3d0
|
|
1499
|
+
_PyInterpreterFrame *frame = (_PyInterpreterFrame *)(gen->gi_iframe);
|
|
1500
|
+
return frame->f_code;
|
|
1501
|
+
#else
|
|
1502
|
+
_PyInterpreterFrame *frame = (_PyInterpreterFrame *)(gen->gi_iframe);
|
|
1503
|
+
return (PyCodeObject *)frame->f_executable;
|
|
1504
|
+
#endif
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1533
1507
|
static int gen_is_coroutine(PyObject *object) {
|
|
1534
1508
|
if (PyGen_CheckExact(object)) {
|
|
1535
|
-
PyCodeObject *code = (
|
|
1509
|
+
PyCodeObject *code = _Nuitka_PyGen_GetCode((PyGenObject *)object);
|
|
1536
1510
|
|
|
1537
1511
|
if (code->co_flags & CO_ITERABLE_COROUTINE) {
|
|
1538
1512
|
return 1;
|
|
@@ -1679,14 +1653,18 @@ static PyObject *Nuitka_AIterWrapper_iternext(struct Nuitka_AIterWrapper *aw) {
|
|
|
1679
1653
|
SET_CURRENT_EXCEPTION_TYPE0_VALUE0(tstate, PyExc_StopIteration, aw->aw_aiter);
|
|
1680
1654
|
#else
|
|
1681
1655
|
if (!PyTuple_Check(aw->aw_aiter) && !PyExceptionInstance_Check(aw->aw_aiter)) {
|
|
1682
|
-
|
|
1656
|
+
Py_INCREF(PyExc_StopIteration);
|
|
1657
|
+
Py_INCREF(aw->aw_aiter);
|
|
1658
|
+
|
|
1659
|
+
RESTORE_ERROR_OCCURRED(tstate, PyExc_StopIteration, aw->aw_aiter, NULL);
|
|
1683
1660
|
} else {
|
|
1684
|
-
PyObject *result =
|
|
1661
|
+
PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, PyExc_StopIteration, aw->aw_aiter);
|
|
1685
1662
|
if (unlikely(result == NULL)) {
|
|
1686
1663
|
return NULL;
|
|
1687
1664
|
}
|
|
1688
1665
|
|
|
1689
|
-
|
|
1666
|
+
Py_INCREF(PyExc_StopIteration);
|
|
1667
|
+
RESTORE_ERROR_OCCURRED(tstate, PyExc_StopIteration, result, NULL);
|
|
1690
1668
|
}
|
|
1691
1669
|
#endif
|
|
1692
1670
|
|
|
@@ -1953,3 +1931,18 @@ static void _initCompiledCoroutineTypes(void) {
|
|
|
1953
1931
|
#if PYTHON_VERSION >= 0x360
|
|
1954
1932
|
#include "CompiledAsyncgenType.c"
|
|
1955
1933
|
#endif
|
|
1934
|
+
|
|
1935
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1936
|
+
// integrates with CPython, but also works on its own.
|
|
1937
|
+
//
|
|
1938
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1939
|
+
// you may not use this file except in compliance with the License.
|
|
1940
|
+
// You may obtain a copy of the License at
|
|
1941
|
+
//
|
|
1942
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1943
|
+
//
|
|
1944
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1945
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1946
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1947
|
+
// See the License for the specific language governing permissions and
|
|
1948
|
+
// limitations under the License.
|