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
|
// This implements the loading of C compiled modules and shared library
|
|
19
4
|
// extension modules bundled for standalone mode.
|
|
20
5
|
|
|
@@ -37,6 +22,9 @@
|
|
|
37
22
|
#ifdef _WIN32
|
|
38
23
|
#undef SEP
|
|
39
24
|
#define SEP '\\'
|
|
25
|
+
#define SEP_L L'\\'
|
|
26
|
+
#else
|
|
27
|
+
#define SEP_L SEP
|
|
40
28
|
#endif
|
|
41
29
|
|
|
42
30
|
#ifdef _WIN32
|
|
@@ -64,7 +52,7 @@ static inline bool isVerbose(void) { return false; }
|
|
|
64
52
|
static struct Nuitka_MetaPathBasedLoaderEntry *loader_entries = NULL;
|
|
65
53
|
|
|
66
54
|
static bool hasFrozenModule(char const *name) {
|
|
67
|
-
for (struct _frozen const *p = PyImport_FrozenModules
|
|
55
|
+
for (struct _frozen const *p = PyImport_FrozenModules; p != NULL; p++) {
|
|
68
56
|
if (p->name == NULL) {
|
|
69
57
|
return false;
|
|
70
58
|
}
|
|
@@ -77,10 +65,11 @@ static bool hasFrozenModule(char const *name) {
|
|
|
77
65
|
return true;
|
|
78
66
|
}
|
|
79
67
|
|
|
80
|
-
static char *
|
|
68
|
+
static char *appendModuleNameAsPath(char *buffer, char const *module_name, size_t buffer_size) {
|
|
81
69
|
// Skip to the end
|
|
82
70
|
while (*buffer != 0) {
|
|
83
71
|
buffer++;
|
|
72
|
+
buffer_size -= 1;
|
|
84
73
|
}
|
|
85
74
|
|
|
86
75
|
while (*module_name) {
|
|
@@ -105,20 +94,19 @@ static char *appendModulenameAsPath(char *buffer, char const *module_name, size_
|
|
|
105
94
|
|
|
106
95
|
#if defined(_WIN32) && defined(_NUITKA_STANDALONE)
|
|
107
96
|
|
|
108
|
-
static void
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
buffer++;
|
|
112
|
-
}
|
|
97
|
+
static void appendModuleNameAsPathW(wchar_t *buffer, PyObject *module_name, size_t buffer_size) {
|
|
98
|
+
Py_ssize_t size;
|
|
99
|
+
wchar_t const *module_name_wstr = Nuitka_UnicodeAsWideString(module_name, &size);
|
|
113
100
|
|
|
114
|
-
while (
|
|
115
|
-
|
|
101
|
+
while (size > 0) {
|
|
102
|
+
wchar_t c = *module_name_wstr++;
|
|
103
|
+
size -= 1;
|
|
116
104
|
|
|
117
|
-
if (c == '.') {
|
|
118
|
-
c =
|
|
105
|
+
if (c == L'.') {
|
|
106
|
+
c = SEP_L;
|
|
119
107
|
}
|
|
120
108
|
|
|
121
|
-
|
|
109
|
+
appendWCharSafeW(buffer, c, buffer_size);
|
|
122
110
|
}
|
|
123
111
|
}
|
|
124
112
|
#endif
|
|
@@ -131,15 +119,11 @@ static void patchCodeObjectPaths(PyCodeObject *code_object, PyObject *module_pat
|
|
|
131
119
|
code_object->co_filename = module_path;
|
|
132
120
|
Py_INCREF(module_path);
|
|
133
121
|
|
|
134
|
-
#ifndef PY_NOGIL
|
|
135
122
|
Py_ssize_t consts_count = PyTuple_GET_SIZE(code_object->co_consts);
|
|
136
123
|
|
|
137
124
|
for (Py_ssize_t i = 0; i < consts_count; i++) {
|
|
138
125
|
PyObject *constant = PyTuple_GET_ITEM(code_object->co_consts, i);
|
|
139
|
-
|
|
140
|
-
for (Py_ssize_t i = 0; i < code_object->co_nconsts; i++) {
|
|
141
|
-
PyObject *constant = code_object->co_constants[i];
|
|
142
|
-
#endif
|
|
126
|
+
|
|
143
127
|
if (PyCode_Check(constant)) {
|
|
144
128
|
patchCodeObjectPaths((PyCodeObject *)constant, module_path);
|
|
145
129
|
}
|
|
@@ -150,7 +134,7 @@ static void patchCodeObjectPaths(PyCodeObject *code_object, PyObject *module_pat
|
|
|
150
134
|
NUITKA_MAY_BE_UNUSED static PyObject *MAKE_RELATIVE_PATH_FROM_NAME(char const *name, bool is_package, bool dir_only) {
|
|
151
135
|
char buffer[MAXPATHLEN + 1] = {0};
|
|
152
136
|
|
|
153
|
-
|
|
137
|
+
appendModuleNameAsPath(buffer, name, sizeof(buffer));
|
|
154
138
|
|
|
155
139
|
if (dir_only == false) {
|
|
156
140
|
if (is_package) {
|
|
@@ -180,19 +164,35 @@ NUITKA_MAY_BE_UNUSED static PyObject *MAKE_RELATIVE_PATH_FROM_NAME(char const *n
|
|
|
180
164
|
return result;
|
|
181
165
|
}
|
|
182
166
|
|
|
183
|
-
static PyObject *
|
|
184
|
-
|
|
167
|
+
static PyObject *_makeDunderPathObject(PyThreadState *tstate, PyObject *module_path_entry) {
|
|
168
|
+
CHECK_OBJECT(module_path_entry);
|
|
169
|
+
|
|
170
|
+
PyObject *path_list = MAKE_LIST_EMPTY(tstate, 1);
|
|
171
|
+
if (unlikely(path_list == NULL)) {
|
|
172
|
+
return NULL;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
PyList_SET_ITEM0(path_list, 0, module_path_entry);
|
|
176
|
+
|
|
177
|
+
CHECK_OBJECT(path_list);
|
|
178
|
+
return path_list;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
static PyObject *loadModuleFromCodeObject(PyThreadState *tstate, PyObject *module, PyCodeObject *code_object,
|
|
182
|
+
char const *name, bool is_package) {
|
|
185
183
|
assert(code_object != NULL);
|
|
186
184
|
|
|
187
|
-
|
|
188
|
-
|
|
185
|
+
{
|
|
186
|
+
NUITKA_MAY_BE_UNUSED bool b_res = Nuitka_SetModuleString(name, module);
|
|
187
|
+
assert(b_res != false);
|
|
188
|
+
}
|
|
189
189
|
|
|
190
190
|
char buffer[MAXPATHLEN + 1] = {0};
|
|
191
191
|
|
|
192
192
|
PyObject *module_path_entry = NULL;
|
|
193
193
|
|
|
194
194
|
if (is_package) {
|
|
195
|
-
|
|
195
|
+
appendModuleNameAsPath(buffer, name, sizeof(buffer));
|
|
196
196
|
PyObject *module_path_entry_base = Nuitka_String_FromString(buffer);
|
|
197
197
|
|
|
198
198
|
module_path_entry = MAKE_RELATIVE_PATH(module_path_entry_base);
|
|
@@ -201,7 +201,7 @@ static PyObject *loadModuleFromCodeObject(PyObject *module, PyCodeObject *code_o
|
|
|
201
201
|
appendCharSafe(buffer, SEP, sizeof(buffer));
|
|
202
202
|
appendStringSafe(buffer, "__init__.py", sizeof(buffer));
|
|
203
203
|
} else {
|
|
204
|
-
|
|
204
|
+
appendModuleNameAsPath(buffer, name, sizeof(buffer));
|
|
205
205
|
appendStringSafe(buffer, ".py", sizeof(buffer));
|
|
206
206
|
}
|
|
207
207
|
|
|
@@ -212,17 +212,9 @@ static PyObject *loadModuleFromCodeObject(PyObject *module, PyCodeObject *code_o
|
|
|
212
212
|
|
|
213
213
|
if (is_package) {
|
|
214
214
|
/* Set __path__ properly, unlike frozen module importer does. */
|
|
215
|
-
PyObject *path_list =
|
|
216
|
-
if (unlikely(path_list == NULL))
|
|
217
|
-
return NULL;
|
|
215
|
+
PyObject *path_list = _makeDunderPathObject(tstate, module_path_entry);
|
|
218
216
|
|
|
219
|
-
int res =
|
|
220
|
-
if (unlikely(res != 0)) {
|
|
221
|
-
return NULL;
|
|
222
|
-
}
|
|
223
|
-
Py_INCREF(module_path_entry);
|
|
224
|
-
|
|
225
|
-
res = PyObject_SetAttr(module, const_str_plain___path__, path_list);
|
|
217
|
+
int res = PyObject_SetAttr(module, const_str_plain___path__, path_list);
|
|
226
218
|
if (unlikely(res != 0)) {
|
|
227
219
|
return NULL;
|
|
228
220
|
}
|
|
@@ -258,7 +250,7 @@ static struct Nuitka_MetaPathBasedLoaderEntry *findEntry(char const *name) {
|
|
|
258
250
|
|
|
259
251
|
while (current->name != NULL) {
|
|
260
252
|
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
261
|
-
current->name =
|
|
253
|
+
current->name = UN_TRANSLATE(current->name);
|
|
262
254
|
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
263
255
|
}
|
|
264
256
|
|
|
@@ -286,7 +278,7 @@ static struct Nuitka_MetaPathBasedLoaderEntry *findContainingPackageEntry(char c
|
|
|
286
278
|
|
|
287
279
|
while (current->name != NULL) {
|
|
288
280
|
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
289
|
-
current->name =
|
|
281
|
+
current->name = UN_TRANSLATE(current->name);
|
|
290
282
|
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
291
283
|
}
|
|
292
284
|
|
|
@@ -325,7 +317,7 @@ static PyObject *_getImportingSuffixesByPriority(PyThreadState *tstate, int kind
|
|
|
325
317
|
static PyObject *result = NULL;
|
|
326
318
|
|
|
327
319
|
if (result == NULL) {
|
|
328
|
-
result = MAKE_LIST_EMPTY(0);
|
|
320
|
+
result = MAKE_LIST_EMPTY(tstate, 0);
|
|
329
321
|
|
|
330
322
|
PyObject *imp_module = PyImport_ImportModule("imp");
|
|
331
323
|
PyObject *get_suffixes_func = PyObject_GetAttrString(imp_module, "get_suffixes");
|
|
@@ -383,10 +375,10 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
383
375
|
return false;
|
|
384
376
|
}
|
|
385
377
|
|
|
386
|
-
PyObject *candidates = MAKE_LIST_EMPTY(0);
|
|
378
|
+
PyObject *candidates = MAKE_LIST_EMPTY(tstate, 0);
|
|
387
379
|
|
|
388
380
|
// Search only relative to the parent name of course.
|
|
389
|
-
char const *
|
|
381
|
+
char const *module_relative_name_str = Nuitka_String_AsString(module_name) + strlen(parent_module_name) + 1;
|
|
390
382
|
|
|
391
383
|
Py_ssize_t parent_path_size = PyList_GET_SIZE(parent_path);
|
|
392
384
|
|
|
@@ -408,9 +400,9 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
408
400
|
if (Nuitka_String_CheckExact(filename)) {
|
|
409
401
|
char const *filename_str = Nuitka_String_AsString(filename);
|
|
410
402
|
|
|
411
|
-
if (strncmp(filename_str,
|
|
412
|
-
filename_str[strlen(
|
|
413
|
-
LIST_APPEND1(candidates,
|
|
403
|
+
if (strncmp(filename_str, module_relative_name_str, strlen(module_relative_name_str)) == 0 &&
|
|
404
|
+
filename_str[strlen(module_relative_name_str)] == '.') {
|
|
405
|
+
LIST_APPEND1(candidates, MAKE_TUPLE2(tstate, path_element, filename));
|
|
414
406
|
}
|
|
415
407
|
}
|
|
416
408
|
}
|
|
@@ -419,7 +411,7 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
419
411
|
#if 0
|
|
420
412
|
PRINT_STRING("CANDIDATES:");
|
|
421
413
|
PRINT_STRING(Nuitka_String_AsString(module_name));
|
|
422
|
-
PRINT_STRING(
|
|
414
|
+
PRINT_STRING(module_relative_name_str);
|
|
423
415
|
PRINT_ITEM(candidates);
|
|
424
416
|
PRINT_NEW_LINE();
|
|
425
417
|
#endif
|
|
@@ -442,11 +434,11 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
442
434
|
|
|
443
435
|
char const *candidate_str = Nuitka_String_AsString(candidate);
|
|
444
436
|
|
|
445
|
-
if (strcmp(suffix_str, candidate_str + strlen(
|
|
437
|
+
if (strcmp(suffix_str, candidate_str + strlen(module_relative_name_str)) == 0) {
|
|
446
438
|
PyObject *fullpath = JOIN_PATH2(directory, candidate);
|
|
447
439
|
|
|
448
440
|
if (installed_extension_modules == NULL) {
|
|
449
|
-
installed_extension_modules = MAKE_DICT_EMPTY();
|
|
441
|
+
installed_extension_modules = MAKE_DICT_EMPTY(tstate);
|
|
450
442
|
}
|
|
451
443
|
|
|
452
444
|
// Force path to unicode, to have easier consumption, as we need a wchar_t or char *
|
|
@@ -470,11 +462,8 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
470
462
|
return result;
|
|
471
463
|
}
|
|
472
464
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
#else
|
|
476
|
-
static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const char *filename);
|
|
477
|
-
#endif
|
|
465
|
+
static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const filename_char_t *filename,
|
|
466
|
+
bool is_package);
|
|
478
467
|
|
|
479
468
|
static PyObject *callIntoInstalledExtensionModule(PyThreadState *tstate, PyObject *module_name,
|
|
480
469
|
PyObject *extension_module_filename) {
|
|
@@ -483,16 +472,14 @@ static PyObject *callIntoInstalledExtensionModule(PyThreadState *tstate, PyObjec
|
|
|
483
472
|
// create the string needed.
|
|
484
473
|
assert(PyUnicode_CheckExact(extension_module_filename));
|
|
485
474
|
|
|
486
|
-
|
|
487
|
-
wchar_t const *extension_module_filename_str = PyUnicode_AS_UNICODE(extension_module_filename);
|
|
488
|
-
#else
|
|
489
|
-
wchar_t const *extension_module_filename_str = PyUnicode_AsWideCharString(extension_module_filename, NULL);
|
|
490
|
-
#endif
|
|
475
|
+
wchar_t const *extension_module_filename_str = Nuitka_UnicodeAsWideString(extension_module_filename, NULL);
|
|
491
476
|
#else
|
|
492
477
|
char const *extension_module_filename_str = Nuitka_String_AsString(extension_module_filename);
|
|
493
478
|
#endif
|
|
494
479
|
|
|
495
|
-
|
|
480
|
+
// TODO: The value of "is_package" is guessed, maybe infer from filename being
|
|
481
|
+
// a "__init__.so" and the like.
|
|
482
|
+
return callIntoExtensionModule(tstate, Nuitka_String_AsString(module_name), extension_module_filename_str, false);
|
|
496
483
|
}
|
|
497
484
|
|
|
498
485
|
#endif
|
|
@@ -573,7 +560,7 @@ static PyObject *_nuitka_loader_find_module(PyObject *self, PyObject *args, PyOb
|
|
|
573
560
|
PySys_WriteStderr("import %s # denied responsibility\n", name);
|
|
574
561
|
}
|
|
575
562
|
|
|
576
|
-
|
|
563
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
577
564
|
return Py_None;
|
|
578
565
|
}
|
|
579
566
|
|
|
@@ -593,37 +580,18 @@ static PyObject *_nuitka_loader_get_data(PyObject *self, PyObject *args, PyObjec
|
|
|
593
580
|
return GET_FILE_BYTES(tstate, filename);
|
|
594
581
|
}
|
|
595
582
|
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
static void setModuleFileValue(PyThreadState *tstate, PyObject *module, char const *filename) {
|
|
600
|
-
#endif
|
|
601
|
-
bool needs_update = false;
|
|
602
|
-
|
|
603
|
-
PyObject *existing_file_value = LOOKUP_ATTRIBUTE(tstate, module, const_str_plain___file__);
|
|
583
|
+
static void setModuleFileValue(PyThreadState *tstate, PyObject *module, filename_char_t const *filename) {
|
|
584
|
+
CHECK_OBJECT(module);
|
|
585
|
+
assert(filename != NULL);
|
|
604
586
|
|
|
605
|
-
|
|
606
|
-
CLEAR_ERROR_OCCURRED(tstate);
|
|
607
|
-
needs_update = true;
|
|
608
|
-
} else {
|
|
609
|
-
if (existing_file_value == Py_None) {
|
|
610
|
-
needs_update = true;
|
|
611
|
-
}
|
|
587
|
+
assert(PyModule_Check(module));
|
|
612
588
|
|
|
613
|
-
|
|
614
|
-
}
|
|
589
|
+
PyObject *dict = PyModule_GetDict(module);
|
|
615
590
|
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
int res = SET_ATTRIBUTE(tstate, module, const_str_plain___file__, PyUnicode_FromString(filename));
|
|
621
|
-
#endif
|
|
622
|
-
if (unlikely(res < 0)) {
|
|
623
|
-
// Might be refuted, which wouldn't be harmful.
|
|
624
|
-
CLEAR_ERROR_OCCURRED(tstate);
|
|
625
|
-
}
|
|
626
|
-
}
|
|
591
|
+
// TODO: We should have DICT_SET_ITEM0/1 for these things.
|
|
592
|
+
PyObject *new_file_value = Nuitka_String_FromFilename(filename);
|
|
593
|
+
DICT_SET_ITEM(dict, const_str_plain___file__, new_file_value);
|
|
594
|
+
Py_DECREF(new_file_value);
|
|
627
595
|
}
|
|
628
596
|
|
|
629
597
|
#if PYTHON_VERSION < 0x300
|
|
@@ -641,11 +609,99 @@ typedef PyObject *(*entrypoint_t)(void);
|
|
|
641
609
|
static PyObject *createModuleSpec(PyThreadState *tstate, PyObject *module_name, PyObject *origin, bool is_package);
|
|
642
610
|
#endif
|
|
643
611
|
|
|
612
|
+
static void _fillExtensionModuleDllEntryFunctionName(PyThreadState *tstate, char *buffer, size_t buffer_size,
|
|
613
|
+
char const *name) {
|
|
614
|
+
|
|
615
|
+
#if PYTHON_VERSION >= 0x350
|
|
616
|
+
PyObject *name_bytes_obj = PyBytes_FromString(name);
|
|
617
|
+
PyObject *name_obj = BYTES_DECODE2(tstate, name_bytes_obj, Nuitka_String_FromString("utf8"));
|
|
618
|
+
Py_DECREF(name_bytes_obj);
|
|
619
|
+
|
|
620
|
+
PyObject *name_ascii = UNICODE_ENCODE2(tstate, name_obj, const_str_plain_ascii);
|
|
621
|
+
|
|
622
|
+
if (name_ascii == NULL) {
|
|
623
|
+
DROP_ERROR_OCCURRED(tstate);
|
|
624
|
+
|
|
625
|
+
PyObject *name_punycode = UNICODE_ENCODE2(tstate, name_obj, const_str_plain_punycode);
|
|
626
|
+
|
|
627
|
+
CHECK_OBJECT(name_punycode);
|
|
628
|
+
|
|
629
|
+
snprintf(buffer, buffer_size, "PyInitU_%s", PyBytes_AsString(name_punycode));
|
|
630
|
+
|
|
631
|
+
Py_DECREF(name_punycode);
|
|
632
|
+
} else {
|
|
633
|
+
Py_DECREF(name_ascii);
|
|
634
|
+
|
|
635
|
+
snprintf(buffer, buffer_size, "PyInit_%s", name);
|
|
636
|
+
}
|
|
637
|
+
Py_DECREF(name_obj);
|
|
638
|
+
#else
|
|
639
|
+
|
|
640
|
+
snprintf(buffer, buffer_size,
|
|
641
|
+
#if PYTHON_VERSION < 0x300
|
|
642
|
+
"init%s",
|
|
643
|
+
#else
|
|
644
|
+
"PyInit_%s",
|
|
645
|
+
#endif
|
|
646
|
+
name);
|
|
647
|
+
#endif
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
#ifdef _NUITKA_STANDALONE
|
|
651
|
+
// Append the the entry name from full path module name with dots,
|
|
652
|
+
// and translate these into directory separators.
|
|
653
|
+
static void _makeModuleCFilenameValue(filename_char_t *filename, size_t filename_size, char const *module_name_cstr,
|
|
654
|
+
PyObject *module_name, bool is_package) {
|
|
644
655
|
#ifdef _WIN32
|
|
645
|
-
|
|
656
|
+
appendWStringSafeW(filename, getBinaryDirectoryWideChars(true), filename_size);
|
|
657
|
+
appendWCharSafeW(filename, SEP_L, filename_size);
|
|
658
|
+
appendModuleNameAsPathW(filename, module_name, filename_size);
|
|
659
|
+
if (is_package) {
|
|
660
|
+
appendWCharSafeW(filename, SEP_L, filename_size);
|
|
661
|
+
appendStringSafeW(filename, "__init__", filename_size);
|
|
662
|
+
}
|
|
663
|
+
appendStringSafeW(filename, ".pyd", filename_size);
|
|
664
|
+
#else
|
|
665
|
+
appendStringSafe(filename, getBinaryDirectoryHostEncoded(true), filename_size);
|
|
666
|
+
appendCharSafe(filename, SEP, filename_size);
|
|
667
|
+
appendModuleNameAsPath(filename, module_name_cstr, filename_size);
|
|
668
|
+
if (is_package) {
|
|
669
|
+
appendCharSafe(filename, SEP, filename_size);
|
|
670
|
+
appendStringSafe(filename, "__init__", filename_size);
|
|
671
|
+
}
|
|
672
|
+
appendStringSafe(filename, ".so", filename_size);
|
|
673
|
+
#endif
|
|
674
|
+
}
|
|
675
|
+
#endif
|
|
676
|
+
|
|
677
|
+
#if PYTHON_VERSION >= 0x3c0 && defined(_NUITKA_USE_UNEXPOSED_API)
|
|
678
|
+
extern _Thread_local const char *pkgcontext;
|
|
679
|
+
#endif
|
|
680
|
+
|
|
681
|
+
static const char *NuitkaImport_SwapPackageContext(const char *new_context) {
|
|
682
|
+
// TODO: The locking APIs for 3.13 give errors here that are not explained
|
|
683
|
+
// yet.
|
|
684
|
+
#if PYTHON_VERSION >= 0x3c0
|
|
685
|
+
// spell-checker: ignore pkgcontext
|
|
686
|
+
const char *old_context = _PyRuntime.imports.pkgcontext;
|
|
687
|
+
_PyRuntime.imports.pkgcontext = new_context;
|
|
688
|
+
#if PYTHON_VERSION >= 0x3c0 && defined(_NUITKA_USE_UNEXPOSED_API)
|
|
689
|
+
pkgcontext = new_context;
|
|
690
|
+
#endif
|
|
691
|
+
return old_context;
|
|
692
|
+
#elif PYTHON_VERSION >= 0x370
|
|
693
|
+
char const *old_context = _Py_PackageContext;
|
|
694
|
+
_Py_PackageContext = (char *)new_context;
|
|
695
|
+
return old_context;
|
|
646
696
|
#else
|
|
647
|
-
|
|
697
|
+
char *old_context = _Py_PackageContext;
|
|
698
|
+
_Py_PackageContext = (char *)new_context;
|
|
699
|
+
return (char const *)old_context;
|
|
648
700
|
#endif
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const filename_char_t *filename,
|
|
704
|
+
bool is_package) {
|
|
649
705
|
// Determine the package name and basename of the module to load.
|
|
650
706
|
char const *dot = strrchr(full_name, '.');
|
|
651
707
|
char const *name;
|
|
@@ -661,13 +717,7 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
661
717
|
}
|
|
662
718
|
|
|
663
719
|
char entry_function_name[1024];
|
|
664
|
-
|
|
665
|
-
#if PYTHON_VERSION < 0x300
|
|
666
|
-
"init%s",
|
|
667
|
-
#else
|
|
668
|
-
"PyInit_%s",
|
|
669
|
-
#endif
|
|
670
|
-
name);
|
|
720
|
+
_fillExtensionModuleDllEntryFunctionName(tstate, entry_function_name, sizeof(entry_function_name), name);
|
|
671
721
|
|
|
672
722
|
#ifdef _WIN32
|
|
673
723
|
if (isVerbose()) {
|
|
@@ -675,6 +725,8 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
675
725
|
}
|
|
676
726
|
|
|
677
727
|
#ifndef _NUITKA_EXPERIMENTAL_DEBUG_STANDALONE
|
|
728
|
+
// Disable all but critical errors, prevents dialogs from showing.
|
|
729
|
+
// spell-checker: ignore SEM_FAILCRITICALERRORS
|
|
678
730
|
unsigned int old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
|
|
679
731
|
#endif
|
|
680
732
|
|
|
@@ -704,15 +756,18 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
704
756
|
|
|
705
757
|
// Report either way even if failed to get error message.
|
|
706
758
|
if (size == 0) {
|
|
707
|
-
PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed with error code %d", filename,
|
|
708
|
-
|
|
759
|
+
int ret = PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed with error code %d", filename,
|
|
760
|
+
error_code);
|
|
761
|
+
|
|
762
|
+
assert(ret >= 0);
|
|
709
763
|
} else {
|
|
710
764
|
// Strip trailing newline.
|
|
711
765
|
if (size >= 2 && error_message[size - 2] == '\r' && error_message[size - 1] == '\n') {
|
|
712
766
|
size -= 2;
|
|
713
767
|
error_message[size] = '\0';
|
|
714
768
|
}
|
|
715
|
-
PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed: %s", filename, error_message);
|
|
769
|
+
int ret = PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed: %s", filename, error_message);
|
|
770
|
+
assert(ret >= 0);
|
|
716
771
|
}
|
|
717
772
|
|
|
718
773
|
SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ImportError, buffer);
|
|
@@ -723,6 +778,15 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
723
778
|
#else
|
|
724
779
|
// This code would work for all versions, we are avoiding access to interpreter
|
|
725
780
|
// structure internals of 3.8 or higher.
|
|
781
|
+
// spell-checker: ignore getdlopenflags,dlopenflags
|
|
782
|
+
|
|
783
|
+
#ifdef __wasi__
|
|
784
|
+
const char *error = "dynamic libraries are not implemented in wasi";
|
|
785
|
+
SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ImportError, error);
|
|
786
|
+
return NULL;
|
|
787
|
+
|
|
788
|
+
entrypoint_t entrypoint = NULL;
|
|
789
|
+
#else
|
|
726
790
|
static PyObject *dlopenflags_object = NULL;
|
|
727
791
|
if (dlopenflags_object == NULL) {
|
|
728
792
|
dlopenflags_object = CALL_FUNCTION_NO_ARGS(tstate, Nuitka_SysGetObject("getdlopenflags"));
|
|
@@ -747,16 +811,11 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
747
811
|
}
|
|
748
812
|
|
|
749
813
|
entrypoint_t entrypoint = (entrypoint_t)dlsym(handle, entry_function_name);
|
|
814
|
+
#endif // __wasi__
|
|
750
815
|
#endif
|
|
751
816
|
assert(entrypoint);
|
|
752
817
|
|
|
753
|
-
|
|
754
|
-
char *old_context = _Py_PackageContext;
|
|
755
|
-
#else
|
|
756
|
-
char const *old_context = _Py_PackageContext;
|
|
757
|
-
#endif
|
|
758
|
-
|
|
759
|
-
_Py_PackageContext = (char *)package;
|
|
818
|
+
char const *old_context = NuitkaImport_SwapPackageContext(package);
|
|
760
819
|
|
|
761
820
|
// Finally call into the DLL.
|
|
762
821
|
PGO_onModuleEntered(full_name);
|
|
@@ -777,7 +836,13 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
777
836
|
PySys_WriteStderr("import %s # return from entrypoint\n", full_name);
|
|
778
837
|
}
|
|
779
838
|
|
|
780
|
-
|
|
839
|
+
#if 0
|
|
840
|
+
PRINT_STRING("FRESH");
|
|
841
|
+
PRINT_ITEM(module);
|
|
842
|
+
PRINT_NEW_LINE();
|
|
843
|
+
#endif
|
|
844
|
+
|
|
845
|
+
NuitkaImport_SwapPackageContext(old_context);
|
|
781
846
|
|
|
782
847
|
#if PYTHON_VERSION < 0x300
|
|
783
848
|
PyObject *module = Nuitka_GetModuleString(tstate, full_name);
|
|
@@ -806,7 +871,10 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
806
871
|
|
|
807
872
|
PyObject *full_name_obj = Nuitka_String_FromString(full_name);
|
|
808
873
|
|
|
809
|
-
PyObject *
|
|
874
|
+
PyObject *origin = Nuitka_String_FromFilename(filename);
|
|
875
|
+
|
|
876
|
+
PyObject *spec_value = createModuleSpec(tstate, full_name_obj, origin, is_package);
|
|
877
|
+
CHECK_OBJECT(spec_value);
|
|
810
878
|
|
|
811
879
|
module = PyModule_FromDefAndSpec(def, spec_value);
|
|
812
880
|
|
|
@@ -818,16 +886,26 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
818
886
|
return NULL;
|
|
819
887
|
}
|
|
820
888
|
|
|
821
|
-
setModuleFileValue(tstate, module, filename);
|
|
822
|
-
PyObject_SetAttrString((PyObject *)spec_value, "origin",
|
|
823
|
-
LOOKUP_ATTRIBUTE(tstate, module, const_str_plain___file__));
|
|
824
889
|
SET_ATTRIBUTE(tstate, module, const_str_plain___spec__, spec_value);
|
|
825
890
|
|
|
891
|
+
setModuleFileValue(tstate, module, filename);
|
|
892
|
+
|
|
893
|
+
/* Set __path__ properly, unlike frozen module importer does. */
|
|
894
|
+
PyObject *path_list = _makeDunderPathObject(tstate, origin);
|
|
895
|
+
|
|
896
|
+
int res = PyObject_SetAttr(module, const_str_plain___path__, path_list);
|
|
897
|
+
if (unlikely(res != 0)) {
|
|
898
|
+
return NULL;
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
Py_DECREF(path_list);
|
|
902
|
+
|
|
903
|
+
SET_ATTRIBUTE(tstate, spec_value, const_str_plain__initializing, Py_True);
|
|
904
|
+
|
|
826
905
|
Nuitka_SetModule(full_name_obj, module);
|
|
827
906
|
Py_DECREF(full_name_obj);
|
|
828
907
|
|
|
829
|
-
|
|
830
|
-
int res = PyModule_ExecDef(module, def);
|
|
908
|
+
res = PyModule_ExecDef(module, def);
|
|
831
909
|
SET_ATTRIBUTE(tstate, spec_value, const_str_plain__initializing, Py_False);
|
|
832
910
|
|
|
833
911
|
Py_DECREF(spec_value);
|
|
@@ -847,6 +925,8 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
847
925
|
} else {
|
|
848
926
|
def = PyModule_GetDef(module);
|
|
849
927
|
|
|
928
|
+
def->m_base.m_init = entrypoint;
|
|
929
|
+
|
|
850
930
|
// Set "__spec__" and "__file__" after load.
|
|
851
931
|
setModuleFileValue(tstate, module, filename);
|
|
852
932
|
PyObject *full_name_obj = Nuitka_String_FromString(full_name);
|
|
@@ -855,7 +935,7 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
855
935
|
|
|
856
936
|
SET_ATTRIBUTE(tstate, module, const_str_plain___spec__, spec_value);
|
|
857
937
|
|
|
858
|
-
// Fixup __package__ after load. It seems some modules ignore _Py_PackageContext value.
|
|
938
|
+
// Fixup "__package__" after load. It seems some modules ignore _Py_PackageContext value.
|
|
859
939
|
// so we patch it up here if it's None, but a package was specified.
|
|
860
940
|
if (package != NULL) {
|
|
861
941
|
PyObject *package_name = LOOKUP_ATTRIBUTE(tstate, module, const_str_plain___package__);
|
|
@@ -876,6 +956,10 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
876
956
|
if (likely(def != NULL)) {
|
|
877
957
|
def->m_base.m_init = entrypoint;
|
|
878
958
|
}
|
|
959
|
+
|
|
960
|
+
#if PYTHON_VERSION >= 0x3d0
|
|
961
|
+
Nuitka_SetModuleString(full_name, module);
|
|
962
|
+
#endif
|
|
879
963
|
#else
|
|
880
964
|
PyModuleDef *def = PyModule_GetDef(module);
|
|
881
965
|
|
|
@@ -905,27 +989,27 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
905
989
|
#else
|
|
906
990
|
PyObject *full_name_obj = PyUnicode_FromString(full_name);
|
|
907
991
|
CHECK_OBJECT(full_name_obj);
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
#else
|
|
911
|
-
PyObject *filename_obj = PyUnicode_FromString(filename);
|
|
912
|
-
#endif
|
|
992
|
+
PyObject *filename_obj = Nuitka_String_FromFilename(filename);
|
|
993
|
+
|
|
913
994
|
CHECK_OBJECT(filename_obj);
|
|
914
995
|
|
|
996
|
+
#if PYTHON_VERSION < 0x3d0
|
|
915
997
|
int res = _PyImport_FixupExtensionObject(module, full_name_obj, filename_obj
|
|
916
998
|
#if PYTHON_VERSION >= 0x370
|
|
917
999
|
,
|
|
918
1000
|
Nuitka_GetSysModules()
|
|
919
1001
|
#endif
|
|
920
|
-
|
|
921
1002
|
);
|
|
1003
|
+
#endif
|
|
922
1004
|
|
|
923
1005
|
Py_DECREF(full_name_obj);
|
|
924
1006
|
Py_DECREF(filename_obj);
|
|
925
1007
|
|
|
1008
|
+
#if PYTHON_VERSION < 0x3d0
|
|
926
1009
|
if (unlikely(res == -1)) {
|
|
927
1010
|
return NULL;
|
|
928
1011
|
}
|
|
1012
|
+
#endif
|
|
929
1013
|
#endif
|
|
930
1014
|
|
|
931
1015
|
return module;
|
|
@@ -959,7 +1043,7 @@ static void loadTriggeredModule(PyThreadState *tstate, char const *name, char co
|
|
|
959
1043
|
}
|
|
960
1044
|
}
|
|
961
1045
|
|
|
962
|
-
#if PYTHON_VERSION >=
|
|
1046
|
+
#if PYTHON_VERSION >= 0x300
|
|
963
1047
|
static void _fixupSpecAttribute(PyThreadState *tstate, PyObject *module) {
|
|
964
1048
|
PyObject *spec_value = LOOKUP_ATTRIBUTE(tstate, module, const_str_plain___spec__);
|
|
965
1049
|
|
|
@@ -978,35 +1062,13 @@ static PyObject *loadModule(PyThreadState *tstate, PyObject *module, PyObject *m
|
|
|
978
1062
|
struct Nuitka_MetaPathBasedLoaderEntry const *entry) {
|
|
979
1063
|
#ifdef _NUITKA_STANDALONE
|
|
980
1064
|
if ((entry->flags & NUITKA_EXTENSION_MODULE_FLAG) != 0) {
|
|
981
|
-
|
|
982
|
-
// and translate these into directory separators.
|
|
983
|
-
#ifdef _WIN32
|
|
984
|
-
wchar_t filename[MAXPATHLEN + 1] = {0};
|
|
985
|
-
|
|
986
|
-
appendWStringSafeW(filename, getBinaryDirectoryWideChars(true), sizeof(filename) / sizeof(wchar_t));
|
|
987
|
-
appendCharSafeW(filename, SEP, sizeof(filename) / sizeof(wchar_t));
|
|
988
|
-
appendModulenameAsPathW(filename, entry->name, sizeof(filename) / sizeof(wchar_t));
|
|
989
|
-
appendStringSafeW(filename, ".pyd", sizeof(filename) / sizeof(wchar_t));
|
|
990
|
-
#else
|
|
991
|
-
char filename[MAXPATHLEN + 1] = {0};
|
|
992
|
-
|
|
993
|
-
appendStringSafe(filename, getBinaryDirectoryHostEncoded(true), sizeof(filename));
|
|
994
|
-
appendCharSafe(filename, SEP, sizeof(filename));
|
|
995
|
-
appendModulenameAsPath(filename, entry->name, sizeof(filename));
|
|
996
|
-
appendStringSafe(filename, ".so", sizeof(filename));
|
|
997
|
-
|
|
998
|
-
#endif
|
|
1065
|
+
bool is_package = (entry->flags & NUITKA_PACKAGE_FLAG) != 0;
|
|
999
1066
|
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
PyObject *spec_value =
|
|
1004
|
-
createModuleSpec(tstate, module_name, LOOKUP_ATTRIBUTE(tstate, module, const_str_plain___file__), false);
|
|
1067
|
+
filename_char_t filename[MAXPATHLEN + 1] = {0};
|
|
1068
|
+
_makeModuleCFilenameValue(filename, sizeof(filename) / sizeof(filename_char_t), entry->name, module_name,
|
|
1069
|
+
is_package);
|
|
1005
1070
|
|
|
1006
|
-
|
|
1007
|
-
#endif
|
|
1008
|
-
|
|
1009
|
-
callIntoExtensionModule(tstate, entry->name, filename);
|
|
1071
|
+
callIntoExtensionModule(tstate, entry->name, filename, is_package);
|
|
1010
1072
|
} else
|
|
1011
1073
|
#endif
|
|
1012
1074
|
if ((entry->flags & NUITKA_BYTECODE_FLAG) != 0) {
|
|
@@ -1022,20 +1084,26 @@ static PyObject *loadModule(PyThreadState *tstate, PyObject *module, PyObject *m
|
|
|
1022
1084
|
abort();
|
|
1023
1085
|
}
|
|
1024
1086
|
|
|
1025
|
-
return loadModuleFromCodeObject(module, code_object, entry->name,
|
|
1087
|
+
return loadModuleFromCodeObject(tstate, module, code_object, entry->name,
|
|
1088
|
+
(entry->flags & NUITKA_PACKAGE_FLAG) != 0);
|
|
1026
1089
|
} else {
|
|
1027
1090
|
assert((entry->flags & NUITKA_EXTENSION_MODULE_FLAG) == 0);
|
|
1028
|
-
assert(entry->
|
|
1091
|
+
assert(entry->python_init_func);
|
|
1029
1092
|
|
|
1030
|
-
|
|
1031
|
-
|
|
1093
|
+
{
|
|
1094
|
+
NUITKA_MAY_BE_UNUSED bool res = Nuitka_SetModule(module_name, module);
|
|
1095
|
+
assert(res != false);
|
|
1096
|
+
}
|
|
1032
1097
|
|
|
1033
1098
|
// Run the compiled module code, we get the module returned.
|
|
1034
|
-
|
|
1099
|
+
#if PYTHON_VERSION < 0x300
|
|
1100
|
+
NUITKA_MAY_BE_UNUSED
|
|
1101
|
+
#endif
|
|
1102
|
+
PyObject *result = entry->python_init_func(tstate, module, entry);
|
|
1035
1103
|
CHECK_OBJECT_X(result);
|
|
1036
1104
|
|
|
1037
|
-
#if PYTHON_VERSION >=
|
|
1038
|
-
if (result != NULL) {
|
|
1105
|
+
#if PYTHON_VERSION >= 0x300
|
|
1106
|
+
if (likely(result != NULL)) {
|
|
1039
1107
|
_fixupSpecAttribute(tstate, result);
|
|
1040
1108
|
}
|
|
1041
1109
|
#endif
|
|
@@ -1071,8 +1139,16 @@ static PyObject *_EXECUTE_EMBEDDED_MODULE(PyThreadState *tstate, PyObject *modul
|
|
|
1071
1139
|
PyObject *result = NULL;
|
|
1072
1140
|
|
|
1073
1141
|
if (entry != NULL) {
|
|
1142
|
+
#ifdef _NUITKA_EXPERIMENTAL_FORCE_GC_COLLECT_ON_IMPORT
|
|
1143
|
+
PyGC_Collect();
|
|
1144
|
+
#endif
|
|
1145
|
+
|
|
1074
1146
|
result = loadModule(tstate, module, module_name, entry);
|
|
1075
1147
|
|
|
1148
|
+
#ifdef _NUITKA_EXPERIMENTAL_FORCE_GC_COLLECT_ON_IMPORT
|
|
1149
|
+
PyGC_Collect();
|
|
1150
|
+
#endif
|
|
1151
|
+
|
|
1076
1152
|
if (unlikely(result == NULL)) {
|
|
1077
1153
|
return NULL;
|
|
1078
1154
|
}
|
|
@@ -1102,7 +1178,7 @@ static PyObject *_EXECUTE_EMBEDDED_MODULE(PyThreadState *tstate, PyObject *modul
|
|
|
1102
1178
|
return result;
|
|
1103
1179
|
}
|
|
1104
1180
|
|
|
1105
|
-
|
|
1181
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
1106
1182
|
return Py_None;
|
|
1107
1183
|
}
|
|
1108
1184
|
|
|
@@ -1210,7 +1286,7 @@ static PyObject *_nuitka_loader_is_package(PyObject *self, PyObject *args, PyObj
|
|
|
1210
1286
|
result = Py_None;
|
|
1211
1287
|
}
|
|
1212
1288
|
|
|
1213
|
-
|
|
1289
|
+
Py_INCREF_IMMORTAL(result);
|
|
1214
1290
|
return result;
|
|
1215
1291
|
}
|
|
1216
1292
|
|
|
@@ -1225,7 +1301,9 @@ static PyObject *_nuitka_loader_iter_modules(struct Nuitka_LoaderObject *self, P
|
|
|
1225
1301
|
return NULL;
|
|
1226
1302
|
}
|
|
1227
1303
|
|
|
1228
|
-
|
|
1304
|
+
NUITKA_MAY_BE_UNUSED PyThreadState *tstate = PyThreadState_GET();
|
|
1305
|
+
|
|
1306
|
+
PyObject *result = MAKE_LIST_EMPTY(tstate, 0);
|
|
1229
1307
|
|
|
1230
1308
|
struct Nuitka_MetaPathBasedLoaderEntry *current = loader_entries;
|
|
1231
1309
|
assert(current);
|
|
@@ -1240,7 +1318,7 @@ static PyObject *_nuitka_loader_iter_modules(struct Nuitka_LoaderObject *self, P
|
|
|
1240
1318
|
|
|
1241
1319
|
while (current->name != NULL) {
|
|
1242
1320
|
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
1243
|
-
current->name =
|
|
1321
|
+
current->name = UN_TRANSLATE(current->name);
|
|
1244
1322
|
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
1245
1323
|
}
|
|
1246
1324
|
|
|
@@ -1281,9 +1359,9 @@ static PyObject *_nuitka_loader_iter_modules(struct Nuitka_LoaderObject *self, P
|
|
|
1281
1359
|
Py_DECREF(old);
|
|
1282
1360
|
}
|
|
1283
1361
|
|
|
1284
|
-
PyObject *r = MAKE_TUPLE_EMPTY(2);
|
|
1362
|
+
PyObject *r = MAKE_TUPLE_EMPTY(tstate, 2);
|
|
1285
1363
|
PyTuple_SET_ITEM(r, 0, name);
|
|
1286
|
-
|
|
1364
|
+
PyTuple_SET_ITEM_IMMORTAL(r, 1, BOOL_FROM((current->flags & NUITKA_PACKAGE_FLAG) != 0));
|
|
1287
1365
|
|
|
1288
1366
|
LIST_APPEND1(result, r);
|
|
1289
1367
|
|
|
@@ -1354,35 +1432,6 @@ PyObject *getImportLibBootstrapModule(void) {
|
|
|
1354
1432
|
}
|
|
1355
1433
|
#endif
|
|
1356
1434
|
|
|
1357
|
-
#if PYTHON_VERSION >= 0x340
|
|
1358
|
-
|
|
1359
|
-
static PyObject *_nuitka_loader_repr_module(PyObject *self, PyObject *args, PyObject *kwds) {
|
|
1360
|
-
PyObject *module;
|
|
1361
|
-
PyObject *unused;
|
|
1362
|
-
|
|
1363
|
-
int res =
|
|
1364
|
-
PyArg_ParseTupleAndKeywords(args, kwds, "O|O:module_repr", (char **)_kw_list_find_module, &module, &unused);
|
|
1365
|
-
|
|
1366
|
-
if (unlikely(res == 0)) {
|
|
1367
|
-
return NULL;
|
|
1368
|
-
}
|
|
1369
|
-
|
|
1370
|
-
PyThreadState *tstate = PyThreadState_GET();
|
|
1371
|
-
|
|
1372
|
-
return PyUnicode_FromFormat("<module '%s' from %R>", PyModule_GetName(module),
|
|
1373
|
-
Nuitka_GetFilenameObject(tstate, module));
|
|
1374
|
-
}
|
|
1375
|
-
|
|
1376
|
-
static PyObject *getModuleSpecClass(PyObject *importlib_module) {
|
|
1377
|
-
static PyObject *module_spec_class = NULL;
|
|
1378
|
-
|
|
1379
|
-
if (module_spec_class == NULL) {
|
|
1380
|
-
module_spec_class = PyObject_GetAttrString(importlib_module, "ModuleSpec");
|
|
1381
|
-
}
|
|
1382
|
-
|
|
1383
|
-
return module_spec_class;
|
|
1384
|
-
}
|
|
1385
|
-
|
|
1386
1435
|
static PyObject *getModuleFileValue(PyThreadState *tstate, struct Nuitka_MetaPathBasedLoaderEntry const *entry) {
|
|
1387
1436
|
PyObject *dir_name = getModuleDirectory(tstate, entry);
|
|
1388
1437
|
|
|
@@ -1419,6 +1468,35 @@ static PyObject *getModuleFileValue(PyThreadState *tstate, struct Nuitka_MetaPat
|
|
|
1419
1468
|
return result;
|
|
1420
1469
|
}
|
|
1421
1470
|
|
|
1471
|
+
#if PYTHON_VERSION >= 0x300
|
|
1472
|
+
|
|
1473
|
+
static PyObject *_nuitka_loader_repr_module(PyObject *self, PyObject *args, PyObject *kwds) {
|
|
1474
|
+
PyObject *module;
|
|
1475
|
+
PyObject *unused;
|
|
1476
|
+
|
|
1477
|
+
int res =
|
|
1478
|
+
PyArg_ParseTupleAndKeywords(args, kwds, "O|O:module_repr", (char **)_kw_list_find_module, &module, &unused);
|
|
1479
|
+
|
|
1480
|
+
if (unlikely(res == 0)) {
|
|
1481
|
+
return NULL;
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
1485
|
+
|
|
1486
|
+
return PyUnicode_FromFormat("<module '%s' from %R>", PyModule_GetName(module),
|
|
1487
|
+
Nuitka_GetFilenameObject(tstate, module));
|
|
1488
|
+
}
|
|
1489
|
+
|
|
1490
|
+
static PyObject *getModuleSpecClass(PyObject *importlib_module) {
|
|
1491
|
+
static PyObject *module_spec_class = NULL;
|
|
1492
|
+
|
|
1493
|
+
if (module_spec_class == NULL) {
|
|
1494
|
+
module_spec_class = PyObject_GetAttrString(importlib_module, "ModuleSpec");
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
return module_spec_class;
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1422
1500
|
static PyObject *createModuleSpec(PyThreadState *tstate, PyObject *module_name, PyObject *origin, bool is_package) {
|
|
1423
1501
|
CHECK_OBJECT(module_name);
|
|
1424
1502
|
assert(Nuitka_String_Check(module_name));
|
|
@@ -1436,7 +1514,7 @@ static PyObject *createModuleSpec(PyThreadState *tstate, PyObject *module_name,
|
|
|
1436
1514
|
return NULL;
|
|
1437
1515
|
}
|
|
1438
1516
|
|
|
1439
|
-
PyObject *args = MAKE_TUPLE2(module_name, (PyObject *)&Nuitka_Loader_Type);
|
|
1517
|
+
PyObject *args = MAKE_TUPLE2(tstate, module_name, (PyObject *)&Nuitka_Loader_Type);
|
|
1440
1518
|
|
|
1441
1519
|
PyObject *kw_values[] = {is_package ? Py_True : Py_False, origin};
|
|
1442
1520
|
|
|
@@ -1522,7 +1600,7 @@ static PyObject *_nuitka_loader_find_spec(PyObject *self, PyObject *args, PyObje
|
|
|
1522
1600
|
PySys_WriteStderr("import %s # denied responsibility\n", full_name);
|
|
1523
1601
|
}
|
|
1524
1602
|
|
|
1525
|
-
|
|
1603
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
1526
1604
|
return Py_None;
|
|
1527
1605
|
}
|
|
1528
1606
|
|
|
@@ -1592,9 +1670,9 @@ static PyObject *_nuitka_loader_exec_module(PyObject *self, PyObject *args, PyOb
|
|
|
1592
1670
|
|
|
1593
1671
|
if (extension_module_filename != NULL) {
|
|
1594
1672
|
// Set filename attribute
|
|
1595
|
-
|
|
1673
|
+
bool b_res = SET_ATTRIBUTE(tstate, module, const_str_plain___file__, extension_module_filename);
|
|
1596
1674
|
|
|
1597
|
-
if (unlikely(
|
|
1675
|
+
if (unlikely(b_res == false)) {
|
|
1598
1676
|
// Might be refuted, which wouldn't be harmful.
|
|
1599
1677
|
CLEAR_ERROR_OCCURRED(tstate);
|
|
1600
1678
|
}
|
|
@@ -1662,13 +1740,13 @@ static PyObject *_nuitka_loader_find_distributions(PyObject *self, PyObject *arg
|
|
|
1662
1740
|
return NULL;
|
|
1663
1741
|
}
|
|
1664
1742
|
|
|
1665
|
-
|
|
1743
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
1744
|
+
|
|
1745
|
+
PyObject *temp = MAKE_LIST_EMPTY(tstate, 0);
|
|
1666
1746
|
|
|
1667
1747
|
Py_ssize_t pos = 0;
|
|
1668
1748
|
PyObject *distribution_name;
|
|
1669
1749
|
|
|
1670
|
-
PyThreadState *tstate = PyThreadState_GET();
|
|
1671
|
-
|
|
1672
1750
|
while (Nuitka_DistributionNext(&pos, &distribution_name)) {
|
|
1673
1751
|
bool include = false;
|
|
1674
1752
|
if (name == Py_None) {
|
|
@@ -1687,6 +1765,12 @@ static PyObject *_nuitka_loader_find_distributions(PyObject *self, PyObject *arg
|
|
|
1687
1765
|
if (include) {
|
|
1688
1766
|
// Create a distribution object from our data.
|
|
1689
1767
|
PyObject *distribution = Nuitka_Distribution_New(tstate, distribution_name);
|
|
1768
|
+
|
|
1769
|
+
if (distribution == NULL) {
|
|
1770
|
+
Py_DECREF(temp);
|
|
1771
|
+
return NULL;
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1690
1774
|
LIST_APPEND1(temp, distribution);
|
|
1691
1775
|
}
|
|
1692
1776
|
}
|
|
@@ -1698,7 +1782,7 @@ static PyObject *_nuitka_loader_find_distributions(PyObject *self, PyObject *arg
|
|
|
1698
1782
|
return result;
|
|
1699
1783
|
}
|
|
1700
1784
|
|
|
1701
|
-
static char const *_kw_list_sys_path_hook[] = {"
|
|
1785
|
+
static char const *_kw_list_sys_path_hook[] = {"path", NULL};
|
|
1702
1786
|
|
|
1703
1787
|
static PyObject *_nuitka_loader_sys_path_hook(PyObject *self, PyObject *args, PyObject *kwds) {
|
|
1704
1788
|
PyObject *path;
|
|
@@ -1722,7 +1806,7 @@ static PyObject *_nuitka_loader_sys_path_hook(PyObject *self, PyObject *args, Py
|
|
|
1722
1806
|
|
|
1723
1807
|
while (entry->name != NULL) {
|
|
1724
1808
|
if ((entry->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
1725
|
-
entry->name =
|
|
1809
|
+
entry->name = UN_TRANSLATE(entry->name);
|
|
1726
1810
|
entry->flags -= NUITKA_TRANSLATED_FLAG;
|
|
1727
1811
|
}
|
|
1728
1812
|
|
|
@@ -1761,7 +1845,7 @@ static PyMethodDef Nuitka_Loader_methods[] = {
|
|
|
1761
1845
|
{"find_module", (PyCFunction)_nuitka_loader_find_module, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
|
|
1762
1846
|
{"load_module", (PyCFunction)_nuitka_loader_load_module, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
|
|
1763
1847
|
{"is_package", (PyCFunction)_nuitka_loader_is_package, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
|
|
1764
|
-
#if PYTHON_VERSION >=
|
|
1848
|
+
#if PYTHON_VERSION >= 0x300
|
|
1765
1849
|
{"module_repr", (PyCFunction)_nuitka_loader_repr_module, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
|
|
1766
1850
|
{"find_spec", (PyCFunction)_nuitka_loader_find_spec, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
|
|
1767
1851
|
#endif
|
|
@@ -1779,7 +1863,7 @@ static PyMethodDef Nuitka_Loader_methods[] = {
|
|
|
1779
1863
|
|
|
1780
1864
|
{"sys_path_hook", (PyCFunction)_nuitka_loader_sys_path_hook, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
|
|
1781
1865
|
|
|
1782
|
-
{NULL, NULL}
|
|
1866
|
+
{NULL, NULL} // terminator
|
|
1783
1867
|
};
|
|
1784
1868
|
|
|
1785
1869
|
static PyObject *Nuitka_Loader_tp_repr(struct Nuitka_LoaderObject *loader) {
|
|
@@ -1809,15 +1893,29 @@ static void Nuitka_Loader_tp_dealloc(struct Nuitka_LoaderObject *loader) {
|
|
|
1809
1893
|
|
|
1810
1894
|
static int Nuitka_Loader_tp_traverse(struct Nuitka_LoaderObject *loader, visitproc visit, void *arg) { return 0; }
|
|
1811
1895
|
|
|
1896
|
+
static PyObject *Nuitka_Loader_get_name(struct Nuitka_LoaderObject *loader, void *closure) {
|
|
1897
|
+
PyObject *result = Nuitka_String_FromString(loader->m_loader_entry->name);
|
|
1898
|
+
|
|
1899
|
+
return result;
|
|
1900
|
+
}
|
|
1901
|
+
static PyObject *Nuitka_Loader_get_path(struct Nuitka_LoaderObject *loader, void *closure) {
|
|
1902
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
1903
|
+
PyObject *result = getModuleFileValue(tstate, loader->m_loader_entry);
|
|
1904
|
+
|
|
1905
|
+
return result;
|
|
1906
|
+
}
|
|
1907
|
+
|
|
1812
1908
|
static PyObject *Nuitka_Loader_get__module__(struct Nuitka_LoaderObject *loader, void *closure) {
|
|
1813
1909
|
PyObject *result = const_str_plain___nuitka__;
|
|
1814
1910
|
|
|
1815
|
-
|
|
1911
|
+
Py_INCREF_IMMORTAL(result);
|
|
1816
1912
|
return result;
|
|
1817
1913
|
}
|
|
1818
1914
|
|
|
1819
|
-
static PyGetSetDef
|
|
1820
|
-
|
|
1915
|
+
static PyGetSetDef Nuitka_Loader_tp_getset[] = {{(char *)"__module__", (getter)Nuitka_Loader_get__module__, NULL, NULL},
|
|
1916
|
+
{(char *)"name", (getter)Nuitka_Loader_get_name, NULL, NULL},
|
|
1917
|
+
{(char *)"path", (getter)Nuitka_Loader_get_path, NULL, NULL},
|
|
1918
|
+
{NULL}};
|
|
1821
1919
|
|
|
1822
1920
|
PyTypeObject Nuitka_Loader_Type = {
|
|
1823
1921
|
PyVarObject_HEAD_INIT(NULL, 0) "nuitka_module_loader",
|
|
@@ -1848,7 +1946,7 @@ PyTypeObject Nuitka_Loader_Type = {
|
|
|
1848
1946
|
0, // tp_iternext
|
|
1849
1947
|
Nuitka_Loader_methods, // tp_methods
|
|
1850
1948
|
0, // tp_members
|
|
1851
|
-
|
|
1949
|
+
Nuitka_Loader_tp_getset, // tp_getset
|
|
1852
1950
|
};
|
|
1853
1951
|
|
|
1854
1952
|
/* Used by modules to register child loaders for packages. */
|
|
@@ -1863,8 +1961,44 @@ PyObject *Nuitka_Loader_New(struct Nuitka_MetaPathBasedLoaderEntry const *entry)
|
|
|
1863
1961
|
return (PyObject *)result;
|
|
1864
1962
|
}
|
|
1865
1963
|
|
|
1866
|
-
|
|
1867
|
-
|
|
1964
|
+
#ifdef _NUITKA_MODULE
|
|
1965
|
+
void updateMetaPathBasedLoaderModuleRoot(char const *module_root_name) {
|
|
1966
|
+
assert(module_root_name != NULL);
|
|
1967
|
+
char const *last_dot = strrchr(module_root_name, '.');
|
|
1968
|
+
|
|
1969
|
+
if (last_dot != NULL) {
|
|
1970
|
+
struct Nuitka_MetaPathBasedLoaderEntry *current = loader_entries;
|
|
1971
|
+
assert(current);
|
|
1972
|
+
|
|
1973
|
+
while (current->name != NULL) {
|
|
1974
|
+
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
1975
|
+
current->name = UN_TRANSLATE(current->name);
|
|
1976
|
+
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
1977
|
+
}
|
|
1978
|
+
|
|
1979
|
+
char name[2048];
|
|
1980
|
+
|
|
1981
|
+
if (strcmp(last_dot + 1, current->name) == 0) {
|
|
1982
|
+
copyStringSafeN(name, module_root_name, last_dot - module_root_name + 1, sizeof(name));
|
|
1983
|
+
appendStringSafe(name, current->name, sizeof(name));
|
|
1984
|
+
|
|
1985
|
+
current->name = strdup(name);
|
|
1986
|
+
} else if (strncmp(last_dot + 1, current->name, strlen(last_dot + 1)) == 0 &&
|
|
1987
|
+
current->name[strlen(last_dot + 1)] == '.') {
|
|
1988
|
+
copyStringSafeN(name, module_root_name, last_dot - module_root_name + 1, sizeof(name));
|
|
1989
|
+
appendStringSafe(name, current->name, sizeof(name));
|
|
1990
|
+
|
|
1991
|
+
current->name = strdup(name);
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1994
|
+
current++;
|
|
1995
|
+
}
|
|
1996
|
+
}
|
|
1997
|
+
}
|
|
1998
|
+
#endif
|
|
1999
|
+
|
|
2000
|
+
void registerMetaPathBasedLoader(struct Nuitka_MetaPathBasedLoaderEntry *_loader_entries,
|
|
2001
|
+
unsigned char **bytecode_data) {
|
|
1868
2002
|
// Do it only once.
|
|
1869
2003
|
if (loader_entries) {
|
|
1870
2004
|
assert(_loader_entries == loader_entries);
|
|
@@ -1878,48 +2012,22 @@ void registerMetaPathBasedUnfreezer(struct Nuitka_MetaPathBasedLoaderEntry *_loa
|
|
|
1878
2012
|
PySys_WriteStderr("Setup nuitka compiled module/bytecode/extension importer.\n");
|
|
1879
2013
|
}
|
|
1880
2014
|
|
|
1881
|
-
|
|
1882
|
-
if (_Py_PackageContext != NULL) {
|
|
1883
|
-
char const *last_dot = strrchr(_Py_PackageContext, '.');
|
|
1884
|
-
|
|
1885
|
-
if (last_dot != NULL) {
|
|
1886
|
-
struct Nuitka_MetaPathBasedLoaderEntry *current = _loader_entries;
|
|
1887
|
-
assert(current);
|
|
1888
|
-
|
|
1889
|
-
while (current->name != NULL) {
|
|
1890
|
-
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
1891
|
-
current->name = UNTRANSLATE(current->name);
|
|
1892
|
-
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
1893
|
-
}
|
|
1894
|
-
|
|
1895
|
-
char name[2048];
|
|
1896
|
-
|
|
1897
|
-
if (strcmp(last_dot + 1, current->name) == 0) {
|
|
1898
|
-
copyStringSafeN(name, _Py_PackageContext, last_dot - _Py_PackageContext + 1, sizeof(name));
|
|
1899
|
-
appendStringSafe(name, current->name, sizeof(name));
|
|
1900
|
-
|
|
1901
|
-
current->name = strdup(name);
|
|
1902
|
-
} else if (strncmp(last_dot + 1, current->name, strlen(last_dot + 1)) == 0 &&
|
|
1903
|
-
current->name[strlen(last_dot + 1)] == '.') {
|
|
1904
|
-
copyStringSafeN(name, _Py_PackageContext, last_dot - _Py_PackageContext + 1, sizeof(name));
|
|
1905
|
-
appendStringSafe(name, current->name, sizeof(name));
|
|
1906
|
-
|
|
1907
|
-
current->name = strdup(name);
|
|
1908
|
-
}
|
|
2015
|
+
loader_entries = _loader_entries;
|
|
1909
2016
|
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
2017
|
+
#if defined(_NUITKA_MODULE) && PYTHON_VERSION < 0x3c0
|
|
2018
|
+
if (_Py_PackageContext != NULL) {
|
|
2019
|
+
updateMetaPathBasedLoaderModuleRoot(_Py_PackageContext);
|
|
1913
2020
|
}
|
|
1914
2021
|
#endif
|
|
1915
2022
|
|
|
1916
|
-
loader_entries = _loader_entries;
|
|
1917
|
-
|
|
1918
2023
|
Nuitka_PyType_Ready(&Nuitka_Loader_Type, NULL, true, false, false, false, false);
|
|
1919
2024
|
|
|
1920
2025
|
#ifdef _NUITKA_EXE
|
|
1921
|
-
|
|
1922
|
-
|
|
2026
|
+
{
|
|
2027
|
+
NUITKA_MAY_BE_UNUSED int res =
|
|
2028
|
+
PyDict_SetItemString((PyObject *)dict_builtin, "__nuitka_loader_type", (PyObject *)&Nuitka_Loader_Type);
|
|
2029
|
+
assert(res == 0);
|
|
2030
|
+
}
|
|
1923
2031
|
#endif
|
|
1924
2032
|
|
|
1925
2033
|
#if PYTHON_VERSION >= 0x370
|
|
@@ -1961,6 +2069,7 @@ void setEarlyFrozenModulesFileAttribute(PyThreadState *tstate) {
|
|
|
1961
2069
|
PyObject *file_value = MAKE_RELATIVE_PATH_FROM_NAME(Nuitka_String_AsString(key), is_package, false);
|
|
1962
2070
|
PyObject_SetAttr(value, const_str_plain___file__, file_value);
|
|
1963
2071
|
Py_DECREF(file_value);
|
|
2072
|
+
CHECK_OBJECT(file_value);
|
|
1964
2073
|
}
|
|
1965
2074
|
}
|
|
1966
2075
|
}
|
|
@@ -1972,3 +2081,18 @@ void setEarlyFrozenModulesFileAttribute(PyThreadState *tstate) {
|
|
|
1972
2081
|
|
|
1973
2082
|
// The importlib distribution class is implemented in a separate file.
|
|
1974
2083
|
#include "MetaPathBasedLoaderImportlibMetadataDistribution.c"
|
|
2084
|
+
|
|
2085
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
2086
|
+
// integrates with CPython, but also works on its own.
|
|
2087
|
+
//
|
|
2088
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
2089
|
+
// you may not use this file except in compliance with the License.
|
|
2090
|
+
// You may obtain a copy of the License at
|
|
2091
|
+
//
|
|
2092
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2093
|
+
//
|
|
2094
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
2095
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2096
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2097
|
+
// See the License for the specific language governing permissions and
|
|
2098
|
+
// limitations under the License.
|