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,25 +1,10 @@
|
|
|
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
|
-
//
|
|
18
|
-
#include "nuitka/prelude.h"
|
|
1
|
+
// Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
19
2
|
|
|
3
|
+
#ifdef __IDE_ONLY__
|
|
20
4
|
#include "nuitka/freelists.h"
|
|
21
|
-
|
|
22
|
-
#include
|
|
5
|
+
#include "nuitka/prelude.h"
|
|
6
|
+
#include <structmember.h>
|
|
7
|
+
#endif
|
|
23
8
|
|
|
24
9
|
// For reporting about reference counts per type.
|
|
25
10
|
#if _DEBUG_REFCOUNTS
|
|
@@ -37,7 +22,7 @@ int count_hit_frame_cache_instances = 0;
|
|
|
37
22
|
#endif
|
|
38
23
|
|
|
39
24
|
#if PYTHON_VERSION < 0x3b0
|
|
40
|
-
static PyMemberDef
|
|
25
|
+
static PyMemberDef Nuitka_Frame_members[] = {
|
|
41
26
|
{(char *)"f_back", T_OBJECT, offsetof(PyFrameObject, f_back), READONLY | RESTRICTED},
|
|
42
27
|
{(char *)"f_code", T_OBJECT, offsetof(PyFrameObject, f_code), READONLY | RESTRICTED},
|
|
43
28
|
{(char *)"f_builtins", T_OBJECT, offsetof(PyFrameObject, f_builtins), READONLY | RESTRICTED},
|
|
@@ -46,12 +31,17 @@ static PyMemberDef Nuitka_Frame_memberlist[] = {
|
|
|
46
31
|
{NULL}};
|
|
47
32
|
|
|
48
33
|
#else
|
|
49
|
-
#define
|
|
34
|
+
#define Nuitka_Frame_members 0
|
|
50
35
|
#endif
|
|
51
36
|
|
|
52
37
|
#if PYTHON_VERSION < 0x300
|
|
53
38
|
|
|
54
|
-
static PyObject *
|
|
39
|
+
static PyObject *_Nuitka_Frame_get_exc_traceback(PyObject *self, void *data) {
|
|
40
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
41
|
+
CHECK_OBJECT(self);
|
|
42
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
43
|
+
|
|
44
|
+
struct Nuitka_FrameObject *frame = (struct Nuitka_FrameObject *)self;
|
|
55
45
|
PyObject *result = frame->m_frame.f_exc_traceback;
|
|
56
46
|
|
|
57
47
|
if (result == NULL) {
|
|
@@ -62,7 +52,12 @@ static PyObject *Nuitka_Frame_get_exc_traceback(struct Nuitka_FrameObject *frame
|
|
|
62
52
|
return result;
|
|
63
53
|
}
|
|
64
54
|
|
|
65
|
-
static int
|
|
55
|
+
static int _Nuitka_Frame_set_exc_traceback(PyObject *self, PyObject *traceback, void *data) {
|
|
56
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
57
|
+
CHECK_OBJECT(self);
|
|
58
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
59
|
+
|
|
60
|
+
struct Nuitka_FrameObject *frame = (struct Nuitka_FrameObject *)self;
|
|
66
61
|
Py_XDECREF(frame->m_frame.f_exc_traceback);
|
|
67
62
|
|
|
68
63
|
if (traceback == Py_None) {
|
|
@@ -75,8 +70,13 @@ static int Nuitka_Frame_set_exc_traceback(struct Nuitka_FrameObject *frame, PyOb
|
|
|
75
70
|
return 0;
|
|
76
71
|
}
|
|
77
72
|
|
|
78
|
-
static PyObject *
|
|
73
|
+
static PyObject *_Nuitka_Frame_get_exc_type(PyObject *self, void *data) {
|
|
74
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
75
|
+
CHECK_OBJECT(self);
|
|
76
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
77
|
+
|
|
79
78
|
PyObject *result;
|
|
79
|
+
struct Nuitka_FrameObject *frame = (struct Nuitka_FrameObject *)self;
|
|
80
80
|
|
|
81
81
|
if (frame->m_frame.f_exc_type != NULL) {
|
|
82
82
|
result = frame->m_frame.f_exc_type;
|
|
@@ -88,7 +88,12 @@ static PyObject *Nuitka_Frame_get_exc_type(struct Nuitka_FrameObject *frame) {
|
|
|
88
88
|
return result;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
static int
|
|
91
|
+
static int _Nuitka_Frame_set_exc_type(PyObject *self, PyObject *exception_type, void *data) {
|
|
92
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
93
|
+
CHECK_OBJECT(self);
|
|
94
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
95
|
+
|
|
96
|
+
struct Nuitka_FrameObject *frame = (struct Nuitka_FrameObject *)self;
|
|
92
97
|
PyObject *old = frame->m_frame.f_exc_type;
|
|
93
98
|
|
|
94
99
|
if (exception_type == Py_None) {
|
|
@@ -103,8 +108,13 @@ static int Nuitka_Frame_set_exc_type(struct Nuitka_FrameObject *frame, PyObject
|
|
|
103
108
|
return 0;
|
|
104
109
|
}
|
|
105
110
|
|
|
106
|
-
static PyObject *
|
|
111
|
+
static PyObject *_Nuitka_Frame_get_exc_value(PyObject *self, void *data) {
|
|
112
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
113
|
+
CHECK_OBJECT(self);
|
|
114
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
115
|
+
|
|
107
116
|
PyObject *result;
|
|
117
|
+
struct Nuitka_FrameObject *frame = (struct Nuitka_FrameObject *)self;
|
|
108
118
|
|
|
109
119
|
if (frame->m_frame.f_exc_value != NULL) {
|
|
110
120
|
result = frame->m_frame.f_exc_value;
|
|
@@ -116,7 +126,12 @@ static PyObject *Nuitka_Frame_get_exc_value(struct Nuitka_FrameObject *frame) {
|
|
|
116
126
|
return result;
|
|
117
127
|
}
|
|
118
128
|
|
|
119
|
-
static int
|
|
129
|
+
static int _Nuitka_Frame_set_exc_value(PyObject *self, PyObject *exception_value, void *data) {
|
|
130
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
131
|
+
CHECK_OBJECT(self);
|
|
132
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
133
|
+
|
|
134
|
+
struct Nuitka_FrameObject *frame = (struct Nuitka_FrameObject *)self;
|
|
120
135
|
PyObject *old = frame->m_frame.f_exc_value;
|
|
121
136
|
|
|
122
137
|
if (exception_value == Py_None) {
|
|
@@ -130,14 +145,25 @@ static int Nuitka_Frame_set_exc_value(struct Nuitka_FrameObject *frame, PyObject
|
|
|
130
145
|
return 0;
|
|
131
146
|
}
|
|
132
147
|
|
|
133
|
-
static PyObject *
|
|
134
|
-
|
|
148
|
+
static PyObject *_Nuitka_Frame_get_restricted(PyObject *self, void *data) {
|
|
149
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
150
|
+
CHECK_OBJECT(self);
|
|
151
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
152
|
+
|
|
153
|
+
Py_INCREF_IMMORTAL(Py_False);
|
|
135
154
|
return Py_False;
|
|
136
155
|
}
|
|
137
156
|
|
|
138
157
|
#endif
|
|
139
158
|
|
|
140
|
-
static PyObject *
|
|
159
|
+
static PyObject *_Nuitka_Frame_get_locals(PyObject *self, void *data) {
|
|
160
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
161
|
+
CHECK_OBJECT(self);
|
|
162
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
163
|
+
|
|
164
|
+
NUITKA_MAY_BE_UNUSED PyThreadState *tstate = PyThreadState_GET();
|
|
165
|
+
|
|
166
|
+
struct Nuitka_FrameObject *nuitka_frame = (struct Nuitka_FrameObject *)self;
|
|
141
167
|
if (nuitka_frame->m_type_description == NULL) {
|
|
142
168
|
#if PYTHON_VERSION < 0x3b0
|
|
143
169
|
PyFrameObject *locals_owner = &nuitka_frame->m_frame;
|
|
@@ -146,14 +172,14 @@ static PyObject *Nuitka_Frame_getlocals(struct Nuitka_FrameObject *nuitka_frame,
|
|
|
146
172
|
#endif
|
|
147
173
|
|
|
148
174
|
if (locals_owner->f_locals == NULL) {
|
|
149
|
-
locals_owner->f_locals = MAKE_DICT_EMPTY();
|
|
175
|
+
locals_owner->f_locals = MAKE_DICT_EMPTY(tstate);
|
|
150
176
|
}
|
|
151
177
|
|
|
152
178
|
Py_INCREF(locals_owner->f_locals);
|
|
153
179
|
return locals_owner->f_locals;
|
|
154
180
|
} else {
|
|
155
|
-
PyObject *result = MAKE_DICT_EMPTY();
|
|
156
|
-
PyObject **
|
|
181
|
+
PyObject *result = MAKE_DICT_EMPTY(tstate);
|
|
182
|
+
PyObject **var_names = Nuitka_GetCodeVarNames(Nuitka_GetFrameCodeObject(nuitka_frame));
|
|
157
183
|
|
|
158
184
|
char const *w = nuitka_frame->m_type_description;
|
|
159
185
|
char const *t = nuitka_frame->m_locals_storage;
|
|
@@ -166,7 +192,7 @@ static PyObject *Nuitka_Frame_getlocals(struct Nuitka_FrameObject *nuitka_frame,
|
|
|
166
192
|
CHECK_OBJECT_X(value);
|
|
167
193
|
|
|
168
194
|
if (value != NULL) {
|
|
169
|
-
DICT_SET_ITEM(result, *
|
|
195
|
+
DICT_SET_ITEM(result, *var_names, value);
|
|
170
196
|
}
|
|
171
197
|
|
|
172
198
|
t += sizeof(PyObject *);
|
|
@@ -179,7 +205,7 @@ static PyObject *Nuitka_Frame_getlocals(struct Nuitka_FrameObject *nuitka_frame,
|
|
|
179
205
|
CHECK_OBJECT(value);
|
|
180
206
|
|
|
181
207
|
if (value->ob_ref != NULL) {
|
|
182
|
-
DICT_SET_ITEM(result, *
|
|
208
|
+
DICT_SET_ITEM(result, *var_names, value->ob_ref);
|
|
183
209
|
}
|
|
184
210
|
|
|
185
211
|
t += sizeof(struct Nuitka_CellObject *);
|
|
@@ -194,11 +220,11 @@ static PyObject *Nuitka_Frame_getlocals(struct Nuitka_FrameObject *nuitka_frame,
|
|
|
194
220
|
t += sizeof(int);
|
|
195
221
|
switch ((nuitka_bool)value) {
|
|
196
222
|
case NUITKA_BOOL_TRUE: {
|
|
197
|
-
DICT_SET_ITEM(result, *
|
|
223
|
+
DICT_SET_ITEM(result, *var_names, Py_True);
|
|
198
224
|
break;
|
|
199
225
|
}
|
|
200
226
|
case NUITKA_BOOL_FALSE: {
|
|
201
|
-
DICT_SET_ITEM(result, *
|
|
227
|
+
DICT_SET_ITEM(result, *var_names, Py_False);
|
|
202
228
|
break;
|
|
203
229
|
}
|
|
204
230
|
default:
|
|
@@ -211,24 +237,38 @@ static PyObject *Nuitka_Frame_getlocals(struct Nuitka_FrameObject *nuitka_frame,
|
|
|
211
237
|
}
|
|
212
238
|
|
|
213
239
|
w += 1;
|
|
214
|
-
|
|
240
|
+
var_names += 1;
|
|
215
241
|
}
|
|
216
242
|
|
|
217
243
|
return result;
|
|
218
244
|
}
|
|
219
245
|
}
|
|
220
246
|
|
|
221
|
-
static PyObject *
|
|
222
|
-
|
|
247
|
+
static PyObject *_Nuitka_Frame_get_lineno(PyObject *self, void *data) {
|
|
248
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
249
|
+
CHECK_OBJECT(self);
|
|
250
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
251
|
+
|
|
252
|
+
struct Nuitka_FrameObject *frame = (struct Nuitka_FrameObject *)self;
|
|
253
|
+
return Nuitka_PyInt_FromLong(frame->m_frame.f_lineno);
|
|
223
254
|
}
|
|
224
255
|
|
|
225
|
-
static PyObject *
|
|
256
|
+
static PyObject *_Nuitka_Frame_get_trace(PyObject *self, void *data) {
|
|
257
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
258
|
+
CHECK_OBJECT(self);
|
|
259
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
260
|
+
|
|
261
|
+
struct Nuitka_FrameObject *frame = (struct Nuitka_FrameObject *)self;
|
|
226
262
|
PyObject *result = frame->m_frame.f_trace;
|
|
227
263
|
Py_INCREF(result);
|
|
228
264
|
return result;
|
|
229
265
|
}
|
|
230
266
|
|
|
231
|
-
static int
|
|
267
|
+
static int _Nuitka_Frame_set_trace(PyObject *self, PyObject *value, void *data) {
|
|
268
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
269
|
+
CHECK_OBJECT(self);
|
|
270
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
271
|
+
|
|
232
272
|
PyThreadState *tstate = PyThreadState_GET();
|
|
233
273
|
|
|
234
274
|
SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, "f_trace is not writable in Nuitka");
|
|
@@ -236,26 +276,42 @@ static int Nuitka_Frame_settrace(struct Nuitka_FrameObject *frame, PyObject *v,
|
|
|
236
276
|
}
|
|
237
277
|
|
|
238
278
|
#if PYTHON_VERSION >= 0x370
|
|
239
|
-
static PyObject *
|
|
279
|
+
static PyObject *_Nuitka_Frame_get_trace_lines(PyObject *self, void *data) {
|
|
280
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
281
|
+
CHECK_OBJECT(self);
|
|
282
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
283
|
+
|
|
240
284
|
PyObject *result = Py_False;
|
|
241
|
-
|
|
285
|
+
Py_INCREF_IMMORTAL(result);
|
|
242
286
|
return result;
|
|
243
287
|
}
|
|
244
288
|
|
|
245
|
-
static int
|
|
289
|
+
static int _Nuitka_Frame_set_trace_lines(PyObject *self, PyObject *value, void *data) {
|
|
290
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
291
|
+
CHECK_OBJECT(self);
|
|
292
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
293
|
+
|
|
246
294
|
PyThreadState *tstate = PyThreadState_GET();
|
|
247
295
|
|
|
248
296
|
SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, "f_trace_lines is not writable in Nuitka");
|
|
249
297
|
return -1;
|
|
250
298
|
}
|
|
251
299
|
|
|
252
|
-
static PyObject *
|
|
300
|
+
static PyObject *_Nuitka_Frame_get_trace_opcodes(PyObject *self, void *data) {
|
|
301
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
302
|
+
CHECK_OBJECT(self);
|
|
303
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
304
|
+
|
|
253
305
|
PyObject *result = Py_False;
|
|
254
|
-
|
|
306
|
+
Py_INCREF_IMMORTAL(result);
|
|
255
307
|
return result;
|
|
256
308
|
}
|
|
257
309
|
|
|
258
|
-
static int
|
|
310
|
+
static int _Nuitka_Frame_set_trace_opcodes(PyObject *self, PyObject *value, void *data) {
|
|
311
|
+
assert(Nuitka_Frame_CheckExact(self));
|
|
312
|
+
CHECK_OBJECT(self);
|
|
313
|
+
assert(_PyObject_GC_IS_TRACKED(self));
|
|
314
|
+
|
|
259
315
|
PyThreadState *tstate = PyThreadState_GET();
|
|
260
316
|
|
|
261
317
|
SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, "f_trace_opcodes is not writable in Nuitka");
|
|
@@ -263,33 +319,27 @@ static int Nuitka_Frame_settraceopcodes(struct Nuitka_FrameObject *frame, PyObje
|
|
|
263
319
|
}
|
|
264
320
|
#endif
|
|
265
321
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
}
|
|
270
|
-
#endif
|
|
271
|
-
|
|
272
|
-
static PyGetSetDef Nuitka_Frame_getsetlist[] = {
|
|
273
|
-
{(char *)"f_locals", (getter)Nuitka_Frame_getlocals, NULL, NULL},
|
|
274
|
-
{(char *)"f_lineno", (getter)Nuitka_Frame_getlineno, NULL, NULL},
|
|
275
|
-
{(char *)"f_trace", (getter)Nuitka_Frame_gettrace, (setter)Nuitka_Frame_settrace, NULL},
|
|
322
|
+
static PyGetSetDef Nuitka_Frame_tp_getset[] = {
|
|
323
|
+
{(char *)"f_locals", _Nuitka_Frame_get_locals, NULL, NULL},
|
|
324
|
+
{(char *)"f_lineno", _Nuitka_Frame_get_lineno, NULL, NULL},
|
|
325
|
+
{(char *)"f_trace", _Nuitka_Frame_get_trace, _Nuitka_Frame_set_trace, NULL},
|
|
276
326
|
#if PYTHON_VERSION < 0x300
|
|
277
|
-
{(char *)"f_restricted",
|
|
278
|
-
{(char *)"f_exc_traceback",
|
|
279
|
-
{(char *)"f_exc_type",
|
|
280
|
-
{(char *)"f_exc_value",
|
|
327
|
+
{(char *)"f_restricted", _Nuitka_Frame_get_restricted, NULL, NULL},
|
|
328
|
+
{(char *)"f_exc_traceback", _Nuitka_Frame_get_exc_traceback, _Nuitka_Frame_set_exc_traceback, NULL},
|
|
329
|
+
{(char *)"f_exc_type", _Nuitka_Frame_get_exc_type, _Nuitka_Frame_set_exc_type, NULL},
|
|
330
|
+
{(char *)"f_exc_value", _Nuitka_Frame_get_exc_value, _Nuitka_Frame_set_exc_value, NULL},
|
|
281
331
|
#endif
|
|
282
332
|
#if PYTHON_VERSION >= 0x370
|
|
283
|
-
{(char *)"f_trace_lines",
|
|
284
|
-
{(char *)"f_trace_opcodes",
|
|
285
|
-
#endif
|
|
286
|
-
#if PYTHON_VERSION >= 0x3b0
|
|
287
|
-
{(char *)"f_trace_lines", (getter)Nuitka_Frame_getback, NULL, NULL},
|
|
333
|
+
{(char *)"f_trace_lines", _Nuitka_Frame_get_trace_lines, _Nuitka_Frame_set_trace_lines, NULL},
|
|
334
|
+
{(char *)"f_trace_opcodes", _Nuitka_Frame_get_trace_opcodes, _Nuitka_Frame_set_trace_opcodes, NULL},
|
|
288
335
|
#endif
|
|
289
336
|
{NULL}};
|
|
290
337
|
|
|
291
338
|
// tp_repr slot, decide how a function shall be output
|
|
292
339
|
static PyObject *Nuitka_Frame_tp_repr(struct Nuitka_FrameObject *nuitka_frame) {
|
|
340
|
+
assert(Nuitka_Frame_CheckExact((PyObject *)nuitka_frame));
|
|
341
|
+
CHECK_OBJECT((PyObject *)nuitka_frame);
|
|
342
|
+
assert(_PyObject_GC_IS_TRACKED(nuitka_frame));
|
|
293
343
|
|
|
294
344
|
#if PYTHON_VERSION >= 0x370
|
|
295
345
|
PyCodeObject *code_object = Nuitka_GetFrameCodeObject(nuitka_frame);
|
|
@@ -313,7 +363,8 @@ static void Nuitka_Frame_tp_clear(struct Nuitka_FrameObject *frame) {
|
|
|
313
363
|
while (*w != 0) {
|
|
314
364
|
switch (*w) {
|
|
315
365
|
case NUITKA_TYPE_DESCRIPTION_OBJECT:
|
|
316
|
-
case NUITKA_TYPE_DESCRIPTION_OBJECT_PTR:
|
|
366
|
+
case NUITKA_TYPE_DESCRIPTION_OBJECT_PTR:
|
|
367
|
+
case NUITKA_TYPE_DESCRIPTION_NILONG: {
|
|
317
368
|
PyObject *value = *(PyObject **)t;
|
|
318
369
|
CHECK_OBJECT_X(value);
|
|
319
370
|
|
|
@@ -367,10 +418,9 @@ static void Nuitka_Frame_tp_dealloc(struct Nuitka_FrameObject *nuitka_frame) {
|
|
|
367
418
|
// Save the current exception, if any, we must to not corrupt it.
|
|
368
419
|
PyThreadState *tstate = PyThreadState_GET();
|
|
369
420
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
RESTORE_ERROR_OCCURRED(tstate, save_exception_type, save_exception_value, save_exception_tb);
|
|
421
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state1;
|
|
422
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state1);
|
|
423
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state1);
|
|
374
424
|
#endif
|
|
375
425
|
|
|
376
426
|
Nuitka_GC_UnTrack(nuitka_frame);
|
|
@@ -382,6 +432,7 @@ static void Nuitka_Frame_tp_dealloc(struct Nuitka_FrameObject *nuitka_frame) {
|
|
|
382
432
|
_PyInterpreterFrame *locals_owner = &nuitka_frame->m_interpreter_frame;
|
|
383
433
|
#endif
|
|
384
434
|
|
|
435
|
+
assert(Nuitka_GC_IS_TRACKED_X((PyObject *)frame->f_back));
|
|
385
436
|
Py_XDECREF(frame->f_back);
|
|
386
437
|
Py_DECREF(locals_owner->f_builtins);
|
|
387
438
|
Py_DECREF(locals_owner->f_globals);
|
|
@@ -395,6 +446,15 @@ static void Nuitka_Frame_tp_dealloc(struct Nuitka_FrameObject *nuitka_frame) {
|
|
|
395
446
|
|
|
396
447
|
Nuitka_Frame_tp_clear(nuitka_frame);
|
|
397
448
|
|
|
449
|
+
if (Py_REFCNT(nuitka_frame) > 0) {
|
|
450
|
+
Py_SET_REFCNT(nuitka_frame, Py_REFCNT(nuitka_frame) - 1);
|
|
451
|
+
if (Py_REFCNT(nuitka_frame) >= 1) {
|
|
452
|
+
// TODO: Allow this in debug mode, for now we would like to reproduce it.
|
|
453
|
+
assert(false);
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
398
458
|
#if PYTHON_VERSION >= 0x3b0
|
|
399
459
|
// Restore from backup, see header comment for the field "m_ob_size" to get
|
|
400
460
|
// it.
|
|
@@ -404,13 +464,19 @@ static void Nuitka_Frame_tp_dealloc(struct Nuitka_FrameObject *nuitka_frame) {
|
|
|
404
464
|
releaseToFreeList(free_list_frames, nuitka_frame, MAX_FRAME_FREE_LIST_COUNT);
|
|
405
465
|
|
|
406
466
|
#ifndef __NUITKA_NO_ASSERT__
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
467
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state2;
|
|
468
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state2);
|
|
469
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state2);
|
|
470
|
+
|
|
471
|
+
ASSERT_SAME_EXCEPTION_STATE(&saved_exception_state1, &saved_exception_state2);
|
|
410
472
|
#endif
|
|
411
473
|
}
|
|
412
474
|
|
|
413
475
|
static int Nuitka_Frame_tp_traverse(struct Nuitka_FrameObject *frame, visitproc visit, void *arg) {
|
|
476
|
+
assert(Nuitka_Frame_CheckExact((PyObject *)frame));
|
|
477
|
+
CHECK_OBJECT((PyObject *)frame);
|
|
478
|
+
assert(_PyObject_GC_IS_TRACKED(frame));
|
|
479
|
+
|
|
414
480
|
Py_VISIT(frame->m_frame.f_back);
|
|
415
481
|
|
|
416
482
|
#if PYTHON_VERSION < 0x3b0
|
|
@@ -465,6 +531,7 @@ static int Nuitka_Frame_tp_traverse(struct Nuitka_FrameObject *frame, visitproc
|
|
|
465
531
|
break;
|
|
466
532
|
}
|
|
467
533
|
default:
|
|
534
|
+
NUITKA_CANNOT_GET_HERE("invalid type description");
|
|
468
535
|
assert(false);
|
|
469
536
|
}
|
|
470
537
|
|
|
@@ -474,9 +541,13 @@ static int Nuitka_Frame_tp_traverse(struct Nuitka_FrameObject *frame, visitproc
|
|
|
474
541
|
return 0;
|
|
475
542
|
}
|
|
476
543
|
|
|
477
|
-
#if PYTHON_VERSION >=
|
|
544
|
+
#if PYTHON_VERSION >= 0x300
|
|
545
|
+
|
|
546
|
+
static PyObject *Nuitka_Frame_clear(struct Nuitka_FrameObject *frame, PyObject *unused) {
|
|
547
|
+
assert(Nuitka_Frame_CheckExact((PyObject *)frame));
|
|
548
|
+
CHECK_OBJECT((PyObject *)frame);
|
|
549
|
+
assert(_PyObject_GC_IS_TRACKED(frame));
|
|
478
550
|
|
|
479
|
-
static PyObject *Nuitka_Frame_clear(struct Nuitka_FrameObject *frame) {
|
|
480
551
|
PyThreadState *tstate = PyThreadState_GET();
|
|
481
552
|
|
|
482
553
|
if (Nuitka_Frame_IsExecuting(frame)) {
|
|
@@ -498,7 +569,7 @@ static PyObject *Nuitka_Frame_clear(struct Nuitka_FrameObject *frame) {
|
|
|
498
569
|
}
|
|
499
570
|
#endif
|
|
500
571
|
|
|
501
|
-
#if PYTHON_VERSION >=
|
|
572
|
+
#if PYTHON_VERSION >= 0x300
|
|
502
573
|
// For frames that are closed, we also need to close the generator.
|
|
503
574
|
PyObject *f_gen = Nuitka_GetFrameGenerator(frame);
|
|
504
575
|
if (f_gen != NULL) {
|
|
@@ -555,6 +626,10 @@ static PyObject *Nuitka_Frame_clear(struct Nuitka_FrameObject *frame) {
|
|
|
555
626
|
#endif
|
|
556
627
|
|
|
557
628
|
static inline Py_ssize_t Nuitka_Frame_GetSize(struct Nuitka_FrameObject *frame) {
|
|
629
|
+
assert(Nuitka_Frame_CheckExact((PyObject *)frame));
|
|
630
|
+
CHECK_OBJECT((PyObject *)frame);
|
|
631
|
+
assert(_PyObject_GC_IS_TRACKED(frame));
|
|
632
|
+
|
|
558
633
|
#if PYTHON_VERSION < 0x3b0
|
|
559
634
|
return Py_SIZE(frame);
|
|
560
635
|
#else
|
|
@@ -562,12 +637,16 @@ static inline Py_ssize_t Nuitka_Frame_GetSize(struct Nuitka_FrameObject *frame)
|
|
|
562
637
|
#endif
|
|
563
638
|
}
|
|
564
639
|
|
|
565
|
-
static PyObject *Nuitka_Frame_sizeof(struct Nuitka_FrameObject *frame) {
|
|
640
|
+
static PyObject *Nuitka_Frame_sizeof(struct Nuitka_FrameObject *frame, PyObject *unused) {
|
|
641
|
+
assert(Nuitka_Frame_CheckExact((PyObject *)frame));
|
|
642
|
+
CHECK_OBJECT((PyObject *)frame);
|
|
643
|
+
assert(_PyObject_GC_IS_TRACKED(frame));
|
|
644
|
+
|
|
566
645
|
return PyInt_FromSsize_t(sizeof(struct Nuitka_FrameObject) + Py_SIZE(frame));
|
|
567
646
|
}
|
|
568
647
|
|
|
569
648
|
static PyMethodDef Nuitka_Frame_methods[] = {
|
|
570
|
-
#if PYTHON_VERSION >=
|
|
649
|
+
#if PYTHON_VERSION >= 0x300
|
|
571
650
|
{"clear", (PyCFunction)Nuitka_Frame_clear, METH_NOARGS, "F.clear(): clear most references held by the frame"},
|
|
572
651
|
#endif
|
|
573
652
|
{"__sizeof__", (PyCFunction)Nuitka_Frame_sizeof, METH_NOARGS, "F.__sizeof__() -> size of F in memory, in bytes"},
|
|
@@ -601,8 +680,8 @@ PyTypeObject Nuitka_Frame_Type = {
|
|
|
601
680
|
0, // tp_iter
|
|
602
681
|
0, // tp_iternext
|
|
603
682
|
Nuitka_Frame_methods, // tp_methods
|
|
604
|
-
|
|
605
|
-
|
|
683
|
+
Nuitka_Frame_members, // tp_members
|
|
684
|
+
Nuitka_Frame_tp_getset, // tp_getset
|
|
606
685
|
0, // tp_base
|
|
607
686
|
0, // tp_dict
|
|
608
687
|
};
|
|
@@ -619,23 +698,24 @@ void _initCompiledFrameType(void) {
|
|
|
619
698
|
assert(Nuitka_Frame_Type.tp_methods != PyFrame_Type.tp_methods);
|
|
620
699
|
assert(Nuitka_Frame_Type.tp_members != PyFrame_Type.tp_members);
|
|
621
700
|
assert(Nuitka_Frame_Type.tp_getset != PyFrame_Type.tp_getset);
|
|
622
|
-
|
|
701
|
+
|
|
623
702
|
assert(Nuitka_Frame_Type.tp_descr_get != PyFrame_Type.tp_descr_get || PyFrame_Type.tp_descr_get == NULL);
|
|
624
703
|
|
|
625
704
|
assert(Nuitka_Frame_Type.tp_descr_set != PyFrame_Type.tp_descr_set || PyFrame_Type.tp_descr_set == NULL);
|
|
626
705
|
assert(Nuitka_Frame_Type.tp_dictoffset != PyFrame_Type.tp_dictoffset || PyFrame_Type.tp_dictoffset == 0);
|
|
627
706
|
// TODO: These get changed and into the same thing, not sure what to compare against, project something
|
|
707
|
+
// assert(Nuitka_Frame_Type.tp_dict != PyFrame_Type.tp_dict);
|
|
628
708
|
// assert(Nuitka_Frame_Type.tp_init != PyFrame_Type.tp_init || PyFrame_Type.tp_init == NULL);
|
|
629
709
|
// assert(Nuitka_Frame_Type.tp_alloc != PyFrame_Type.tp_alloc || PyFrame_Type.tp_alloc == NULL);
|
|
630
710
|
// assert(Nuitka_Frame_Type.tp_new != PyFrame_Type.tp_new || PyFrame_Type.tp_new == NULL);
|
|
631
711
|
// assert(Nuitka_Frame_Type.tp_free != PyFrame_Type.tp_free || PyFrame_Type.tp_free == NULL);
|
|
712
|
+
// assert(Nuitka_Frame_Type.tp_weaklist != PyFrame_Type.tp_weaklist);
|
|
632
713
|
assert(Nuitka_Frame_Type.tp_bases != PyFrame_Type.tp_bases);
|
|
633
714
|
assert(Nuitka_Frame_Type.tp_mro != PyFrame_Type.tp_mro);
|
|
634
715
|
assert(Nuitka_Frame_Type.tp_cache != PyFrame_Type.tp_cache || PyFrame_Type.tp_cache == NULL);
|
|
635
716
|
assert(Nuitka_Frame_Type.tp_subclasses != PyFrame_Type.tp_subclasses || PyFrame_Type.tp_cache == NULL);
|
|
636
|
-
assert(Nuitka_Frame_Type.tp_weaklist != PyFrame_Type.tp_weaklist);
|
|
637
717
|
assert(Nuitka_Frame_Type.tp_del != PyFrame_Type.tp_del || PyFrame_Type.tp_del == NULL);
|
|
638
|
-
#if PYTHON_VERSION >=
|
|
718
|
+
#if PYTHON_VERSION >= 0x300
|
|
639
719
|
assert(Nuitka_Frame_Type.tp_finalize != PyFrame_Type.tp_finalize || PyFrame_Type.tp_finalize == NULL);
|
|
640
720
|
#endif
|
|
641
721
|
Nuitka_PyType_Ready(&Nuitka_Frame_Type, &PyFrame_Type, true, true, false, false, false);
|
|
@@ -674,7 +754,12 @@ static struct Nuitka_FrameObject *_MAKE_COMPILED_FRAME(PyCodeObject *code, PyObj
|
|
|
674
754
|
_PyInterpreterFrame *locals_owner = &result->m_interpreter_frame;
|
|
675
755
|
#endif
|
|
676
756
|
|
|
757
|
+
#if PYTHON_VERSION < 0x3d0
|
|
677
758
|
locals_owner->f_code = code;
|
|
759
|
+
#else
|
|
760
|
+
// TODO: Why is our code object not just immortal.
|
|
761
|
+
locals_owner->f_executable = (PyObject *)code;
|
|
762
|
+
#endif
|
|
678
763
|
|
|
679
764
|
frame->f_trace = Py_None;
|
|
680
765
|
|
|
@@ -702,18 +787,18 @@ static struct Nuitka_FrameObject *_MAKE_COMPILED_FRAME(PyCodeObject *code, PyObj
|
|
|
702
787
|
CHECK_OBJECT_X(f_locals);
|
|
703
788
|
locals_owner->f_locals = f_locals;
|
|
704
789
|
|
|
705
|
-
#if PYTHON_VERSION <
|
|
790
|
+
#if PYTHON_VERSION < 0x300
|
|
706
791
|
frame->f_tstate = PyThreadState_GET();
|
|
707
792
|
#endif
|
|
708
793
|
|
|
709
794
|
#if PYTHON_VERSION < 0x3b0
|
|
710
795
|
frame->f_lasti = -1;
|
|
711
|
-
frame->f_iblock = 0;
|
|
796
|
+
frame->f_iblock = 0; // spell-checker: ignore iblock
|
|
712
797
|
#endif
|
|
713
798
|
|
|
714
799
|
frame->f_lineno = code->co_firstlineno;
|
|
715
800
|
|
|
716
|
-
#if PYTHON_VERSION >=
|
|
801
|
+
#if PYTHON_VERSION >= 0x300
|
|
717
802
|
Nuitka_SetFrameGenerator(result, NULL);
|
|
718
803
|
|
|
719
804
|
Nuitka_Frame_MarkAsNotExecuting(result);
|
|
@@ -721,9 +806,20 @@ static struct Nuitka_FrameObject *_MAKE_COMPILED_FRAME(PyCodeObject *code, PyObj
|
|
|
721
806
|
|
|
722
807
|
#if PYTHON_VERSION >= 0x3b0
|
|
723
808
|
result->m_interpreter_frame.frame_obj = &result->m_frame;
|
|
724
|
-
result->m_interpreter_frame.owner =
|
|
809
|
+
result->m_interpreter_frame.owner = FRAME_OWNED_BY_GENERATOR;
|
|
810
|
+
#if PYTHON_VERSION >= 0x3c0
|
|
811
|
+
result->m_interpreter_frame.f_funcobj = NULL; // spell-checker: ignore funcobj
|
|
812
|
+
#else
|
|
813
|
+
result->m_interpreter_frame.f_func = NULL;
|
|
814
|
+
#endif
|
|
815
|
+
#if PYTHON_VERSION < 0x3d0
|
|
725
816
|
result->m_interpreter_frame.prev_instr = _PyCode_CODE(code);
|
|
817
|
+
#else
|
|
818
|
+
result->m_interpreter_frame.instr_ptr = _PyCode_CODE(code);
|
|
819
|
+
#endif
|
|
726
820
|
result->m_frame.f_frame = &result->m_interpreter_frame;
|
|
821
|
+
|
|
822
|
+
assert(!_PyFrame_IsIncomplete(&result->m_interpreter_frame));
|
|
727
823
|
#endif
|
|
728
824
|
|
|
729
825
|
Nuitka_GC_Track(result);
|
|
@@ -769,7 +865,7 @@ PyCodeObject *makeCodeObject(PyObject *filename, int line, int flags, PyObject *
|
|
|
769
865
|
#if PYTHON_VERSION >= 0x3b0
|
|
770
866
|
PyObject *function_qualname,
|
|
771
867
|
#endif
|
|
772
|
-
PyObject *
|
|
868
|
+
PyObject *arg_names, PyObject *free_vars, int arg_count
|
|
773
869
|
#if PYTHON_VERSION >= 0x300
|
|
774
870
|
,
|
|
775
871
|
int kw_only_count
|
|
@@ -780,21 +876,35 @@ PyCodeObject *makeCodeObject(PyObject *filename, int line, int flags, PyObject *
|
|
|
780
876
|
#endif
|
|
781
877
|
) {
|
|
782
878
|
CHECK_OBJECT(filename);
|
|
783
|
-
assert(
|
|
879
|
+
assert(Nuitka_StringOrUnicode_CheckExact(filename));
|
|
784
880
|
CHECK_OBJECT(function_name);
|
|
785
881
|
assert(Nuitka_String_CheckExact(function_name));
|
|
786
882
|
|
|
787
|
-
|
|
788
|
-
|
|
883
|
+
#if PYTHON_VERSION < 0x300
|
|
884
|
+
PyObject *filename_str = NULL;
|
|
885
|
+
|
|
886
|
+
// TODO: Memory leak of filename, it might be intended transferred to the
|
|
887
|
+
// code object by using code.
|
|
888
|
+
if (PyUnicode_CheckExact(filename)) {
|
|
889
|
+
filename_str = PyUnicode_AsUTF8String(filename);
|
|
890
|
+
filename = filename_str;
|
|
891
|
+
} else {
|
|
892
|
+
filename_str = filename;
|
|
893
|
+
Py_INCREF(filename);
|
|
894
|
+
}
|
|
895
|
+
#endif
|
|
896
|
+
|
|
897
|
+
if (arg_names == NULL || arg_names == Py_None) {
|
|
898
|
+
arg_names = const_tuple_empty;
|
|
789
899
|
}
|
|
790
|
-
CHECK_OBJECT(
|
|
791
|
-
assert(PyTuple_Check(
|
|
900
|
+
CHECK_OBJECT(arg_names);
|
|
901
|
+
assert(PyTuple_Check(arg_names));
|
|
792
902
|
|
|
793
|
-
if (
|
|
794
|
-
|
|
903
|
+
if (free_vars == NULL || free_vars == Py_None) {
|
|
904
|
+
free_vars = const_tuple_empty;
|
|
795
905
|
}
|
|
796
|
-
CHECK_OBJECT(
|
|
797
|
-
assert(PyTuple_Check(
|
|
906
|
+
CHECK_OBJECT(free_vars);
|
|
907
|
+
assert(PyTuple_Check(free_vars));
|
|
798
908
|
|
|
799
909
|
// The PyCode_New has funny code that interns, mutating the tuple that owns
|
|
800
910
|
// it. Really serious non-immutable shit. We have triggered that changes
|
|
@@ -803,36 +913,80 @@ PyCodeObject *makeCodeObject(PyObject *filename, int line, int flags, PyObject *
|
|
|
803
913
|
// TODO: Reactivate once code object creation becomes un-streaming driven
|
|
804
914
|
// and we can pass the extra args with no worries.
|
|
805
915
|
|
|
806
|
-
// Py_hash_t hash = DEEP_HASH(
|
|
916
|
+
// Py_hash_t hash = DEEP_HASH(arg_names);
|
|
807
917
|
#endif
|
|
808
918
|
|
|
919
|
+
// spell-checker: ignore lnotab
|
|
809
920
|
#if PYTHON_VERSION < 0x300
|
|
810
921
|
PyObject *code = const_str_empty;
|
|
811
922
|
PyObject *lnotab = const_str_empty;
|
|
812
|
-
|
|
813
|
-
|
|
923
|
+
PyObject *consts = const_tuple_empty;
|
|
924
|
+
PyObject *names = const_tuple_empty;
|
|
925
|
+
int stacksize = 0;
|
|
926
|
+
#elif PYTHON_VERSION < 0x3b0
|
|
814
927
|
PyObject *code = const_bytes_empty;
|
|
815
928
|
PyObject *lnotab = const_bytes_empty;
|
|
929
|
+
PyObject *consts = const_tuple_empty;
|
|
930
|
+
PyObject *names = const_tuple_empty;
|
|
931
|
+
int stacksize = 0;
|
|
816
932
|
#else
|
|
817
933
|
// Our code object needs to be recognizable, and Python doesn't store the
|
|
818
934
|
// length anymore, so we need a non-empty one.
|
|
819
935
|
static PyObject *empty_code = NULL;
|
|
936
|
+
static PyObject *lnotab = NULL;
|
|
937
|
+
static PyObject *consts = NULL;
|
|
938
|
+
static PyObject *names = NULL;
|
|
939
|
+
// TODO: Seems removable.
|
|
940
|
+
static PyObject *exception_table = NULL;
|
|
941
|
+
static int stacksize = 0;
|
|
942
|
+
|
|
820
943
|
if (empty_code == NULL) {
|
|
821
|
-
|
|
944
|
+
// Only needed once here.
|
|
945
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
946
|
+
|
|
947
|
+
PyObject *empty_code_module_object = Py_CompileString(
|
|
948
|
+
"def empty(): raise RuntimeError('Compiled function bytecode used')", "<exec>", Py_file_input);
|
|
949
|
+
NUITKA_MAY_BE_UNUSED PyObject *module =
|
|
950
|
+
PyImport_ExecCodeModule("nuitka_empty_function", empty_code_module_object);
|
|
951
|
+
CHECK_OBJECT(module);
|
|
952
|
+
|
|
953
|
+
PyObject *empty_function = PyObject_GetAttrString(module, "empty");
|
|
954
|
+
CHECK_OBJECT(empty_function);
|
|
955
|
+
PyObject *empty_code_object = PyObject_GetAttrString(empty_function, "__code__");
|
|
956
|
+
CHECK_OBJECT(empty_code_object);
|
|
957
|
+
|
|
958
|
+
NUITKA_MAY_BE_UNUSED bool bool_res = Nuitka_DelModuleString(tstate, "nuitka_empty_function");
|
|
959
|
+
assert(bool_res != false);
|
|
960
|
+
|
|
961
|
+
empty_code = PyObject_GetAttrString(empty_code_object, "co_code");
|
|
962
|
+
CHECK_OBJECT(empty_code);
|
|
963
|
+
#if PYTHON_VERSION >= 0x3c0
|
|
964
|
+
lnotab = ((PyCodeObject *)empty_code_object)->co_linetable; // spell-checker: ignore linetable
|
|
965
|
+
#else
|
|
966
|
+
lnotab = PyObject_GetAttrString(empty_code_object, "co_lnotab");
|
|
967
|
+
CHECK_OBJECT(lnotab);
|
|
968
|
+
#endif
|
|
969
|
+
consts = PyObject_GetAttrString(empty_code_object, "co_consts");
|
|
970
|
+
CHECK_OBJECT(consts);
|
|
971
|
+
names = PyObject_GetAttrString(empty_code_object, "co_names");
|
|
972
|
+
CHECK_OBJECT(names);
|
|
973
|
+
exception_table = PyObject_GetAttrString(empty_code_object, "co_exceptiontable");
|
|
974
|
+
CHECK_OBJECT(exception_table);
|
|
975
|
+
|
|
976
|
+
stacksize = (int)PyLong_AsLong(PyObject_GetAttrString(empty_code_object, "co_stacksize"));
|
|
822
977
|
}
|
|
978
|
+
|
|
823
979
|
PyObject *code = empty_code;
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
}
|
|
830
|
-
#endif
|
|
980
|
+
CHECK_OBJECT(empty_code);
|
|
981
|
+
CHECK_OBJECT(lnotab);
|
|
982
|
+
CHECK_OBJECT(consts);
|
|
983
|
+
CHECK_OBJECT(names);
|
|
984
|
+
CHECK_OBJECT(exception_table);
|
|
831
985
|
#endif
|
|
832
986
|
|
|
833
987
|
// For Python 3.11 this value is checked, even if not used.
|
|
834
|
-
#if PYTHON_VERSION >=
|
|
835
|
-
int nlocals = (int)PyTuple_GET_SIZE(
|
|
988
|
+
#if PYTHON_VERSION >= 0x3b0
|
|
989
|
+
int nlocals = (int)PyTuple_GET_SIZE(arg_names);
|
|
836
990
|
#else
|
|
837
991
|
int nlocals = 0;
|
|
838
992
|
#endif
|
|
@@ -841,50 +995,52 @@ PyCodeObject *makeCodeObject(PyObject *filename, int line, int flags, PyObject *
|
|
|
841
995
|
// and is not available for Python2.
|
|
842
996
|
|
|
843
997
|
#if PYTHON_VERSION >= 0x380
|
|
844
|
-
PyCodeObject *result = PyCode_NewWithPosOnlyArgs(arg_count, //
|
|
998
|
+
PyCodeObject *result = PyCode_NewWithPosOnlyArgs(arg_count, // arg_count
|
|
845
999
|
#else
|
|
846
|
-
PyCodeObject *result = PyCode_New(arg_count, //
|
|
1000
|
+
PyCodeObject *result = PyCode_New(arg_count, // arg_count
|
|
847
1001
|
#endif
|
|
848
1002
|
|
|
849
1003
|
#if PYTHON_VERSION >= 0x300
|
|
850
1004
|
#if PYTHON_VERSION >= 0x380
|
|
851
|
-
pos_only_count, //
|
|
1005
|
+
pos_only_count, // pos-only count
|
|
852
1006
|
#endif
|
|
853
1007
|
kw_only_count, // kw-only count
|
|
854
1008
|
#endif
|
|
855
1009
|
nlocals, // nlocals
|
|
856
|
-
|
|
1010
|
+
stacksize, // stacksize
|
|
857
1011
|
flags, // flags
|
|
858
1012
|
code, // code (bytecode)
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
const_tuple_empty, //
|
|
1013
|
+
consts, // consts (we are not going to be compatible)
|
|
1014
|
+
names, // names (we are not going to be compatible)
|
|
1015
|
+
arg_names, // var_names (we are not going to be compatible)
|
|
1016
|
+
free_vars, // free_vars
|
|
1017
|
+
const_tuple_empty, // cell_vars (we are not going to be compatible)
|
|
864
1018
|
filename, // filename
|
|
865
1019
|
function_name, // name
|
|
866
1020
|
#if PYTHON_VERSION >= 0x3b0
|
|
867
1021
|
function_qualname, // qualname
|
|
868
1022
|
#endif
|
|
869
|
-
line, //
|
|
1023
|
+
line, // first_lineno (offset of the code object)
|
|
870
1024
|
lnotab // lnotab (table to translate code object)
|
|
871
1025
|
#if PYTHON_VERSION >= 0x3b0
|
|
872
1026
|
,
|
|
873
|
-
|
|
1027
|
+
exception_table // exception_table
|
|
874
1028
|
#endif
|
|
875
1029
|
);
|
|
876
1030
|
|
|
877
|
-
// assert(DEEP_HASH(tstate,
|
|
1031
|
+
// assert(DEEP_HASH(tstate, arg_names) == hash);
|
|
878
1032
|
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
1033
|
+
#if PYTHON_VERSION < 0x300
|
|
1034
|
+
Py_DECREF(filename_str);
|
|
1035
|
+
#endif
|
|
882
1036
|
|
|
883
|
-
CHECK_OBJECT(result);
|
|
884
1037
|
return result;
|
|
885
1038
|
}
|
|
886
1039
|
|
|
887
1040
|
void Nuitka_Frame_AttachLocals(struct Nuitka_FrameObject *frame_object, char const *type_description, ...) {
|
|
1041
|
+
assert(Nuitka_Frame_CheckExact((PyObject *)frame_object));
|
|
1042
|
+
CHECK_OBJECT((PyObject *)frame_object);
|
|
1043
|
+
assert(_PyObject_GC_IS_TRACKED(frame_object));
|
|
888
1044
|
assertFrameObject(frame_object);
|
|
889
1045
|
|
|
890
1046
|
#if _DEBUG_FRAME
|
|
@@ -939,6 +1095,11 @@ void Nuitka_Frame_AttachLocals(struct Nuitka_FrameObject *frame_object, char con
|
|
|
939
1095
|
CHECK_OBJECT_X(value->ob_ref);
|
|
940
1096
|
|
|
941
1097
|
memcpy(t, &value, sizeof(struct Nuitka_CellObject *));
|
|
1098
|
+
// TODO: Reference count must become wrong here, should
|
|
1099
|
+
// be forced to one probably, or we should simply not
|
|
1100
|
+
// store cells, but their values. Take a ref off "value"
|
|
1101
|
+
// is probably not needed.
|
|
1102
|
+
// Py_SET_REFCNT((struct Nuitka_CellObject *)t, 1);
|
|
942
1103
|
Py_INCREF(value);
|
|
943
1104
|
|
|
944
1105
|
t += sizeof(struct Nuitka_CellObject *);
|
|
@@ -958,7 +1119,19 @@ void Nuitka_Frame_AttachLocals(struct Nuitka_FrameObject *frame_object, char con
|
|
|
958
1119
|
|
|
959
1120
|
break;
|
|
960
1121
|
}
|
|
1122
|
+
case NUITKA_TYPE_DESCRIPTION_NILONG: {
|
|
1123
|
+
nuitka_ilong value = va_arg(ap, nuitka_ilong);
|
|
1124
|
+
ENFORCE_NILONG_OBJECT_VALUE(&value);
|
|
1125
|
+
|
|
1126
|
+
CHECK_OBJECT(value.python_value);
|
|
1127
|
+
memcpy(t, &value.python_value, sizeof(PyObject *));
|
|
1128
|
+
Py_XINCREF(value.python_value);
|
|
1129
|
+
t += sizeof(PyObject *);
|
|
1130
|
+
|
|
1131
|
+
break;
|
|
1132
|
+
}
|
|
961
1133
|
default:
|
|
1134
|
+
NUITKA_CANNOT_GET_HERE("invalid type description");
|
|
962
1135
|
assert(false);
|
|
963
1136
|
}
|
|
964
1137
|
|
|
@@ -975,10 +1148,8 @@ void Nuitka_Frame_AttachLocals(struct Nuitka_FrameObject *frame_object, char con
|
|
|
975
1148
|
void dumpFrameStack(void) {
|
|
976
1149
|
PyThreadState *tstate = PyThreadState_GET();
|
|
977
1150
|
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
FETCH_ERROR_OCCURRED(&saved_exception_type, &saved_exception_value, &saved_exception_tb);
|
|
1151
|
+
struct Nuitka_ExceptionPreservationItem saved_exception_state;
|
|
1152
|
+
FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
982
1153
|
|
|
983
1154
|
int total = 0;
|
|
984
1155
|
|
|
@@ -1014,7 +1185,7 @@ void dumpFrameStack(void) {
|
|
|
1014
1185
|
current_repr = const_str_empty;
|
|
1015
1186
|
Py_INCREF(const_str_empty);
|
|
1016
1187
|
}
|
|
1017
|
-
PyObject *code_repr = PyObject_Str((PyObject *)current->current_frame
|
|
1188
|
+
PyObject *code_repr = PyObject_Str((PyObject *)Nuitka_InterpreterFrame_GetCodeObject(current->current_frame));
|
|
1018
1189
|
#endif
|
|
1019
1190
|
|
|
1020
1191
|
PRINT_FORMAT("Frame stack %d: %s %d %s\n", total--, Nuitka_String_AsString(current_repr), Py_REFCNT(current),
|
|
@@ -1032,7 +1203,7 @@ void dumpFrameStack(void) {
|
|
|
1032
1203
|
|
|
1033
1204
|
PRINT_STRING(">---------<\n");
|
|
1034
1205
|
|
|
1035
|
-
|
|
1206
|
+
RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
|
|
1036
1207
|
}
|
|
1037
1208
|
|
|
1038
1209
|
static void PRINT_UNCOMPILED_FRAME(char const *prefix, PyFrameObject *frame) {
|
|
@@ -1070,7 +1241,7 @@ void PRINT_INTERPRETER_FRAME(char const *prefix, Nuitka_ThreadStateFrameType *fr
|
|
|
1070
1241
|
if (frame) {
|
|
1071
1242
|
PRINT_FORMAT("0x%lx ", frame);
|
|
1072
1243
|
|
|
1073
|
-
PyObject *code_object_str = PyObject_Repr((PyObject *)frame
|
|
1244
|
+
PyObject *code_object_str = PyObject_Repr((PyObject *)Nuitka_InterpreterFrame_GetCodeObject(frame));
|
|
1074
1245
|
PRINT_ITEM(code_object_str);
|
|
1075
1246
|
Py_DECREF(code_object_str);
|
|
1076
1247
|
} else {
|
|
@@ -1087,8 +1258,22 @@ void PRINT_TOP_FRAME(char const *prefix) {
|
|
|
1087
1258
|
#if PYTHON_VERSION < 0x3b0
|
|
1088
1259
|
PRINT_UNCOMPILED_FRAME(prefix, tstate->frame);
|
|
1089
1260
|
#else
|
|
1090
|
-
PRINT_INTERPRETER_FRAME(prefix, tstate
|
|
1261
|
+
PRINT_INTERPRETER_FRAME(prefix, CURRENT_TSTATE_INTERPRETER_FRAME(tstate));
|
|
1091
1262
|
#endif
|
|
1092
1263
|
}
|
|
1093
1264
|
|
|
1094
|
-
#endif
|
|
1265
|
+
#endif
|
|
1266
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1267
|
+
// integrates with CPython, but also works on its own.
|
|
1268
|
+
//
|
|
1269
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1270
|
+
// you may not use this file except in compliance with the License.
|
|
1271
|
+
// You may obtain a copy of the License at
|
|
1272
|
+
//
|
|
1273
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1274
|
+
//
|
|
1275
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1276
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1277
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1278
|
+
// See the License for the specific language governing permissions and
|
|
1279
|
+
// limitations under the License.
|