Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Nuitka-winsvc might be problematic. Click here for more details.
- Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
- Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
- Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
- nuitka/Builtins.py +49 -17
- nuitka/BytecodeCaching.py +24 -20
- nuitka/Bytecodes.py +23 -19
- nuitka/CacheCleanup.py +28 -23
- nuitka/Constants.py +19 -17
- nuitka/Errors.py +23 -17
- nuitka/HardImportRegistry.py +408 -0
- nuitka/MainControl.py +209 -116
- nuitka/ModuleRegistry.py +83 -20
- nuitka/OptionParsing.py +467 -221
- nuitka/Options.py +701 -225
- nuitka/OutputDirectories.py +47 -23
- nuitka/PostProcessing.py +133 -79
- nuitka/Progress.py +73 -24
- nuitka/PythonFlavors.py +141 -32
- nuitka/PythonOperators.py +18 -17
- nuitka/PythonVersions.py +107 -19
- nuitka/Serialization.py +70 -55
- nuitka/SourceCodeReferences.py +19 -17
- nuitka/Tracing.py +176 -70
- nuitka/TreeXML.py +31 -26
- nuitka/Variables.py +39 -41
- nuitka/Version.py +22 -8
- nuitka/__init__.py +5 -4
- nuitka/__main__.py +95 -29
- nuitka/__past__.py +44 -34
- nuitka/build/Backend.scons +243 -141
- nuitka/build/CCompilerVersion.scons +45 -31
- nuitka/build/DataComposerInterface.py +20 -17
- nuitka/build/Onefile.scons +56 -54
- nuitka/build/SconsCaching.py +105 -92
- nuitka/build/SconsCompilerSettings.py +167 -68
- nuitka/build/SconsHacks.py +25 -19
- nuitka/build/SconsInterface.py +155 -54
- nuitka/build/SconsProgress.py +19 -18
- nuitka/build/SconsSpawn.py +62 -33
- nuitka/build/SconsUtils.py +152 -55
- nuitka/build/__init__.py +5 -4
- nuitka/build/include/nuitka/allocator.h +228 -22
- nuitka/build/include/nuitka/builtins.h +17 -17
- nuitka/build/include/nuitka/calling.h +24 -24
- nuitka/build/include/nuitka/checkers.h +17 -18
- nuitka/build/include/nuitka/checksum_tools.h +14 -19
- nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
- nuitka/build/include/nuitka/compiled_cell.h +33 -18
- nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
- nuitka/build/include/nuitka/compiled_frame.h +93 -54
- nuitka/build/include/nuitka/compiled_function.h +42 -20
- nuitka/build/include/nuitka/compiled_generator.h +24 -18
- nuitka/build/include/nuitka/compiled_method.h +17 -18
- nuitka/build/include/nuitka/constants.h +35 -18
- nuitka/build/include/nuitka/constants_blob.h +17 -17
- nuitka/build/include/nuitka/debug_settings.h +60 -0
- nuitka/build/include/nuitka/environment_variables.h +30 -0
- nuitka/build/include/nuitka/environment_variables_system.h +45 -0
- nuitka/build/include/nuitka/exception_groups.h +23 -26
- nuitka/build/include/nuitka/exceptions.h +717 -171
- nuitka/build/include/nuitka/filesystem_paths.h +26 -20
- nuitka/build/include/nuitka/freelists.h +38 -18
- nuitka/build/include/nuitka/helper/attributes.h +24 -22
- nuitka/build/include/nuitka/helper/boolean.h +17 -17
- nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
- nuitka/build/include/nuitka/helper/bytes.h +14 -15
- nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
- nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
- nuitka/build/include/nuitka/helper/complex.h +17 -17
- nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
- nuitka/build/include/nuitka/helper/floats.h +17 -18
- nuitka/build/include/nuitka/helper/import_hard.h +25 -17
- nuitka/build/include/nuitka/helper/indexes.h +17 -18
- nuitka/build/include/nuitka/helper/ints.h +115 -54
- nuitka/build/include/nuitka/helper/iterators.h +99 -51
- nuitka/build/include/nuitka/helper/lists.h +26 -24
- nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
- nuitka/build/include/nuitka/helper/mappings.h +17 -18
- nuitka/build/include/nuitka/helper/operations.h +20 -17
- nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
- nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
- nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/raising.h +68 -37
- nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
- nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
- nuitka/build/include/nuitka/helper/sequences.h +19 -13
- nuitka/build/include/nuitka/helper/sets.h +11 -12
- nuitka/build/include/nuitka/helper/slices.h +31 -25
- nuitka/build/include/nuitka/helper/strings.h +16 -17
- nuitka/build/include/nuitka/helper/subscripts.h +18 -201
- nuitka/build/include/nuitka/helper/tuples.h +64 -52
- nuitka/build/include/nuitka/helpers.h +50 -22
- nuitka/build/include/nuitka/importing.h +28 -21
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +163 -71
- nuitka/build/include/nuitka/printing.h +29 -22
- nuitka/build/include/nuitka/python_pgo.h +19 -18
- nuitka/build/include/nuitka/safe_string_ops.h +20 -18
- nuitka/build/include/nuitka/threading.h +45 -32
- nuitka/build/include/nuitka/tracing.h +28 -18
- nuitka/build/include/nuitka/type_aliases.h +30 -0
- nuitka/build/include/nuitka/unfreezing.h +29 -23
- nuitka/build/inline_copy/bin/scons.py +14 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
- nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
- nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
- nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
- nuitka/build/inline_copy/stubgen/six.py +998 -0
- nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
- nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
- nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
- nuitka/build/inline_copy/zlib/LICENSE +22 -0
- nuitka/build/inline_copy/zlib/crc32.c +1049 -0
- nuitka/build/inline_copy/zlib/crc32.h +9446 -0
- nuitka/build/inline_copy/zlib/zconf.h +551 -0
- nuitka/build/inline_copy/zlib/zlib.h +1938 -0
- nuitka/build/inline_copy/zlib/zutil.h +275 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
- nuitka/build/static_src/CompiledCellType.c +69 -44
- nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
- nuitka/build/static_src/CompiledCoroutineType.c +229 -226
- nuitka/build/static_src/CompiledFrameType.c +323 -138
- nuitka/build/static_src/CompiledFunctionType.c +547 -231
- nuitka/build/static_src/CompiledGeneratorType.c +416 -290
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
- nuitka/build/static_src/CompiledMethodType.c +91 -82
- nuitka/build/static_src/HelpersAllocator.c +352 -45
- nuitka/build/static_src/HelpersAttributes.c +30 -72
- nuitka/build/static_src/HelpersBuiltin.c +65 -46
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
- nuitka/build/static_src/HelpersBytes.c +19 -20
- nuitka/build/static_src/HelpersCalling.c +40 -37
- nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
- nuitka/build/static_src/HelpersChecksumTools.c +35 -21
- nuitka/build/static_src/HelpersClasses.c +17 -17
- nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
- nuitka/build/static_src/HelpersComparisonEq.c +536 -496
- nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
- nuitka/build/static_src/HelpersComparisonGe.c +531 -501
- nuitka/build/static_src/HelpersComparisonGt.c +530 -500
- nuitka/build/static_src/HelpersComparisonLe.c +531 -501
- nuitka/build/static_src/HelpersComparisonLt.c +530 -500
- nuitka/build/static_src/HelpersComparisonNe.c +538 -496
- nuitka/build/static_src/HelpersConsole.c +122 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
- nuitka/build/static_src/HelpersDeepcopy.c +33 -33
- nuitka/build/static_src/HelpersDictionaries.c +232 -63
- nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
- nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
- nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
- nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
- nuitka/build/static_src/HelpersExceptions.c +147 -62
- nuitka/build/static_src/HelpersFiles.c +116 -22
- nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
- nuitka/build/static_src/HelpersFloats.c +37 -31
- nuitka/build/static_src/HelpersHeapStorage.c +21 -17
- nuitka/build/static_src/HelpersImport.c +61 -29
- nuitka/build/static_src/HelpersImportHard.c +74 -61
- nuitka/build/static_src/HelpersJitSources.c +46 -0
- nuitka/build/static_src/HelpersLists.c +237 -58
- nuitka/build/static_src/HelpersListsGenerated.c +41 -41
- nuitka/build/static_src/HelpersMappings.c +17 -17
- nuitka/build/static_src/HelpersMatching.c +137 -51
- nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
- nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
- nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
- nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
- nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
- nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
- nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
- nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
- nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
- nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
- nuitka/build/static_src/HelpersProfiling.c +25 -24
- nuitka/build/static_src/HelpersPythonPgo.c +22 -22
- nuitka/build/static_src/HelpersRaising.c +296 -283
- nuitka/build/static_src/HelpersSafeStrings.c +34 -22
- nuitka/build/static_src/HelpersSequences.c +18 -19
- nuitka/build/static_src/HelpersSlices.c +29 -23
- nuitka/build/static_src/HelpersStrings.c +235 -38
- nuitka/build/static_src/HelpersTuples.c +46 -34
- nuitka/build/static_src/HelpersTypes.c +166 -25
- nuitka/build/static_src/InspectPatcher.c +108 -27
- nuitka/build/static_src/MainProgram.c +464 -280
- nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
- nuitka/build/static_src/OnefileBootstrap.c +281 -164
- nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
- nuitka/code_generation/AsyncgenCodes.py +21 -23
- nuitka/code_generation/AttributeCodes.py +31 -27
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
- nuitka/code_generation/BranchCodes.py +19 -17
- nuitka/code_generation/BuiltinCodes.py +29 -18
- nuitka/code_generation/CallCodes.py +35 -33
- nuitka/code_generation/ClassCodes.py +19 -17
- nuitka/code_generation/CodeGeneration.py +61 -28
- nuitka/code_generation/CodeHelperSelection.py +20 -18
- nuitka/code_generation/CodeHelpers.py +28 -21
- nuitka/code_generation/CodeObjectCodes.py +36 -26
- nuitka/code_generation/ComparisonCodes.py +51 -22
- nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
- nuitka/code_generation/ConditionalCodes.py +19 -17
- nuitka/code_generation/ConstantCodes.py +82 -28
- nuitka/code_generation/Contexts.py +180 -42
- nuitka/code_generation/CoroutineCodes.py +21 -23
- nuitka/code_generation/CtypesCodes.py +19 -17
- nuitka/code_generation/DictCodes.py +28 -26
- nuitka/code_generation/Emission.py +21 -18
- nuitka/code_generation/ErrorCodes.py +57 -79
- nuitka/code_generation/EvalCodes.py +24 -20
- nuitka/code_generation/ExceptionCodes.py +182 -104
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
- nuitka/code_generation/ExpressionCodes.py +19 -17
- nuitka/code_generation/FrameCodes.py +28 -31
- nuitka/code_generation/FunctionCodes.py +26 -27
- nuitka/code_generation/GeneratorCodes.py +25 -26
- nuitka/code_generation/GlobalConstants.py +51 -25
- nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
- nuitka/code_generation/IdCodes.py +19 -17
- nuitka/code_generation/ImportCodes.py +90 -50
- nuitka/code_generation/Indentation.py +23 -22
- nuitka/code_generation/IndexCodes.py +19 -17
- nuitka/code_generation/InjectCCodes.py +14 -12
- nuitka/code_generation/IntegerCodes.py +19 -17
- nuitka/code_generation/IteratorCodes.py +86 -71
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +19 -17
- nuitka/code_generation/LineNumberCodes.py +20 -20
- nuitka/code_generation/ListCodes.py +32 -36
- nuitka/code_generation/LoaderCodes.py +22 -17
- nuitka/code_generation/LocalsDictCodes.py +56 -32
- nuitka/code_generation/LoopCodes.py +19 -17
- nuitka/code_generation/MatchCodes.py +42 -22
- nuitka/code_generation/ModuleCodes.py +71 -29
- nuitka/code_generation/Namify.py +27 -23
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +80 -51
- nuitka/code_generation/PackageResourceCodes.py +96 -23
- nuitka/code_generation/PrintCodes.py +19 -17
- nuitka/code_generation/PythonAPICodes.py +19 -17
- nuitka/code_generation/RaisingCodes.py +183 -107
- nuitka/code_generation/Reports.py +32 -22
- nuitka/code_generation/ReturnCodes.py +20 -32
- nuitka/code_generation/SetCodes.py +19 -17
- nuitka/code_generation/SliceCodes.py +22 -20
- nuitka/code_generation/StringCodes.py +19 -17
- nuitka/code_generation/SubscriptCodes.py +24 -30
- nuitka/code_generation/TensorflowCodes.py +54 -0
- nuitka/code_generation/TryCodes.py +31 -41
- nuitka/code_generation/TupleCodes.py +20 -18
- nuitka/code_generation/TypeAliasCodes.py +119 -0
- nuitka/code_generation/VariableCodes.py +118 -55
- nuitka/code_generation/VariableDeclarations.py +28 -25
- nuitka/code_generation/YieldCodes.py +23 -21
- nuitka/code_generation/__init__.py +5 -4
- nuitka/code_generation/c_types/CTypeBases.py +29 -19
- nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
- nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
- nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
- nuitka/code_generation/c_types/CTypeVoids.py +20 -17
- nuitka/code_generation/c_types/__init__.py +5 -4
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
- nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
- nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
- nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
- nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
- nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
- nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
- nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
- nuitka/code_generation/templates/__init__.py +5 -4
- nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
- nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
- nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
- nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
- nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
- nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
- nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
- nuitka/containers/Namedtuples.py +25 -18
- nuitka/containers/OrderedSets.py +105 -5
- nuitka/containers/OrderedSetsFallback.py +19 -17
- nuitka/containers/__init__.py +5 -4
- nuitka/distutils/Build.py +33 -18
- nuitka/distutils/DistutilCommands.py +84 -33
- nuitka/distutils/__init__.py +5 -4
- nuitka/finalizations/Finalization.py +21 -18
- nuitka/finalizations/FinalizeMarkups.py +31 -55
- nuitka/finalizations/__init__.py +5 -4
- nuitka/freezer/DependsExe.py +60 -30
- nuitka/freezer/DllDependenciesCommon.py +47 -20
- nuitka/freezer/DllDependenciesMacOS.py +165 -58
- nuitka/freezer/DllDependenciesPosix.py +29 -19
- nuitka/freezer/DllDependenciesWin32.py +55 -33
- nuitka/freezer/ImportDetection.py +23 -17
- nuitka/freezer/IncludedDataFiles.py +142 -48
- nuitka/freezer/IncludedEntryPoints.py +104 -39
- nuitka/freezer/Onefile.py +32 -22
- nuitka/freezer/Standalone.py +166 -53
- nuitka/freezer/__init__.py +5 -4
- nuitka/importing/IgnoreListing.py +19 -17
- nuitka/importing/ImportCache.py +24 -21
- nuitka/importing/ImportResolving.py +103 -95
- nuitka/importing/Importing.py +319 -98
- nuitka/importing/PreloadedPackages.py +21 -18
- nuitka/importing/Recursion.py +142 -47
- nuitka/importing/StandardLibrary.py +96 -80
- nuitka/importing/__init__.py +5 -4
- nuitka/nodes/AsyncgenNodes.py +22 -23
- nuitka/nodes/AttributeLookupNodes.py +19 -17
- nuitka/nodes/AttributeNodes.py +19 -17
- nuitka/nodes/AttributeNodesGenerated.py +49 -24
- nuitka/nodes/BuiltinAllNodes.py +19 -17
- nuitka/nodes/BuiltinAnyNodes.py +19 -17
- nuitka/nodes/BuiltinComplexNodes.py +20 -17
- nuitka/nodes/BuiltinDecodingNodes.py +19 -17
- nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
- nuitka/nodes/BuiltinDictNodes.py +19 -17
- nuitka/nodes/BuiltinFormatNodes.py +20 -17
- nuitka/nodes/BuiltinHashNodes.py +19 -17
- nuitka/nodes/BuiltinInputNodes.py +19 -17
- nuitka/nodes/BuiltinIntegerNodes.py +19 -17
- nuitka/nodes/BuiltinIteratorNodes.py +25 -21
- nuitka/nodes/BuiltinLenNodes.py +19 -17
- nuitka/nodes/BuiltinNextNodes.py +19 -17
- nuitka/nodes/BuiltinOpenNodes.py +52 -18
- nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
- nuitka/nodes/BuiltinRangeNodes.py +21 -19
- nuitka/nodes/BuiltinRefNodes.py +73 -40
- nuitka/nodes/BuiltinSumNodes.py +20 -18
- nuitka/nodes/BuiltinTypeNodes.py +19 -17
- nuitka/nodes/BuiltinVarsNodes.py +19 -18
- nuitka/nodes/BytesNodes.py +19 -17
- nuitka/nodes/CallNodes.py +19 -17
- nuitka/nodes/Checkers.py +19 -17
- nuitka/nodes/ChildrenHavingMixins.py +1624 -283
- nuitka/nodes/ClassNodes.py +49 -29
- nuitka/nodes/CodeObjectSpecs.py +29 -18
- nuitka/nodes/ComparisonNodes.py +19 -17
- nuitka/nodes/ConditionalNodes.py +24 -25
- nuitka/nodes/ConstantRefNodes.py +57 -17
- nuitka/nodes/ContainerMakingNodes.py +19 -17
- nuitka/nodes/ContainerOperationNodes.py +19 -17
- nuitka/nodes/CoroutineNodes.py +22 -23
- nuitka/nodes/CtypesNodes.py +19 -18
- nuitka/nodes/DictionaryNodes.py +19 -18
- nuitka/nodes/ExceptionNodes.py +131 -43
- nuitka/nodes/ExecEvalNodes.py +19 -17
- nuitka/nodes/ExpressionBases.py +34 -26
- nuitka/nodes/ExpressionBasesGenerated.py +341 -35
- nuitka/nodes/ExpressionShapeMixins.py +19 -17
- nuitka/nodes/FrameNodes.py +41 -28
- nuitka/nodes/FunctionAttributeNodes.py +19 -17
- nuitka/nodes/FunctionNodes.py +84 -38
- nuitka/nodes/FutureSpecs.py +35 -20
- nuitka/nodes/GeneratorNodes.py +24 -25
- nuitka/nodes/GlobalsLocalsNodes.py +22 -17
- nuitka/nodes/HardImportNodesGenerated.py +746 -148
- nuitka/nodes/ImportHardNodes.py +46 -38
- nuitka/nodes/ImportNodes.py +438 -448
- nuitka/nodes/IndicatorMixins.py +19 -17
- nuitka/nodes/InjectCNodes.py +19 -18
- nuitka/nodes/IterationHandles.py +55 -34
- nuitka/nodes/KeyValuePairNodes.py +19 -17
- nuitka/nodes/ListOperationNodes.py +33 -21
- nuitka/nodes/LocalsDictNodes.py +19 -17
- nuitka/nodes/LocalsScopes.py +41 -41
- nuitka/nodes/LoopNodes.py +28 -17
- nuitka/nodes/MatchNodes.py +37 -24
- nuitka/nodes/ModuleAttributeNodes.py +18 -35
- nuitka/nodes/ModuleNodes.py +90 -31
- nuitka/nodes/NetworkxNodes.py +45 -0
- nuitka/nodes/NodeBases.py +73 -44
- nuitka/nodes/NodeMakingHelpers.py +92 -69
- nuitka/nodes/NodeMetaClasses.py +45 -28
- nuitka/nodes/OperatorNodes.py +28 -26
- nuitka/nodes/OperatorNodesUnary.py +148 -20
- nuitka/nodes/OsSysNodes.py +97 -18
- nuitka/nodes/OutlineNodes.py +24 -22
- nuitka/nodes/PackageMetadataNodes.py +37 -27
- nuitka/nodes/PackageResourceNodes.py +29 -23
- nuitka/nodes/PrintNodes.py +19 -17
- nuitka/nodes/ReturnNodes.py +20 -18
- nuitka/nodes/SideEffectNodes.py +19 -17
- nuitka/nodes/SliceNodes.py +20 -18
- nuitka/nodes/StatementBasesGenerated.py +125 -79
- nuitka/nodes/StatementNodes.py +27 -24
- nuitka/nodes/StrNodes.py +19 -17
- nuitka/nodes/StringConcatenationNodes.py +20 -17
- nuitka/nodes/SubscriptNodes.py +27 -25
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +19 -17
- nuitka/nodes/TypeMatchNodes.py +19 -17
- nuitka/nodes/TypeNodes.py +68 -18
- nuitka/nodes/VariableAssignNodes.py +122 -64
- nuitka/nodes/VariableDelNodes.py +19 -17
- nuitka/nodes/VariableNameNodes.py +19 -17
- nuitka/nodes/VariableRefNodes.py +63 -26
- nuitka/nodes/VariableReleaseNodes.py +19 -17
- nuitka/nodes/YieldNodes.py +21 -19
- nuitka/nodes/__init__.py +5 -4
- nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
- nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
- nuitka/nodes/shapes/ShapeMixins.py +57 -17
- nuitka/nodes/shapes/StandardShapes.py +80 -21
- nuitka/nodes/shapes/__init__.py +5 -4
- nuitka/optimizations/BytecodeDemotion.py +21 -18
- nuitka/optimizations/FunctionInlining.py +22 -23
- nuitka/optimizations/Graphs.py +19 -17
- nuitka/optimizations/Optimization.py +39 -35
- nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
- nuitka/optimizations/Tags.py +19 -18
- nuitka/optimizations/TraceCollections.py +67 -24
- nuitka/optimizations/ValueTraces.py +92 -25
- nuitka/optimizations/__init__.py +5 -4
- nuitka/pgo/PGO.py +33 -23
- nuitka/pgo/__init__.py +5 -4
- nuitka/plugins/PluginBase.py +655 -112
- nuitka/plugins/Plugins.py +247 -61
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +5 -4
- nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
- nuitka/plugins/standard/DataFilesPlugin.py +65 -29
- nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
- nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
- nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
- nuitka/plugins/standard/DillPlugin.py +42 -134
- nuitka/plugins/standard/DllFilesPlugin.py +125 -42
- nuitka/plugins/standard/EnumPlugin.py +19 -17
- nuitka/plugins/standard/EventletPlugin.py +19 -17
- nuitka/plugins/standard/GeventPlugin.py +19 -17
- nuitka/plugins/standard/GiPlugin.py +44 -28
- nuitka/plugins/standard/GlfwPlugin.py +20 -17
- nuitka/plugins/standard/ImplicitImports.py +403 -54
- nuitka/plugins/standard/KivyPlugin.py +24 -20
- nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
- nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
- nuitka/plugins/standard/NumpyPlugin.py +19 -17
- nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
- nuitka/plugins/standard/PbrPlugin.py +21 -19
- nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
- nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
- nuitka/plugins/standard/PmwPlugin.py +30 -27
- nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
- nuitka/plugins/standard/PywebViewPlugin.py +19 -17
- nuitka/plugins/standard/SpacyPlugin.py +136 -0
- nuitka/plugins/standard/TensorflowPlugin.py +20 -17
- nuitka/plugins/standard/TkinterPlugin.py +102 -108
- nuitka/plugins/standard/TorchPlugin.py +20 -17
- nuitka/plugins/standard/TransformersPlugin.py +90 -231
- nuitka/plugins/standard/TrioPlugin.py +18 -15
- nuitka/plugins/standard/UpxPlugin.py +21 -19
- nuitka/plugins/standard/__init__.py +5 -4
- nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
- nuitka/reports/CompilationReportReader.py +79 -0
- nuitka/reports/LicenseReport.rst.j2 +21 -21
- nuitka/reports/Reports.py +363 -76
- nuitka/reports/__init__.py +5 -4
- nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
- nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
- nuitka/specs/BuiltinListOperationSpecs.py +18 -17
- nuitka/specs/BuiltinParameterSpecs.py +35 -21
- nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
- nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
- nuitka/specs/HardImportSpecs.py +74 -22
- nuitka/specs/ParameterSpecs.py +60 -45
- nuitka/specs/__init__.py +5 -4
- nuitka/tools/Basics.py +20 -18
- nuitka/tools/__init__.py +5 -4
- nuitka/tools/commercial/__init__.py +7 -6
- nuitka/tools/data_composer/DataComposer.py +78 -62
- nuitka/tools/data_composer/__init__.py +5 -4
- nuitka/tools/data_composer/__main__.py +18 -17
- nuitka/tools/environments/CreateEnvironment.py +20 -17
- nuitka/tools/environments/Virtualenv.py +60 -32
- nuitka/tools/environments/__init__.py +5 -4
- nuitka/tools/general/__init__.py +5 -4
- nuitka/tools/general/dll_report/__init__.py +5 -4
- nuitka/tools/general/dll_report/__main__.py +29 -22
- nuitka/tools/general/find_module/FindModuleCode.py +35 -22
- nuitka/tools/general/find_module/__init__.py +5 -4
- nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
- nuitka/tools/onefile_compressor/__init__.py +5 -4
- nuitka/tools/onefile_compressor/__main__.py +18 -17
- nuitka/tools/podman/Podman.py +19 -17
- nuitka/tools/podman/__init__.py +5 -4
- nuitka/tools/podman/__main__.py +35 -19
- nuitka/tools/profiler/__init__.py +5 -4
- nuitka/tools/profiler/__main__.py +18 -17
- nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
- nuitka/tools/scanning/DisplayPackageData.py +31 -19
- nuitka/tools/scanning/__init__.py +5 -4
- nuitka/tools/specialize/CTypeDescriptions.py +251 -80
- nuitka/tools/specialize/Common.py +18 -17
- nuitka/tools/specialize/SpecializeC.py +248 -82
- nuitka/tools/specialize/SpecializePython.py +108 -45
- nuitka/tools/specialize/__init__.py +5 -4
- nuitka/tools/testing/Common.py +175 -114
- nuitka/tools/testing/Constructs.py +19 -17
- nuitka/tools/testing/OutputComparison.py +54 -18
- nuitka/tools/testing/Pythons.py +19 -18
- nuitka/tools/testing/RuntimeTracing.py +20 -19
- nuitka/tools/testing/SearchModes.py +26 -20
- nuitka/tools/testing/Valgrind.py +19 -17
- nuitka/tools/testing/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
- nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
- nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
- nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
- nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
- nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
- nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
- nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
- nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
- nuitka/tools/watch/AutoStage.py +145 -0
- nuitka/tools/watch/GitHub.py +113 -0
- nuitka/tools/watch/__init__.py +5 -4
- nuitka/tools/watch/__main__.py +322 -91
- nuitka/tree/Building.py +184 -182
- nuitka/tree/ComplexCallHelperFunctions.py +84 -58
- nuitka/tree/Extractions.py +19 -17
- nuitka/tree/InternalModule.py +29 -20
- nuitka/tree/Operations.py +19 -17
- nuitka/tree/ReformulationAssertStatements.py +51 -31
- nuitka/tree/ReformulationAssignmentStatements.py +96 -91
- nuitka/tree/ReformulationBooleanExpressions.py +19 -17
- nuitka/tree/ReformulationCallExpressions.py +20 -18
- nuitka/tree/ReformulationClasses.py +45 -39
- nuitka/tree/ReformulationClasses3.py +239 -116
- nuitka/tree/ReformulationComparisonExpressions.py +29 -35
- nuitka/tree/ReformulationContractionExpressions.py +58 -55
- nuitka/tree/ReformulationDictionaryCreation.py +41 -35
- nuitka/tree/ReformulationExecStatements.py +42 -39
- nuitka/tree/ReformulationForLoopStatements.py +30 -34
- nuitka/tree/ReformulationFunctionStatements.py +59 -55
- nuitka/tree/ReformulationImportStatements.py +34 -29
- nuitka/tree/ReformulationLambdaExpressions.py +23 -24
- nuitka/tree/ReformulationMatchStatements.py +246 -92
- nuitka/tree/ReformulationMultidist.py +22 -18
- nuitka/tree/ReformulationNamespacePackages.py +55 -46
- nuitka/tree/ReformulationPrintStatements.py +23 -24
- nuitka/tree/ReformulationSequenceCreation.py +50 -49
- nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
- nuitka/tree/ReformulationTryExceptStatements.py +19 -17
- nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
- nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
- nuitka/tree/ReformulationWithStatements.py +39 -41
- nuitka/tree/ReformulationYieldExpressions.py +44 -24
- nuitka/tree/SourceHandling.py +76 -31
- nuitka/tree/SyntaxErrors.py +19 -17
- nuitka/tree/TreeHelpers.py +33 -20
- nuitka/tree/VariableClosure.py +35 -39
- nuitka/tree/__init__.py +5 -4
- nuitka/utils/AppDirs.py +41 -20
- nuitka/utils/CStrings.py +66 -21
- nuitka/utils/CommandLineOptions.py +111 -22
- nuitka/utils/Distributions.py +445 -54
- nuitka/utils/Download.py +89 -57
- nuitka/utils/Execution.py +102 -58
- nuitka/utils/FileOperations.py +357 -128
- nuitka/utils/Hashing.py +55 -33
- nuitka/utils/Images.py +26 -19
- nuitka/utils/Importing.py +119 -37
- nuitka/utils/InlineCopies.py +52 -0
- nuitka/utils/InstalledPythons.py +85 -75
- nuitka/utils/InstanceCounters.py +20 -17
- nuitka/utils/Jinja2.py +30 -22
- nuitka/utils/Json.py +21 -19
- nuitka/utils/MacOSApp.py +26 -18
- nuitka/utils/MemoryUsage.py +20 -18
- nuitka/utils/ModuleNames.py +42 -26
- nuitka/utils/PackageResources.py +44 -0
- nuitka/utils/ReExecute.py +50 -28
- nuitka/utils/Rest.py +20 -17
- nuitka/utils/SharedLibraries.py +161 -75
- nuitka/utils/Shebang.py +20 -17
- nuitka/utils/Signing.py +63 -18
- nuitka/utils/SlotMetaClasses.py +57 -0
- nuitka/utils/StaticLibraries.py +83 -56
- nuitka/utils/ThreadedExecutor.py +18 -17
- nuitka/utils/Timing.py +22 -20
- nuitka/utils/Utils.py +132 -25
- nuitka/utils/WindowsFileUsage.py +22 -20
- nuitka/utils/WindowsResources.py +25 -18
- nuitka/utils/Yaml.py +62 -24
- nuitka/utils/__init__.py +5 -4
- Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
- nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
// Copyright
|
|
2
|
-
|
|
3
|
-
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
4
|
-
// integrates with CPython, but also works on its own.
|
|
5
|
-
//
|
|
6
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
// you may not use this file except in compliance with the License.
|
|
8
|
-
// You may obtain a copy of the License at
|
|
9
|
-
//
|
|
10
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
//
|
|
12
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
// See the License for the specific language governing permissions and
|
|
16
|
-
// limitations under the License.
|
|
17
|
-
//
|
|
1
|
+
// Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
18
3
|
/** Providing access to the constants binary blob.
|
|
19
4
|
*
|
|
20
5
|
* There are multiple ways, the constants binary is accessed, and its
|
|
@@ -128,7 +113,7 @@ static PyObject *our_list_richcompare(PyListObject *list1, PyListObject *list2,
|
|
|
128
113
|
result = Py_False;
|
|
129
114
|
}
|
|
130
115
|
|
|
131
|
-
|
|
116
|
+
Py_INCREF_IMMORTAL(result);
|
|
132
117
|
return result;
|
|
133
118
|
}
|
|
134
119
|
|
|
@@ -151,7 +136,7 @@ static PyObject *our_tuple_richcompare(PyTupleObject *tuple1, PyTupleObject *tup
|
|
|
151
136
|
result = Py_False;
|
|
152
137
|
}
|
|
153
138
|
|
|
154
|
-
|
|
139
|
+
Py_INCREF_IMMORTAL(result);
|
|
155
140
|
return result;
|
|
156
141
|
}
|
|
157
142
|
|
|
@@ -196,8 +181,10 @@ static PyObject *our_set_richcompare(PyObject *set1, PyObject *set2, int op) {
|
|
|
196
181
|
// Same sized set, simply check if values are identical. Other reductions should
|
|
197
182
|
// make it identical, or else this won't have the effect intended.
|
|
198
183
|
while (_PySet_Next(set1, &pos1, &key1)) {
|
|
199
|
-
|
|
200
|
-
|
|
184
|
+
{
|
|
185
|
+
NUITKA_MAY_BE_UNUSED int res = _PySet_Next(set2, &pos2, &key2);
|
|
186
|
+
assert(res != 0);
|
|
187
|
+
}
|
|
201
188
|
|
|
202
189
|
if (key1 != key2) {
|
|
203
190
|
result = Py_False;
|
|
@@ -210,8 +197,10 @@ static PyObject *our_set_richcompare(PyObject *set1, PyObject *set2, int op) {
|
|
|
210
197
|
// Same sized dictionary, simply check if values are identical. Other reductions should
|
|
211
198
|
// make it identical, or else this won't have the effect intended.
|
|
212
199
|
while (_PySet_NextEntry(set1, &pos1, &key1, &unused1)) {
|
|
213
|
-
|
|
214
|
-
|
|
200
|
+
{
|
|
201
|
+
NUITKA_MAY_BE_UNUSED int res = _PySet_NextEntry(set2, &pos2, &key2, &unused2);
|
|
202
|
+
assert(res != 0);
|
|
203
|
+
}
|
|
215
204
|
|
|
216
205
|
if (key1 != key2) {
|
|
217
206
|
result = Py_False;
|
|
@@ -221,7 +210,7 @@ static PyObject *our_set_richcompare(PyObject *set1, PyObject *set2, int op) {
|
|
|
221
210
|
#endif
|
|
222
211
|
}
|
|
223
212
|
|
|
224
|
-
|
|
213
|
+
Py_INCREF_IMMORTAL(result);
|
|
225
214
|
return result;
|
|
226
215
|
}
|
|
227
216
|
|
|
@@ -237,7 +226,7 @@ static PyObject *our_float_richcompare(PyFloatObject *a, PyFloatObject *b, int o
|
|
|
237
226
|
result = Py_False;
|
|
238
227
|
}
|
|
239
228
|
|
|
240
|
-
|
|
229
|
+
Py_INCREF_IMMORTAL(result);
|
|
241
230
|
return result;
|
|
242
231
|
}
|
|
243
232
|
|
|
@@ -273,8 +262,10 @@ static PyObject *our_dict_richcompare(PyObject *a, PyObject *b, int op) {
|
|
|
273
262
|
// Other reductions should make it identical, or else this won't have the
|
|
274
263
|
// effect intended.
|
|
275
264
|
while (Nuitka_DictNext(a, &pos1, &key1, &value1)) {
|
|
276
|
-
|
|
277
|
-
|
|
265
|
+
{
|
|
266
|
+
NUITKA_MAY_BE_UNUSED int res = Nuitka_DictNext(b, &pos2, &key2, &value2);
|
|
267
|
+
assert(res != 0);
|
|
268
|
+
}
|
|
278
269
|
|
|
279
270
|
if (key1 != key2 || value1 != value2) {
|
|
280
271
|
result = Py_False;
|
|
@@ -283,7 +274,7 @@ static PyObject *our_dict_richcompare(PyObject *a, PyObject *b, int op) {
|
|
|
283
274
|
}
|
|
284
275
|
}
|
|
285
276
|
|
|
286
|
-
|
|
277
|
+
Py_INCREF_IMMORTAL(result);
|
|
287
278
|
return result;
|
|
288
279
|
}
|
|
289
280
|
|
|
@@ -334,6 +325,8 @@ static void initCaches(void) {
|
|
|
334
325
|
Nuitka_Long_SmallValues = (PyObject **)_PyInterpreterState_GET()->small_ints;
|
|
335
326
|
#elif PYTHON_VERSION >= 0x300
|
|
336
327
|
for (long i = NUITKA_STATIC_SMALLINT_VALUE_MIN; i < NUITKA_STATIC_SMALLINT_VALUE_MAX; i++) {
|
|
328
|
+
// Have to use the original API here since out "Nuitka_PyLong_FromLong"
|
|
329
|
+
// would insist on using "Nuitka_Long_SmallValues" to produce it.
|
|
337
330
|
PyObject *value = PyLong_FromLong(i);
|
|
338
331
|
Nuitka_Long_SmallValues[NUITKA_TO_SMALL_VALUE_OFFSET(i)] = value;
|
|
339
332
|
}
|
|
@@ -404,8 +397,8 @@ static int unpackValueInt(unsigned char const **data) {
|
|
|
404
397
|
return size;
|
|
405
398
|
}
|
|
406
399
|
|
|
407
|
-
static
|
|
408
|
-
|
|
400
|
+
static double unpackValueFloat(unsigned char const **data) {
|
|
401
|
+
double size;
|
|
409
402
|
|
|
410
403
|
memcpy(&size, *data, sizeof(size));
|
|
411
404
|
*data += sizeof(size);
|
|
@@ -413,38 +406,32 @@ static long unpackValueLong(unsigned char const **data) {
|
|
|
413
406
|
return size;
|
|
414
407
|
}
|
|
415
408
|
|
|
416
|
-
static
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
memcpy(&size, *data, sizeof(size));
|
|
420
|
-
*data += sizeof(size);
|
|
409
|
+
static unsigned char const *_unpackValueCString(unsigned char const *data) {
|
|
410
|
+
while (*(data++) != 0) {
|
|
411
|
+
}
|
|
421
412
|
|
|
422
|
-
return
|
|
413
|
+
return data;
|
|
423
414
|
}
|
|
424
415
|
|
|
425
|
-
|
|
426
|
-
|
|
416
|
+
// Decoding Variable-length quantity values
|
|
417
|
+
static uint64_t _unpackVariableLength(unsigned char const **data) {
|
|
418
|
+
uint64_t result = 0;
|
|
419
|
+
uint64_t factor = 1;
|
|
427
420
|
|
|
428
|
-
|
|
429
|
-
|
|
421
|
+
while (1) {
|
|
422
|
+
unsigned char value = **data;
|
|
423
|
+
*data += 1;
|
|
430
424
|
|
|
431
|
-
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
static double unpackValueFloat(unsigned char const **data) {
|
|
435
|
-
double size;
|
|
425
|
+
result += (value & 127) * factor;
|
|
436
426
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
return size;
|
|
441
|
-
}
|
|
427
|
+
if (value < 128) {
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
442
430
|
|
|
443
|
-
|
|
444
|
-
while (*(data++) != 0) {
|
|
431
|
+
factor <<= 7;
|
|
445
432
|
}
|
|
446
433
|
|
|
447
|
-
return
|
|
434
|
+
return result;
|
|
448
435
|
}
|
|
449
436
|
|
|
450
437
|
static PyObject *_unpackAnonValue(unsigned char anon_index) {
|
|
@@ -498,658 +485,682 @@ PyObject *_unpackSpecialValue(unsigned char special_index) {
|
|
|
498
485
|
}
|
|
499
486
|
|
|
500
487
|
static unsigned char const *_unpackBlobConstants(PyThreadState *tstate, PyObject **output, unsigned char const *data,
|
|
501
|
-
int count)
|
|
488
|
+
int count);
|
|
502
489
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
490
|
+
static unsigned char const *_unpackBlobConstant(PyThreadState *tstate, PyObject **output, unsigned char const *data) {
|
|
491
|
+
|
|
492
|
+
// Make sure we discover failures to assign.
|
|
493
|
+
*output = NULL;
|
|
494
|
+
bool is_object;
|
|
507
495
|
|
|
508
|
-
|
|
496
|
+
char c = *((char const *)data++);
|
|
509
497
|
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
|
|
510
|
-
|
|
511
|
-
|
|
498
|
+
unsigned char const *data_old = data;
|
|
499
|
+
printf("Type %c for %d of %d:\n", c, _i, count);
|
|
512
500
|
#endif
|
|
513
|
-
|
|
501
|
+
switch (c) {
|
|
514
502
|
|
|
515
|
-
|
|
516
|
-
|
|
503
|
+
case 'p': {
|
|
504
|
+
*output = *(output - 1);
|
|
505
|
+
is_object = true;
|
|
517
506
|
|
|
518
|
-
|
|
519
|
-
|
|
507
|
+
break;
|
|
508
|
+
}
|
|
509
|
+
case 'T': {
|
|
510
|
+
int size = (int)_unpackVariableLength(&data);
|
|
520
511
|
|
|
521
|
-
|
|
512
|
+
PyObject *t = PyTuple_New(size);
|
|
513
|
+
|
|
514
|
+
if (size > 0) {
|
|
515
|
+
data = _unpackBlobConstants(tstate, &PyTuple_GET_ITEM(t, 0), data, size);
|
|
522
516
|
}
|
|
523
|
-
case 'T': {
|
|
524
|
-
// TODO: Use fixed sizes
|
|
525
|
-
// uint32_t size = unpackSizeUint32(&data);
|
|
526
|
-
int size = unpackValueInt(&data);
|
|
527
517
|
|
|
528
|
-
|
|
518
|
+
insertToDictCacheForcedHash(tuple_cache, &t, (hashfunc)our_tuple_hash, (richcmpfunc)our_tuple_richcompare);
|
|
529
519
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
}
|
|
520
|
+
*output = t;
|
|
521
|
+
is_object = true;
|
|
533
522
|
|
|
534
|
-
|
|
523
|
+
break;
|
|
524
|
+
}
|
|
525
|
+
case 'L': {
|
|
526
|
+
int size = (int)_unpackVariableLength(&data);
|
|
535
527
|
|
|
536
|
-
|
|
537
|
-
is_object = true;
|
|
528
|
+
PyObject *l = PyList_New(size);
|
|
538
529
|
|
|
539
|
-
|
|
530
|
+
if (size > 0) {
|
|
531
|
+
data = _unpackBlobConstants(tstate, &PyList_GET_ITEM(l, 0), data, size);
|
|
540
532
|
}
|
|
541
|
-
case 'L': {
|
|
542
|
-
// TODO: Use fixed sizes
|
|
543
|
-
// uint32_t size = unpackSizeUint32(&data);
|
|
544
|
-
int size = unpackValueInt(&data);
|
|
545
533
|
|
|
546
|
-
|
|
534
|
+
insertToDictCacheForcedHash(list_cache, &l, (hashfunc)our_list_hash, (richcmpfunc)our_list_richcompare);
|
|
547
535
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
}
|
|
536
|
+
*output = l;
|
|
537
|
+
is_object = true;
|
|
551
538
|
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
break;
|
|
558
|
-
}
|
|
559
|
-
case 'D': {
|
|
560
|
-
// TODO: Use flexible sizes with bias towards small values.
|
|
561
|
-
// uint32_t size = unpackSizeUint32(&data);
|
|
562
|
-
int size = unpackValueInt(&data);
|
|
539
|
+
break;
|
|
540
|
+
}
|
|
541
|
+
case 'D': {
|
|
542
|
+
int size = (int)_unpackVariableLength(&data);
|
|
563
543
|
|
|
564
|
-
|
|
544
|
+
PyObject *d = _PyDict_NewPresized(size);
|
|
565
545
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
546
|
+
if (size > 0) {
|
|
547
|
+
NUITKA_DYNAMIC_ARRAY_DECL(keys, PyObject *, size);
|
|
548
|
+
NUITKA_DYNAMIC_ARRAY_DECL(values, PyObject *, size);
|
|
569
549
|
|
|
570
|
-
|
|
571
|
-
|
|
550
|
+
data = _unpackBlobConstants(tstate, &keys[0], data, size);
|
|
551
|
+
data = _unpackBlobConstants(tstate, &values[0], data, size);
|
|
572
552
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
}
|
|
553
|
+
for (int i = 0; i < size; i++) {
|
|
554
|
+
PyDict_SetItem(d, keys[i], values[i]);
|
|
576
555
|
}
|
|
556
|
+
}
|
|
577
557
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
*output = d;
|
|
581
|
-
is_object = true;
|
|
558
|
+
insertToDictCacheForcedHash(dict_cache, &d, (hashfunc)our_dict_hash, (richcmpfunc)our_dict_richcompare);
|
|
582
559
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
case 'P':
|
|
586
|
-
case 'S': {
|
|
587
|
-
// TODO: Use fixed sizes
|
|
588
|
-
// uint32_t size = unpackSizeUint32(&data);
|
|
589
|
-
int size = unpackValueInt(&data);
|
|
560
|
+
*output = d;
|
|
561
|
+
is_object = true;
|
|
590
562
|
|
|
591
|
-
|
|
563
|
+
break;
|
|
564
|
+
}
|
|
565
|
+
case 'P':
|
|
566
|
+
case 'S': {
|
|
567
|
+
int size = (int)_unpackVariableLength(&data);
|
|
568
|
+
|
|
569
|
+
PyObject *s;
|
|
570
|
+
|
|
571
|
+
if (c == 'S') {
|
|
572
|
+
s = PySet_New(NULL);
|
|
573
|
+
} else {
|
|
574
|
+
if (size == 0) {
|
|
575
|
+
// Get at the frozenset singleton of CPython and use it too. Some things
|
|
576
|
+
// rely on it being a singleton across the board.
|
|
577
|
+
static PyObject *empty_frozenset = NULL;
|
|
578
|
+
|
|
579
|
+
if (empty_frozenset == NULL) {
|
|
580
|
+
empty_frozenset = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, (PyObject *)&PyFrozenSet_Type,
|
|
581
|
+
Nuitka_Bytes_FromStringAndSize("", 0));
|
|
582
|
+
}
|
|
592
583
|
|
|
593
|
-
|
|
594
|
-
s = PySet_New(NULL);
|
|
584
|
+
s = empty_frozenset;
|
|
595
585
|
} else {
|
|
596
|
-
|
|
597
|
-
// Get at the frozenset singleton of CPython and use it too. Some things
|
|
598
|
-
// rely on it being a singleton across the board.
|
|
599
|
-
static PyObject *empty_frozenset = NULL;
|
|
600
|
-
|
|
601
|
-
if (empty_frozenset == NULL) {
|
|
602
|
-
empty_frozenset = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, (PyObject *)&PyFrozenSet_Type,
|
|
603
|
-
Nuitka_Bytes_FromStringAndSize("", 0));
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
s = empty_frozenset;
|
|
607
|
-
} else {
|
|
608
|
-
s = PyFrozenSet_New(NULL);
|
|
609
|
-
}
|
|
586
|
+
s = PyFrozenSet_New(NULL);
|
|
610
587
|
}
|
|
588
|
+
}
|
|
611
589
|
|
|
612
|
-
|
|
613
|
-
|
|
590
|
+
if (size > 0) {
|
|
591
|
+
NUITKA_DYNAMIC_ARRAY_DECL(values, PyObject *, size);
|
|
614
592
|
|
|
615
|
-
|
|
593
|
+
data = _unpackBlobConstants(tstate, &values[0], data, size);
|
|
616
594
|
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
}
|
|
595
|
+
for (int i = 0; i < size; i++) {
|
|
596
|
+
PySet_Add(s, values[i]);
|
|
620
597
|
}
|
|
598
|
+
}
|
|
621
599
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
}
|
|
600
|
+
// sets are cached globally too.
|
|
601
|
+
if (c == 'S') {
|
|
602
|
+
insertToDictCacheForcedHash(set_cache, &s, (hashfunc)our_set_hash, (richcmpfunc)our_set_richcompare);
|
|
603
|
+
} else {
|
|
604
|
+
insertToDictCacheForcedHash(frozenset_cache, &s, (hashfunc)our_set_hash, (richcmpfunc)our_set_richcompare);
|
|
605
|
+
}
|
|
629
606
|
|
|
630
|
-
|
|
631
|
-
|
|
607
|
+
*output = s;
|
|
608
|
+
is_object = true;
|
|
632
609
|
|
|
633
|
-
|
|
634
|
-
|
|
610
|
+
break;
|
|
611
|
+
}
|
|
635
612
|
#if PYTHON_VERSION < 0x300
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
613
|
+
case 'I':
|
|
614
|
+
case 'i': {
|
|
615
|
+
long value = (long)_unpackVariableLength(&data);
|
|
616
|
+
if (c == 'I') {
|
|
617
|
+
value = -value;
|
|
618
|
+
}
|
|
639
619
|
|
|
640
|
-
|
|
620
|
+
PyObject *i = PyInt_FromLong(value);
|
|
641
621
|
|
|
642
|
-
|
|
622
|
+
insertToDictCache(int_cache, &i);
|
|
643
623
|
|
|
644
|
-
|
|
645
|
-
|
|
624
|
+
*output = i;
|
|
625
|
+
is_object = true;
|
|
646
626
|
|
|
647
|
-
|
|
648
|
-
|
|
627
|
+
break;
|
|
628
|
+
}
|
|
649
629
|
#endif
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
630
|
+
case 'l':
|
|
631
|
+
case 'q': {
|
|
632
|
+
// Positive/negative integer value with abs value < 2**31
|
|
633
|
+
uint64_t value = _unpackVariableLength(&data);
|
|
653
634
|
|
|
654
|
-
|
|
635
|
+
PyObject *l = Nuitka_LongFromCLong((c == 'l') ? ((long)value) : (-(long)value));
|
|
636
|
+
assert(l != NULL);
|
|
655
637
|
|
|
656
|
-
|
|
638
|
+
// Avoid the long cache, won't do anything useful for small ints
|
|
657
639
|
#if PYTHON_VERSION >= 0x300
|
|
658
|
-
|
|
640
|
+
if (value < NUITKA_STATIC_SMALLINT_VALUE_MIN || value >= NUITKA_STATIC_SMALLINT_VALUE_MAX)
|
|
659
641
|
#endif
|
|
660
|
-
|
|
661
|
-
insertToDictCache(long_cache, &l);
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
*output = l;
|
|
665
|
-
is_object = true;
|
|
666
|
-
|
|
667
|
-
break;
|
|
668
|
-
}
|
|
669
|
-
case 'q': {
|
|
670
|
-
long long value = unpackValueLongLong(&data);
|
|
671
|
-
|
|
672
|
-
PyObject *l = PyLong_FromLongLong(value);
|
|
673
|
-
|
|
642
|
+
{
|
|
674
643
|
insertToDictCache(long_cache, &l);
|
|
644
|
+
}
|
|
675
645
|
|
|
676
|
-
|
|
677
|
-
|
|
646
|
+
*output = l;
|
|
647
|
+
is_object = true;
|
|
678
648
|
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
649
|
+
break;
|
|
650
|
+
}
|
|
651
|
+
case 'G':
|
|
652
|
+
case 'g': {
|
|
653
|
+
PyObject *result = Nuitka_PyLong_FromLong(0);
|
|
683
654
|
|
|
684
|
-
|
|
685
|
-
int size = unpackValueInt(&data);
|
|
655
|
+
int size = (int)_unpackVariableLength(&data);
|
|
686
656
|
|
|
687
|
-
|
|
657
|
+
PyObject *shift = Nuitka_PyLong_FromLong(31);
|
|
688
658
|
|
|
689
|
-
|
|
690
|
-
|
|
659
|
+
for (int i = 0; i < size; i++) {
|
|
660
|
+
result = PyNumber_InPlaceLshift(result, shift);
|
|
691
661
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
662
|
+
uint64_t value = _unpackVariableLength(&data);
|
|
663
|
+
PyObject *part = Nuitka_LongFromCLong((long)value);
|
|
664
|
+
assert(part != NULL);
|
|
665
|
+
result = PyNumber_InPlaceAdd(result, part);
|
|
666
|
+
Py_DECREF(part);
|
|
667
|
+
}
|
|
697
668
|
|
|
698
|
-
|
|
669
|
+
Py_DECREF(shift);
|
|
699
670
|
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
result = PyNumber_InPlaceMultiply(result, neg);
|
|
704
|
-
Py_DECREF(neg);
|
|
705
|
-
}
|
|
671
|
+
if (c == 'G') {
|
|
672
|
+
Nuitka_LongSetSignNegative(result);
|
|
673
|
+
}
|
|
706
674
|
|
|
707
|
-
|
|
675
|
+
insertToDictCache(long_cache, &result);
|
|
708
676
|
|
|
709
|
-
|
|
710
|
-
|
|
677
|
+
*output = result;
|
|
678
|
+
is_object = true;
|
|
711
679
|
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
680
|
+
break;
|
|
681
|
+
}
|
|
682
|
+
case 'f': {
|
|
683
|
+
double value = unpackValueFloat(&data);
|
|
716
684
|
|
|
717
|
-
|
|
685
|
+
PyObject *f = PyFloat_FromDouble(value);
|
|
718
686
|
|
|
719
|
-
|
|
720
|
-
|
|
687
|
+
// Floats are cached globally too.
|
|
688
|
+
insertToDictCacheForcedHash(float_cache, &f, NULL, (richcmpfunc)our_float_richcompare);
|
|
721
689
|
|
|
722
|
-
|
|
723
|
-
|
|
690
|
+
*output = f;
|
|
691
|
+
is_object = true;
|
|
724
692
|
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
693
|
+
break;
|
|
694
|
+
}
|
|
695
|
+
case 'j': {
|
|
696
|
+
double real = unpackValueFloat(&data);
|
|
697
|
+
double imag = unpackValueFloat(&data);
|
|
730
698
|
|
|
731
|
-
|
|
732
|
-
|
|
699
|
+
*output = PyComplex_FromDoubles(real, imag);
|
|
700
|
+
is_object = true;
|
|
733
701
|
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
702
|
+
break;
|
|
703
|
+
}
|
|
704
|
+
case 'J': {
|
|
705
|
+
PyObject *parts[2];
|
|
738
706
|
|
|
739
|
-
|
|
740
|
-
|
|
707
|
+
// Complex via float is done for ones that are 0, nan, float.
|
|
708
|
+
data = _unpackBlobConstants(tstate, &parts[0], data, 2);
|
|
741
709
|
|
|
742
|
-
|
|
743
|
-
|
|
710
|
+
*output = BUILTIN_COMPLEX2(tstate, parts[0], parts[1]);
|
|
711
|
+
is_object = true;
|
|
744
712
|
|
|
745
|
-
|
|
746
|
-
|
|
713
|
+
break;
|
|
714
|
+
}
|
|
747
715
|
#if PYTHON_VERSION < 0x300
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
716
|
+
case 'a':
|
|
717
|
+
case 'c': {
|
|
718
|
+
// Python2 str, potentially attribute, zero terminated.
|
|
719
|
+
size_t size = strlen((const char *)data);
|
|
752
720
|
|
|
753
|
-
|
|
754
|
-
|
|
721
|
+
PyObject *s = PyString_FromStringAndSize((const char *)data, size);
|
|
722
|
+
CHECK_OBJECT(s);
|
|
755
723
|
|
|
756
|
-
|
|
724
|
+
data += size + 1;
|
|
757
725
|
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
726
|
+
if (c == 'a') {
|
|
727
|
+
PyString_InternInPlace(&s);
|
|
728
|
+
}
|
|
761
729
|
|
|
762
|
-
|
|
763
|
-
|
|
730
|
+
*output = s;
|
|
731
|
+
is_object = true;
|
|
764
732
|
|
|
765
|
-
|
|
766
|
-
|
|
733
|
+
break;
|
|
734
|
+
}
|
|
767
735
|
#else
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
736
|
+
case 'c': {
|
|
737
|
+
// Python3 bytes, zero terminated.
|
|
738
|
+
size_t size = strlen((const char *)data);
|
|
771
739
|
|
|
772
|
-
|
|
773
|
-
|
|
740
|
+
PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, size);
|
|
741
|
+
CHECK_OBJECT(b);
|
|
774
742
|
|
|
775
|
-
|
|
743
|
+
data += size + 1;
|
|
776
744
|
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
745
|
+
// Empty bytes value is here as well.
|
|
746
|
+
if (size > 1) {
|
|
747
|
+
insertToDictCache(bytes_cache, &b);
|
|
748
|
+
}
|
|
781
749
|
|
|
782
|
-
|
|
783
|
-
|
|
750
|
+
*output = b;
|
|
751
|
+
is_object = true;
|
|
784
752
|
|
|
785
|
-
|
|
786
|
-
|
|
753
|
+
break;
|
|
754
|
+
}
|
|
787
755
|
#endif
|
|
788
|
-
|
|
789
|
-
|
|
756
|
+
case 'd': {
|
|
757
|
+
// Python2 str length 1 str, potentially attribute, or Python3 single byte
|
|
790
758
|
|
|
791
759
|
#if PYTHON_VERSION < 0x300
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
760
|
+
PyObject *s = PyString_FromStringAndSize((const char *)data, 1);
|
|
761
|
+
data += 1;
|
|
762
|
+
*output = s;
|
|
795
763
|
#else
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
764
|
+
PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, 1);
|
|
765
|
+
data += 1;
|
|
766
|
+
*output = b;
|
|
799
767
|
#endif
|
|
800
768
|
|
|
801
|
-
|
|
769
|
+
is_object = true;
|
|
802
770
|
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
771
|
+
break;
|
|
772
|
+
}
|
|
773
|
+
case 'w': {
|
|
774
|
+
// Python2 unicode, Python3 str length 1, potentially attribute in Python3
|
|
807
775
|
|
|
808
|
-
|
|
809
|
-
|
|
776
|
+
PyObject *u = PyUnicode_FromStringAndSize((const char *)data, 1);
|
|
777
|
+
data += 1;
|
|
810
778
|
|
|
811
|
-
#if PYTHON_VERSION >=
|
|
812
|
-
|
|
779
|
+
#if PYTHON_VERSION >= 0x3c7
|
|
780
|
+
_PyUnicode_InternImmortal(tstate->interp, &u);
|
|
781
|
+
#elif PYTHON_VERSION >= 0x300
|
|
782
|
+
PyUnicode_InternInPlace(&u);
|
|
813
783
|
#else
|
|
814
|
-
|
|
784
|
+
insertToDictCache(unicode_cache, &u);
|
|
815
785
|
#endif
|
|
816
786
|
|
|
817
|
-
|
|
818
|
-
|
|
787
|
+
*output = u;
|
|
788
|
+
is_object = true;
|
|
819
789
|
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
790
|
+
break;
|
|
791
|
+
}
|
|
792
|
+
case 'b': {
|
|
793
|
+
// Python2 str or Python3 bytes, length indicated.
|
|
794
|
+
int size = (int)_unpackVariableLength(&data);
|
|
795
|
+
assert(size > 1);
|
|
826
796
|
|
|
827
|
-
|
|
828
|
-
|
|
797
|
+
PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, size);
|
|
798
|
+
CHECK_OBJECT(b);
|
|
829
799
|
|
|
830
|
-
|
|
800
|
+
data += size;
|
|
831
801
|
|
|
832
802
|
#if PYTHON_VERSION >= 0x300
|
|
833
|
-
|
|
803
|
+
insertToDictCache(bytes_cache, &b);
|
|
834
804
|
#endif
|
|
835
805
|
|
|
836
|
-
|
|
837
|
-
|
|
806
|
+
*output = b;
|
|
807
|
+
is_object = true;
|
|
838
808
|
|
|
839
|
-
|
|
840
|
-
|
|
809
|
+
break;
|
|
810
|
+
}
|
|
841
811
|
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
// termination.
|
|
845
|
-
int size = unpackValueInt(&data);
|
|
812
|
+
case 'B': {
|
|
813
|
+
int size = (int)_unpackVariableLength(&data);
|
|
846
814
|
|
|
847
|
-
|
|
848
|
-
|
|
815
|
+
PyObject *b = PyByteArray_FromStringAndSize((const char *)data, size);
|
|
816
|
+
data += size;
|
|
849
817
|
|
|
850
|
-
|
|
851
|
-
|
|
818
|
+
*output = b;
|
|
819
|
+
is_object = true;
|
|
852
820
|
|
|
853
|
-
|
|
854
|
-
|
|
821
|
+
break;
|
|
822
|
+
}
|
|
855
823
|
#if PYTHON_VERSION >= 0x300
|
|
856
|
-
|
|
824
|
+
case 'a': // Python3 attributes
|
|
857
825
|
#endif
|
|
858
|
-
|
|
859
|
-
|
|
826
|
+
case 'u': { // Python2 unicode, Python3 str, zero terminated.
|
|
827
|
+
size_t size = strlen((const char *)data);
|
|
860
828
|
#if PYTHON_VERSION < 0x300
|
|
861
|
-
|
|
829
|
+
PyObject *u = PyUnicode_FromStringAndSize((const char *)data, size);
|
|
862
830
|
#else
|
|
863
|
-
|
|
831
|
+
PyObject *u = PyUnicode_DecodeUTF8((const char *)data, size, "surrogatepass");
|
|
864
832
|
#endif
|
|
865
|
-
|
|
833
|
+
data += size + 1;
|
|
866
834
|
|
|
867
|
-
#if PYTHON_VERSION >=
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
835
|
+
#if PYTHON_VERSION >= 0x3c7
|
|
836
|
+
_PyUnicode_InternImmortal(tstate->interp, &u);
|
|
837
|
+
#elif PYTHON_VERSION >= 0x300
|
|
838
|
+
if (c == 'a') {
|
|
839
|
+
PyUnicode_InternInPlace(&u);
|
|
840
|
+
}
|
|
871
841
|
#else
|
|
872
|
-
|
|
842
|
+
insertToDictCache(unicode_cache, &u);
|
|
873
843
|
#endif
|
|
874
844
|
|
|
875
|
-
|
|
876
|
-
|
|
845
|
+
*output = u;
|
|
846
|
+
is_object = true;
|
|
877
847
|
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
848
|
+
break;
|
|
849
|
+
}
|
|
850
|
+
case 'v': {
|
|
851
|
+
int size = (int)_unpackVariableLength(&data);
|
|
882
852
|
|
|
883
853
|
#if PYTHON_VERSION < 0x300
|
|
884
|
-
|
|
854
|
+
PyObject *u = PyUnicode_FromStringAndSize((const char *)data, size);
|
|
885
855
|
#else
|
|
886
|
-
|
|
856
|
+
PyObject *u = PyUnicode_DecodeUTF8((const char *)data, size, "surrogatepass");
|
|
887
857
|
#endif
|
|
888
|
-
|
|
858
|
+
data += size;
|
|
889
859
|
|
|
890
860
|
#if PYTHON_VERSION < 0x300
|
|
891
|
-
|
|
861
|
+
insertToDictCache(unicode_cache, &u);
|
|
892
862
|
#endif
|
|
893
863
|
|
|
894
|
-
|
|
895
|
-
|
|
864
|
+
*output = u;
|
|
865
|
+
is_object = true;
|
|
896
866
|
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
867
|
+
break;
|
|
868
|
+
}
|
|
869
|
+
case 'n': {
|
|
870
|
+
*output = Py_None;
|
|
871
|
+
is_object = true;
|
|
902
872
|
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
873
|
+
break;
|
|
874
|
+
}
|
|
875
|
+
case 't': {
|
|
876
|
+
*output = Py_True;
|
|
877
|
+
is_object = true;
|
|
908
878
|
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
879
|
+
break;
|
|
880
|
+
}
|
|
881
|
+
case 'F': {
|
|
882
|
+
*output = Py_False;
|
|
883
|
+
is_object = true;
|
|
914
884
|
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
885
|
+
break;
|
|
886
|
+
}
|
|
887
|
+
case ':': {
|
|
888
|
+
// Slice object
|
|
889
|
+
PyObject *items[3];
|
|
890
|
+
data = _unpackBlobConstants(tstate, &items[0], data, 3);
|
|
921
891
|
|
|
922
|
-
|
|
892
|
+
PyObject *s = MAKE_SLICE_OBJECT3(tstate, items[0], items[1], items[2]);
|
|
923
893
|
|
|
924
|
-
|
|
925
|
-
|
|
894
|
+
*output = s;
|
|
895
|
+
is_object = true;
|
|
926
896
|
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
897
|
+
break;
|
|
898
|
+
}
|
|
899
|
+
case ';': {
|
|
900
|
+
// (x)range objects
|
|
901
|
+
PyObject *items[3];
|
|
902
|
+
data = _unpackBlobConstants(tstate, &items[0], data, 3);
|
|
931
903
|
#if PYTHON_VERSION < 0x300
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
904
|
+
assert(PyInt_CheckExact(items[0]));
|
|
905
|
+
assert(PyInt_CheckExact(items[1]));
|
|
906
|
+
assert(PyInt_CheckExact(items[2]));
|
|
935
907
|
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
data = _unpackBlobConstants(tstate, &items[0], data, 3);
|
|
908
|
+
long start = PyInt_AS_LONG(items[0]);
|
|
909
|
+
long stop = PyInt_AS_LONG(items[1]);
|
|
910
|
+
long step = PyInt_AS_LONG(items[2]);
|
|
940
911
|
|
|
941
|
-
|
|
912
|
+
PyObject *s = MAKE_XRANGE(tstate, start, stop, step);
|
|
913
|
+
#else
|
|
914
|
+
PyObject *s = BUILTIN_XRANGE3(tstate, items[0], items[1], items[2]);
|
|
942
915
|
#endif
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
break;
|
|
947
|
-
}
|
|
948
|
-
case 'M': {
|
|
949
|
-
// Anonymous builtin by table index value.
|
|
950
|
-
unsigned char anon_index = *data++;
|
|
916
|
+
*output = s;
|
|
917
|
+
is_object = true;
|
|
951
918
|
|
|
952
|
-
|
|
953
|
-
|
|
919
|
+
break;
|
|
920
|
+
}
|
|
921
|
+
case 'M': {
|
|
922
|
+
// Anonymous builtin by table index value.
|
|
923
|
+
unsigned char anon_index = *data++;
|
|
954
924
|
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
case 'Q': {
|
|
958
|
-
// Anonymous builtin by table index value.
|
|
959
|
-
unsigned char special_index = *data++;
|
|
925
|
+
*output = _unpackAnonValue(anon_index);
|
|
926
|
+
is_object = true;
|
|
960
927
|
|
|
961
|
-
|
|
962
|
-
|
|
928
|
+
break;
|
|
929
|
+
}
|
|
930
|
+
case 'Q': {
|
|
931
|
+
// Anonymous builtin by table index value.
|
|
932
|
+
unsigned char special_index = *data++;
|
|
963
933
|
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
case 'O': {
|
|
967
|
-
// Builtin by name. TODO: Define number table shared by C and Python
|
|
968
|
-
// serialization to avoid using strings here.
|
|
969
|
-
char const *builtin_name = (char const *)data;
|
|
970
|
-
data = _unpackValueCString(data);
|
|
934
|
+
*output = _unpackSpecialValue(special_index);
|
|
935
|
+
is_object = true;
|
|
971
936
|
|
|
972
|
-
|
|
973
|
-
|
|
937
|
+
break;
|
|
938
|
+
}
|
|
939
|
+
case 'O': {
|
|
940
|
+
// Builtin by name. TODO: Define number table shared by C and Python
|
|
941
|
+
// serialization to avoid using strings here.
|
|
942
|
+
char const *builtin_name = (char const *)data;
|
|
943
|
+
data = _unpackValueCString(data);
|
|
974
944
|
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
case 'E': {
|
|
978
|
-
// Builtin exception by name. TODO: Define number table shared by C and Python
|
|
979
|
-
// serialization to avoid using strings here.
|
|
980
|
-
char const *builtin_exception_name = (char const *)data;
|
|
981
|
-
data = _unpackValueCString(data);
|
|
945
|
+
*output = PyObject_GetAttrString((PyObject *)builtin_module, builtin_name);
|
|
946
|
+
is_object = true;
|
|
982
947
|
|
|
983
|
-
|
|
984
|
-
|
|
948
|
+
break;
|
|
949
|
+
}
|
|
950
|
+
case 'E': {
|
|
951
|
+
// Builtin exception by name. TODO: Define number table shared by C and Python
|
|
952
|
+
// serialization to avoid using strings here.
|
|
953
|
+
char const *builtin_exception_name = (char const *)data;
|
|
954
|
+
data = _unpackValueCString(data);
|
|
985
955
|
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
case 'Z': {
|
|
989
|
-
unsigned char v = *data++;
|
|
956
|
+
*output = PyObject_GetAttrString((PyObject *)builtin_module, builtin_exception_name);
|
|
957
|
+
is_object = true;
|
|
990
958
|
|
|
991
|
-
|
|
959
|
+
break;
|
|
960
|
+
}
|
|
961
|
+
case 'Z': {
|
|
962
|
+
unsigned char v = *data++;
|
|
992
963
|
|
|
993
|
-
|
|
994
|
-
case 0: {
|
|
995
|
-
static PyObject *_const_float_0_0 = NULL;
|
|
964
|
+
PyObject *z = NULL;
|
|
996
965
|
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
z = _const_float_0_0;
|
|
966
|
+
switch (v) {
|
|
967
|
+
case 0: {
|
|
968
|
+
static PyObject *_const_float_0_0 = NULL;
|
|
1001
969
|
|
|
1002
|
-
|
|
970
|
+
if (_const_float_0_0 == NULL) {
|
|
971
|
+
_const_float_0_0 = PyFloat_FromDouble(0.0);
|
|
1003
972
|
}
|
|
1004
|
-
|
|
1005
|
-
static PyObject *_const_float_minus_0_0 = NULL;
|
|
973
|
+
z = _const_float_0_0;
|
|
1006
974
|
|
|
1007
|
-
|
|
1008
|
-
|
|
975
|
+
break;
|
|
976
|
+
}
|
|
977
|
+
case 1: {
|
|
978
|
+
static PyObject *_const_float_minus_0_0 = NULL;
|
|
1009
979
|
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
copysign(PyFloat_AS_DOUBLE(_const_float_minus_0_0), -1.0));
|
|
1013
|
-
}
|
|
1014
|
-
z = _const_float_minus_0_0;
|
|
980
|
+
if (_const_float_minus_0_0 == NULL) {
|
|
981
|
+
_const_float_minus_0_0 = PyFloat_FromDouble(0.0);
|
|
1015
982
|
|
|
1016
|
-
|
|
983
|
+
// Older Python3 has variable signs from C, so be explicit about it.
|
|
984
|
+
PyFloat_SET_DOUBLE(_const_float_minus_0_0, copysign(PyFloat_AS_DOUBLE(_const_float_minus_0_0), -1.0));
|
|
1017
985
|
}
|
|
986
|
+
z = _const_float_minus_0_0;
|
|
1018
987
|
|
|
1019
|
-
|
|
1020
|
-
|
|
988
|
+
break;
|
|
989
|
+
}
|
|
1021
990
|
|
|
1022
|
-
|
|
1023
|
-
|
|
991
|
+
case 2: {
|
|
992
|
+
static PyObject *_const_float_plus_nan = NULL;
|
|
1024
993
|
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
}
|
|
1028
|
-
z = _const_float_plus_nan;
|
|
994
|
+
if (_const_float_plus_nan == NULL) {
|
|
995
|
+
_const_float_plus_nan = PyFloat_FromDouble(Py_NAN);
|
|
1029
996
|
|
|
1030
|
-
|
|
997
|
+
// Older Python3 has variable signs for NaN from C, so be explicit about it.
|
|
998
|
+
PyFloat_SET_DOUBLE(_const_float_plus_nan, copysign(PyFloat_AS_DOUBLE(_const_float_plus_nan), 1.0));
|
|
1031
999
|
}
|
|
1032
|
-
|
|
1033
|
-
static PyObject *_const_float_minus_nan = NULL;
|
|
1000
|
+
z = _const_float_plus_nan;
|
|
1034
1001
|
|
|
1035
|
-
|
|
1036
|
-
|
|
1002
|
+
break;
|
|
1003
|
+
}
|
|
1004
|
+
case 3: {
|
|
1005
|
+
static PyObject *_const_float_minus_nan = NULL;
|
|
1037
1006
|
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
copysign(PyFloat_AS_DOUBLE(_const_float_minus_nan), -1.0));
|
|
1041
|
-
}
|
|
1042
|
-
z = _const_float_minus_nan;
|
|
1007
|
+
if (_const_float_minus_nan == NULL) {
|
|
1008
|
+
_const_float_minus_nan = PyFloat_FromDouble(Py_NAN);
|
|
1043
1009
|
|
|
1044
|
-
|
|
1010
|
+
// Older Python3 has variable signs for NaN from C, so be explicit about it.
|
|
1011
|
+
PyFloat_SET_DOUBLE(_const_float_minus_nan, copysign(PyFloat_AS_DOUBLE(_const_float_minus_nan), -1.0));
|
|
1045
1012
|
}
|
|
1046
|
-
|
|
1047
|
-
static PyObject *_const_float_plus_inf = NULL;
|
|
1013
|
+
z = _const_float_minus_nan;
|
|
1048
1014
|
|
|
1049
|
-
|
|
1050
|
-
|
|
1015
|
+
break;
|
|
1016
|
+
}
|
|
1017
|
+
case 4: {
|
|
1018
|
+
static PyObject *_const_float_plus_inf = NULL;
|
|
1051
1019
|
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
}
|
|
1055
|
-
z = _const_float_plus_inf;
|
|
1020
|
+
if (_const_float_plus_inf == NULL) {
|
|
1021
|
+
_const_float_plus_inf = PyFloat_FromDouble(Py_HUGE_VAL);
|
|
1056
1022
|
|
|
1057
|
-
|
|
1023
|
+
// Older Python3 has variable signs from C, so be explicit about it.
|
|
1024
|
+
PyFloat_SET_DOUBLE(_const_float_plus_inf, copysign(PyFloat_AS_DOUBLE(_const_float_plus_inf), 1.0));
|
|
1058
1025
|
}
|
|
1059
|
-
|
|
1060
|
-
static PyObject *_const_float_minus_inf = NULL;
|
|
1026
|
+
z = _const_float_plus_inf;
|
|
1061
1027
|
|
|
1062
|
-
|
|
1063
|
-
|
|
1028
|
+
break;
|
|
1029
|
+
}
|
|
1030
|
+
case 5: {
|
|
1031
|
+
static PyObject *_const_float_minus_inf = NULL;
|
|
1064
1032
|
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
copysign(PyFloat_AS_DOUBLE(_const_float_minus_inf), -1.0));
|
|
1068
|
-
}
|
|
1069
|
-
z = _const_float_minus_inf;
|
|
1033
|
+
if (_const_float_minus_inf == NULL) {
|
|
1034
|
+
_const_float_minus_inf = PyFloat_FromDouble(Py_HUGE_VAL);
|
|
1070
1035
|
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
default: {
|
|
1074
|
-
PRINT_FORMAT("Missing decoding for %d\n", (int)c);
|
|
1075
|
-
NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
|
|
1076
|
-
}
|
|
1036
|
+
// Older Python3 has variable signs from C, so be explicit about it.
|
|
1037
|
+
PyFloat_SET_DOUBLE(_const_float_minus_inf, copysign(PyFloat_AS_DOUBLE(_const_float_minus_inf), -1.0));
|
|
1077
1038
|
}
|
|
1078
|
-
|
|
1079
|
-
// Floats are cached globally too.
|
|
1080
|
-
insertToDictCacheForcedHash(float_cache, &z, NULL, (richcmpfunc)our_float_richcompare);
|
|
1081
|
-
|
|
1082
|
-
*output = z;
|
|
1083
|
-
is_object = true;
|
|
1039
|
+
z = _const_float_minus_inf;
|
|
1084
1040
|
|
|
1085
1041
|
break;
|
|
1086
1042
|
}
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1043
|
+
default: {
|
|
1044
|
+
PRINT_FORMAT("Missing decoding for %d\n", (int)c);
|
|
1045
|
+
NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1090
1048
|
|
|
1091
|
-
|
|
1092
|
-
|
|
1049
|
+
// Floats are cached globally too.
|
|
1050
|
+
insertToDictCacheForcedHash(float_cache, &z, NULL, (richcmpfunc)our_float_richcompare);
|
|
1093
1051
|
|
|
1094
|
-
|
|
1052
|
+
*output = z;
|
|
1053
|
+
is_object = true;
|
|
1095
1054
|
|
|
1096
|
-
|
|
1097
|
-
|
|
1055
|
+
break;
|
|
1056
|
+
}
|
|
1057
|
+
case 'X': {
|
|
1058
|
+
// Blob data pointer, user knowns size.
|
|
1059
|
+
uint64_t size = _unpackVariableLength(&data);
|
|
1060
|
+
|
|
1061
|
+
*output = (PyObject *)data;
|
|
1062
|
+
is_object = false;
|
|
1063
|
+
|
|
1064
|
+
data += size;
|
|
1065
|
+
|
|
1066
|
+
break;
|
|
1067
|
+
}
|
|
1098
1068
|
#if PYTHON_VERSION >= 0x390
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1069
|
+
case 'A': {
|
|
1070
|
+
// GenericAlias object
|
|
1071
|
+
PyObject *items[2];
|
|
1072
|
+
data = _unpackBlobConstants(tstate, &items[0], data, 2);
|
|
1103
1073
|
|
|
1104
|
-
|
|
1074
|
+
PyObject *g = Py_GenericAlias(items[0], items[1]);
|
|
1105
1075
|
|
|
1106
|
-
|
|
1107
|
-
|
|
1076
|
+
// TODO: Maybe deduplicate.
|
|
1077
|
+
*output = g;
|
|
1108
1078
|
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1079
|
+
is_object = true;
|
|
1080
|
+
break;
|
|
1081
|
+
}
|
|
1112
1082
|
#endif
|
|
1113
1083
|
#if PYTHON_VERSION >= 0x3a0
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1084
|
+
case 'H': {
|
|
1085
|
+
// UnionType object
|
|
1086
|
+
PyObject *args;
|
|
1087
|
+
data = _unpackBlobConstants(tstate, &args, data, 1);
|
|
1118
1088
|
|
|
1119
|
-
|
|
1089
|
+
PyObject *union_type = MAKE_UNION_TYPE(args);
|
|
1120
1090
|
|
|
1121
|
-
|
|
1122
|
-
|
|
1091
|
+
// TODO: Maybe deduplicate.
|
|
1092
|
+
*output = union_type;
|
|
1123
1093
|
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1094
|
+
is_object = true;
|
|
1095
|
+
break;
|
|
1096
|
+
}
|
|
1127
1097
|
#endif
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1098
|
+
case 'C': {
|
|
1099
|
+
// Code object, without the filename, we let the module do that, depending on
|
|
1100
|
+
// the source mode.
|
|
1101
|
+
int line = unpackValueInt(&data);
|
|
1102
|
+
int flags = unpackValueInt(&data);
|
|
1103
|
+
|
|
1104
|
+
PyObject *function_name;
|
|
1105
|
+
data = _unpackBlobConstant(tstate, &function_name, data);
|
|
1106
|
+
// TODO: Version specific if we have this
|
|
1107
|
+
#if PYTHON_VERSION >= 0x3b0
|
|
1108
|
+
PyObject *function_qualname;
|
|
1109
|
+
data = _unpackBlobConstant(tstate, &function_qualname, data);
|
|
1110
|
+
#endif
|
|
1111
|
+
PyObject *arg_names;
|
|
1112
|
+
data = _unpackBlobConstant(tstate, &arg_names, data);
|
|
1113
|
+
PyObject *free_vars;
|
|
1114
|
+
data = _unpackBlobConstant(tstate, &free_vars, data);
|
|
1115
|
+
int arg_count = unpackValueInt(&data);
|
|
1116
|
+
|
|
1117
|
+
#if PYTHON_VERSION >= 0x300
|
|
1118
|
+
int kw_only_count = unpackValueInt(&data);
|
|
1119
|
+
#if PYTHON_VERSION >= 0x380
|
|
1120
|
+
int pos_only_count = unpackValueInt(&data);
|
|
1121
|
+
#endif
|
|
1122
|
+
#endif
|
|
1123
|
+
// Filename will be supplied later during usage.
|
|
1124
|
+
*output = (PyObject *)MAKE_CODE_OBJECT(Py_None, line, flags, function_name, function_qualname, arg_names,
|
|
1125
|
+
free_vars, arg_count, kw_only_count, pos_only_count);
|
|
1126
|
+
|
|
1127
|
+
is_object = true;
|
|
1128
|
+
break;
|
|
1129
|
+
}
|
|
1130
|
+
case '.': {
|
|
1131
|
+
PRINT_STRING("Missing blob values\n");
|
|
1132
|
+
NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
|
|
1133
|
+
}
|
|
1134
|
+
default:
|
|
1135
|
+
PRINT_FORMAT("Missing decoding for %d\n", (int)c);
|
|
1136
|
+
NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
|
|
1137
|
+
}
|
|
1136
1138
|
|
|
1137
1139
|
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
|
|
1138
|
-
|
|
1140
|
+
printf("Size for %c was %d\n", c, data - data_old);
|
|
1139
1141
|
#endif
|
|
1140
1142
|
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1143
|
+
// Discourage in-place operations from modifying these. These
|
|
1144
|
+
// might be put into containers, therefore take 2 refs to be
|
|
1145
|
+
// accounting for the container too.
|
|
1146
|
+
if (is_object == true) {
|
|
1147
|
+
CHECK_OBJECT(*output);
|
|
1146
1148
|
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1149
|
+
#if PYTHON_VERSION < 0x3c0
|
|
1150
|
+
Py_INCREF(*output);
|
|
1151
|
+
Py_INCREF(*output);
|
|
1152
|
+
#else
|
|
1153
|
+
Py_SET_REFCNT_IMMORTAL(*output);
|
|
1154
|
+
#endif
|
|
1155
|
+
}
|
|
1150
1156
|
|
|
1151
|
-
|
|
1152
|
-
|
|
1157
|
+
return data;
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
static unsigned char const *_unpackBlobConstants(PyThreadState *tstate, PyObject **output, unsigned char const *data,
|
|
1161
|
+
int count) {
|
|
1162
|
+
for (int _i = 0; _i < count; _i++) {
|
|
1163
|
+
data = _unpackBlobConstant(tstate, output, data);
|
|
1153
1164
|
|
|
1154
1165
|
output += 1;
|
|
1155
1166
|
}
|
|
@@ -1214,11 +1225,11 @@ unsigned char *findMacOSBinarySection(void) {
|
|
|
1214
1225
|
#endif
|
|
1215
1226
|
|
|
1216
1227
|
void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *name) {
|
|
1217
|
-
assert(PyThreadState_GET() == tstate);
|
|
1218
|
-
|
|
1219
1228
|
static bool init_done = false;
|
|
1220
1229
|
|
|
1221
1230
|
if (init_done == false) {
|
|
1231
|
+
NUITKA_PRINT_TIMING("loadConstantsBlob(): One time init.");
|
|
1232
|
+
|
|
1222
1233
|
#ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
|
|
1223
1234
|
printf("loadConstantsBlob '%s' one time init\n", name);
|
|
1224
1235
|
#endif
|
|
@@ -1242,9 +1253,10 @@ void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *nam
|
|
|
1242
1253
|
|
|
1243
1254
|
assert(constant_bin);
|
|
1244
1255
|
#endif
|
|
1245
|
-
|
|
1256
|
+
NUITKA_PRINT_TIMING("loadConstantsBlob(): Found blob, decoding now.");
|
|
1246
1257
|
DECODE(constant_bin);
|
|
1247
1258
|
|
|
1259
|
+
NUITKA_PRINT_TIMING("loadConstantsBlob(): CRC32 that blob for correctness.");
|
|
1248
1260
|
uint32_t hash = unpackValueUint32(&constant_bin);
|
|
1249
1261
|
uint32_t size = unpackValueUint32(&constant_bin);
|
|
1250
1262
|
|
|
@@ -1261,6 +1273,8 @@ void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *nam
|
|
|
1261
1273
|
printf("Checked CRC32 to match hash %u size %u\n", hash, size);
|
|
1262
1274
|
#endif
|
|
1263
1275
|
|
|
1276
|
+
NUITKA_PRINT_TIMING("loadConstantsBlob(): One time init complete.");
|
|
1277
|
+
|
|
1264
1278
|
init_done = true;
|
|
1265
1279
|
}
|
|
1266
1280
|
|
|
@@ -1297,3 +1311,18 @@ void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *nam
|
|
|
1297
1311
|
|
|
1298
1312
|
unpackBlobConstants(tstate, output, w);
|
|
1299
1313
|
}
|
|
1314
|
+
|
|
1315
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
1316
|
+
// integrates with CPython, but also works on its own.
|
|
1317
|
+
//
|
|
1318
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
1319
|
+
// you may not use this file except in compliance with the License.
|
|
1320
|
+
// You may obtain a copy of the License at
|
|
1321
|
+
//
|
|
1322
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
1323
|
+
//
|
|
1324
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
1325
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
1326
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1327
|
+
// See the License for the specific language governing permissions and
|
|
1328
|
+
// limitations under the License.
|