Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.4.8__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Nuitka-winsvc might be problematic. Click here for more details.
- Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka-run.cmd +9 -9
- Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka.cmd +15 -15
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/METADATA +4 -3
- Nuitka_winsvc-2.4.8.dist-info/RECORD +954 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/WHEEL +1 -1
- nuitka/Builtins.py +18 -17
- nuitka/BytecodeCaching.py +24 -20
- nuitka/Bytecodes.py +23 -19
- nuitka/CacheCleanup.py +28 -23
- nuitka/Constants.py +19 -17
- nuitka/Errors.py +23 -17
- nuitka/HardImportRegistry.py +400 -0
- nuitka/MainControl.py +200 -112
- nuitka/ModuleRegistry.py +83 -20
- nuitka/OptionParsing.py +368 -175
- nuitka/Options.py +632 -213
- nuitka/OutputDirectories.py +40 -21
- nuitka/PostProcessing.py +73 -50
- nuitka/Progress.py +58 -24
- nuitka/PythonFlavors.py +141 -32
- nuitka/PythonOperators.py +18 -17
- nuitka/PythonVersions.py +106 -19
- nuitka/Serialization.py +68 -55
- nuitka/SourceCodeReferences.py +19 -17
- nuitka/Tracing.py +108 -70
- nuitka/TreeXML.py +31 -26
- nuitka/Variables.py +39 -41
- nuitka/Version.py +21 -7
- nuitka/__init__.py +5 -4
- nuitka/__main__.py +95 -29
- nuitka/__past__.py +44 -34
- nuitka/build/Backend.scons +202 -140
- nuitka/build/CCompilerVersion.scons +39 -31
- nuitka/build/DataComposerInterface.py +20 -17
- nuitka/build/Onefile.scons +50 -54
- nuitka/build/SconsCaching.py +93 -90
- nuitka/build/SconsCompilerSettings.py +157 -69
- nuitka/build/SconsHacks.py +25 -19
- nuitka/build/SconsInterface.py +154 -54
- nuitka/build/SconsProgress.py +19 -18
- nuitka/build/SconsSpawn.py +62 -33
- nuitka/build/SconsUtils.py +147 -55
- nuitka/build/__init__.py +5 -4
- nuitka/build/include/nuitka/allocator.h +105 -22
- nuitka/build/include/nuitka/builtins.h +17 -17
- nuitka/build/include/nuitka/calling.h +18 -18
- nuitka/build/include/nuitka/checkers.h +17 -18
- nuitka/build/include/nuitka/checksum_tools.h +14 -19
- nuitka/build/include/nuitka/compiled_asyncgen.h +18 -18
- nuitka/build/include/nuitka/compiled_cell.h +33 -18
- nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
- nuitka/build/include/nuitka/compiled_frame.h +91 -53
- nuitka/build/include/nuitka/compiled_function.h +42 -20
- nuitka/build/include/nuitka/compiled_generator.h +24 -18
- nuitka/build/include/nuitka/compiled_method.h +17 -18
- nuitka/build/include/nuitka/constants.h +29 -18
- nuitka/build/include/nuitka/constants_blob.h +17 -17
- nuitka/build/include/nuitka/environment_variables.h +30 -0
- nuitka/build/include/nuitka/environment_variables_system.h +45 -0
- nuitka/build/include/nuitka/exception_groups.h +23 -26
- nuitka/build/include/nuitka/exceptions.h +593 -190
- nuitka/build/include/nuitka/filesystem_paths.h +26 -20
- nuitka/build/include/nuitka/freelists.h +38 -18
- nuitka/build/include/nuitka/helper/attributes.h +24 -18
- nuitka/build/include/nuitka/helper/boolean.h +17 -17
- nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
- nuitka/build/include/nuitka/helper/bytes.h +14 -15
- nuitka/build/include/nuitka/helper/calling_generated.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
- nuitka/build/include/nuitka/helper/complex.h +17 -17
- nuitka/build/include/nuitka/helper/dictionaries.h +24 -22
- nuitka/build/include/nuitka/helper/floats.h +17 -18
- nuitka/build/include/nuitka/helper/import_hard.h +25 -17
- nuitka/build/include/nuitka/helper/indexes.h +17 -18
- nuitka/build/include/nuitka/helper/ints.h +32 -20
- nuitka/build/include/nuitka/helper/iterators.h +17 -17
- nuitka/build/include/nuitka/helper/lists.h +26 -24
- nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
- nuitka/build/include/nuitka/helper/mappings.h +17 -18
- nuitka/build/include/nuitka/helper/operations.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_add.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_sub.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_add.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_sub.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/raising.h +29 -17
- nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
- nuitka/build/include/nuitka/helper/richcomparisons.h +14 -14
- nuitka/build/include/nuitka/helper/sequences.h +19 -13
- nuitka/build/include/nuitka/helper/sets.h +11 -12
- nuitka/build/include/nuitka/helper/slices.h +31 -25
- nuitka/build/include/nuitka/helper/strings.h +16 -17
- nuitka/build/include/nuitka/helper/subscripts.h +18 -201
- nuitka/build/include/nuitka/helper/tuples.h +64 -52
- nuitka/build/include/nuitka/helpers.h +38 -20
- nuitka/build/include/nuitka/importing.h +28 -21
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +128 -46
- nuitka/build/include/nuitka/printing.h +22 -17
- nuitka/build/include/nuitka/python_pgo.h +19 -18
- nuitka/build/include/nuitka/safe_string_ops.h +20 -18
- nuitka/build/include/nuitka/threading.h +32 -33
- nuitka/build/include/nuitka/tracing.h +28 -18
- nuitka/build/include/nuitka/type_aliases.h +27 -0
- nuitka/build/include/nuitka/unfreezing.h +29 -23
- nuitka/build/inline_copy/bin/scons.py +14 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
- nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
- nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
- nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
- nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
- nuitka/build/inline_copy/zlib/LICENSE +22 -0
- nuitka/build/inline_copy/zlib/crc32.c +1049 -0
- nuitka/build/inline_copy/zlib/crc32.h +9446 -0
- nuitka/build/inline_copy/zlib/zconf.h +551 -0
- nuitka/build/inline_copy/zlib/zlib.h +1938 -0
- nuitka/build/inline_copy/zlib/zutil.h +275 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +176 -182
- nuitka/build/static_src/CompiledCellType.c +63 -40
- nuitka/build/static_src/CompiledCodeHelpers.c +181 -128
- nuitka/build/static_src/CompiledCoroutineType.c +196 -203
- nuitka/build/static_src/CompiledFrameType.c +287 -133
- nuitka/build/static_src/CompiledFunctionType.c +389 -95
- nuitka/build/static_src/CompiledGeneratorType.c +376 -252
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +185 -198
- nuitka/build/static_src/CompiledMethodType.c +83 -71
- nuitka/build/static_src/HelpersAllocator.c +88 -19
- nuitka/build/static_src/HelpersAttributes.c +33 -54
- nuitka/build/static_src/HelpersBuiltin.c +43 -33
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
- nuitka/build/static_src/HelpersBytes.c +19 -20
- nuitka/build/static_src/HelpersCalling.c +33 -30
- nuitka/build/static_src/HelpersCallingGenerated.c +1000 -181
- nuitka/build/static_src/HelpersChecksumTools.c +35 -21
- nuitka/build/static_src/HelpersClasses.c +17 -17
- nuitka/build/static_src/HelpersComparisonEq.c +518 -492
- nuitka/build/static_src/HelpersComparisonEqUtils.c +21 -19
- nuitka/build/static_src/HelpersComparisonGe.c +513 -497
- nuitka/build/static_src/HelpersComparisonGt.c +512 -496
- nuitka/build/static_src/HelpersComparisonLe.c +513 -497
- nuitka/build/static_src/HelpersComparisonLt.c +512 -496
- nuitka/build/static_src/HelpersComparisonNe.c +520 -492
- nuitka/build/static_src/HelpersConsole.c +96 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +542 -519
- nuitka/build/static_src/HelpersDeepcopy.c +33 -33
- nuitka/build/static_src/HelpersDictionaries.c +51 -29
- nuitka/build/static_src/HelpersDictionariesGenerated.c +177 -68
- nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
- nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
- nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
- nuitka/build/static_src/HelpersExceptions.c +161 -50
- nuitka/build/static_src/HelpersFiles.c +37 -17
- nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
- nuitka/build/static_src/HelpersFloats.c +37 -31
- nuitka/build/static_src/HelpersHeapStorage.c +21 -17
- nuitka/build/static_src/HelpersImport.c +48 -20
- nuitka/build/static_src/HelpersImportHard.c +53 -17
- nuitka/build/static_src/HelpersJitSources.c +46 -0
- nuitka/build/static_src/HelpersLists.c +140 -50
- nuitka/build/static_src/HelpersListsGenerated.c +41 -41
- nuitka/build/static_src/HelpersMappings.c +17 -17
- nuitka/build/static_src/HelpersMatching.c +137 -51
- nuitka/build/static_src/HelpersOperationBinaryAdd.c +173 -146
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +99 -52
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +50 -50
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +47 -47
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +24 -24
- nuitka/build/static_src/HelpersOperationBinaryMod.c +107 -107
- nuitka/build/static_src/HelpersOperationBinaryMult.c +81 -75
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +41 -41
- nuitka/build/static_src/HelpersOperationBinaryPow.c +44 -44
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +47 -47
- nuitka/build/static_src/HelpersOperationBinarySub.c +80 -80
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +41 -41
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +171 -153
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +53 -53
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +62 -62
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +44 -44
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +37 -37
- nuitka/build/static_src/HelpersOperationInplaceMod.c +134 -134
- nuitka/build/static_src/HelpersOperationInplaceMult.c +78 -78
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +62 -62
- nuitka/build/static_src/HelpersOperationInplacePow.c +62 -62
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +44 -44
- nuitka/build/static_src/HelpersOperationInplaceSub.c +112 -112
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +62 -62
- nuitka/build/static_src/HelpersProfiling.c +24 -23
- nuitka/build/static_src/HelpersPythonPgo.c +22 -22
- nuitka/build/static_src/HelpersRaising.c +88 -20
- nuitka/build/static_src/HelpersSafeStrings.c +34 -22
- nuitka/build/static_src/HelpersSequences.c +18 -19
- nuitka/build/static_src/HelpersSlices.c +29 -23
- nuitka/build/static_src/HelpersStrings.c +234 -37
- nuitka/build/static_src/HelpersTuples.c +46 -34
- nuitka/build/static_src/HelpersTypes.c +68 -23
- nuitka/build/static_src/InspectPatcher.c +108 -27
- nuitka/build/static_src/MainProgram.c +359 -263
- nuitka/build/static_src/MetaPathBasedLoader.c +367 -242
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +97 -22
- nuitka/build/static_src/OnefileBootstrap.c +276 -164
- nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
- nuitka/code_generation/AsyncgenCodes.py +19 -17
- nuitka/code_generation/AttributeCodes.py +31 -27
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +24 -20
- nuitka/code_generation/BranchCodes.py +19 -17
- nuitka/code_generation/BuiltinCodes.py +20 -17
- nuitka/code_generation/CallCodes.py +19 -17
- nuitka/code_generation/ClassCodes.py +19 -17
- nuitka/code_generation/CodeGeneration.py +48 -27
- nuitka/code_generation/CodeHelperSelection.py +19 -17
- nuitka/code_generation/CodeHelpers.py +24 -20
- nuitka/code_generation/CodeObjectCodes.py +34 -24
- nuitka/code_generation/ComparisonCodes.py +38 -20
- nuitka/code_generation/ComparisonHelperDefinitions.py +19 -17
- nuitka/code_generation/ConditionalCodes.py +19 -17
- nuitka/code_generation/ConstantCodes.py +82 -28
- nuitka/code_generation/Contexts.py +152 -26
- nuitka/code_generation/CoroutineCodes.py +19 -17
- nuitka/code_generation/CtypesCodes.py +19 -17
- nuitka/code_generation/DictCodes.py +25 -23
- nuitka/code_generation/Emission.py +21 -18
- nuitka/code_generation/ErrorCodes.py +27 -33
- nuitka/code_generation/EvalCodes.py +24 -20
- nuitka/code_generation/ExceptionCodes.py +27 -18
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +20 -17
- nuitka/code_generation/ExpressionCodes.py +19 -17
- nuitka/code_generation/FrameCodes.py +24 -20
- nuitka/code_generation/FunctionCodes.py +24 -21
- nuitka/code_generation/GeneratorCodes.py +23 -20
- nuitka/code_generation/GlobalConstants.py +43 -23
- nuitka/code_generation/GlobalsLocalsCodes.py +21 -19
- nuitka/code_generation/IdCodes.py +19 -17
- nuitka/code_generation/ImportCodes.py +90 -50
- nuitka/code_generation/Indentation.py +23 -22
- nuitka/code_generation/IndexCodes.py +19 -17
- nuitka/code_generation/InjectCCodes.py +14 -12
- nuitka/code_generation/IntegerCodes.py +19 -17
- nuitka/code_generation/IteratorCodes.py +19 -17
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +19 -17
- nuitka/code_generation/LineNumberCodes.py +19 -17
- nuitka/code_generation/ListCodes.py +32 -36
- nuitka/code_generation/LoaderCodes.py +22 -17
- nuitka/code_generation/LocalsDictCodes.py +56 -32
- nuitka/code_generation/LoopCodes.py +19 -17
- nuitka/code_generation/MatchCodes.py +42 -22
- nuitka/code_generation/ModuleCodes.py +43 -25
- nuitka/code_generation/Namify.py +27 -23
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +29 -31
- nuitka/code_generation/PackageResourceCodes.py +59 -23
- nuitka/code_generation/PrintCodes.py +19 -17
- nuitka/code_generation/PythonAPICodes.py +19 -17
- nuitka/code_generation/RaisingCodes.py +19 -17
- nuitka/code_generation/Reports.py +19 -17
- nuitka/code_generation/ReturnCodes.py +19 -17
- nuitka/code_generation/SetCodes.py +19 -17
- nuitka/code_generation/SliceCodes.py +22 -20
- nuitka/code_generation/StringCodes.py +19 -17
- nuitka/code_generation/SubscriptCodes.py +24 -30
- nuitka/code_generation/TensorflowCodes.py +54 -0
- nuitka/code_generation/TryCodes.py +19 -17
- nuitka/code_generation/TupleCodes.py +20 -18
- nuitka/code_generation/TypeAliasCodes.py +71 -0
- nuitka/code_generation/VariableCodes.py +26 -22
- nuitka/code_generation/VariableDeclarations.py +20 -17
- nuitka/code_generation/YieldCodes.py +22 -20
- nuitka/code_generation/__init__.py +5 -4
- nuitka/code_generation/c_types/CTypeBases.py +19 -17
- nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
- nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
- nuitka/code_generation/c_types/CTypeModuleDictVariables.py +19 -17
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +19 -18
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +19 -17
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +27 -25
- nuitka/code_generation/c_types/CTypeVoids.py +20 -17
- nuitka/code_generation/c_types/__init__.py +5 -4
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesConstants.py +132 -36
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +19 -18
- nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesFunction.py +18 -17
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +19 -17
- nuitka/code_generation/templates/CodeTemplatesIterators.py +18 -18
- nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
- nuitka/code_generation/templates/CodeTemplatesModules.py +244 -165
- nuitka/code_generation/templates/CodeTemplatesVariables.py +42 -27
- nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
- nuitka/code_generation/templates/__init__.py +5 -4
- nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +18 -18
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +76 -25
- nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
- nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +121 -48
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
- nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
- nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +44 -32
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +24 -24
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +33 -29
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +27 -27
- nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +26 -24
- nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
- nuitka/containers/Namedtuples.py +19 -18
- nuitka/containers/OrderedSetsFallback.py +19 -17
- nuitka/containers/__init__.py +5 -4
- nuitka/distutils/Build.py +19 -18
- nuitka/distutils/DistutilCommands.py +34 -23
- nuitka/distutils/__init__.py +5 -4
- nuitka/finalizations/Finalization.py +20 -17
- nuitka/finalizations/FinalizeMarkups.py +21 -41
- nuitka/finalizations/__init__.py +5 -4
- nuitka/freezer/DependsExe.py +48 -28
- nuitka/freezer/DllDependenciesCommon.py +47 -20
- nuitka/freezer/DllDependenciesMacOS.py +147 -57
- nuitka/freezer/DllDependenciesPosix.py +29 -19
- nuitka/freezer/DllDependenciesWin32.py +29 -21
- nuitka/freezer/ImportDetection.py +20 -17
- nuitka/freezer/IncludedDataFiles.py +118 -47
- nuitka/freezer/IncludedEntryPoints.py +102 -38
- nuitka/freezer/Onefile.py +32 -22
- nuitka/freezer/Standalone.py +105 -50
- nuitka/freezer/__init__.py +5 -4
- nuitka/importing/IgnoreListing.py +19 -17
- nuitka/importing/ImportCache.py +24 -21
- nuitka/importing/ImportResolving.py +103 -95
- nuitka/importing/Importing.py +286 -92
- nuitka/importing/PreloadedPackages.py +21 -18
- nuitka/importing/Recursion.py +131 -47
- nuitka/importing/StandardLibrary.py +46 -28
- nuitka/importing/__init__.py +5 -4
- nuitka/nodes/AsyncgenNodes.py +19 -17
- nuitka/nodes/AttributeLookupNodes.py +19 -17
- nuitka/nodes/AttributeNodes.py +19 -17
- nuitka/nodes/AttributeNodesGenerated.py +49 -24
- nuitka/nodes/BuiltinAllNodes.py +19 -17
- nuitka/nodes/BuiltinAnyNodes.py +19 -17
- nuitka/nodes/BuiltinComplexNodes.py +20 -17
- nuitka/nodes/BuiltinDecodingNodes.py +19 -17
- nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
- nuitka/nodes/BuiltinDictNodes.py +19 -17
- nuitka/nodes/BuiltinFormatNodes.py +20 -17
- nuitka/nodes/BuiltinHashNodes.py +19 -17
- nuitka/nodes/BuiltinInputNodes.py +19 -17
- nuitka/nodes/BuiltinIntegerNodes.py +19 -17
- nuitka/nodes/BuiltinIteratorNodes.py +24 -20
- nuitka/nodes/BuiltinLenNodes.py +19 -17
- nuitka/nodes/BuiltinNextNodes.py +19 -17
- nuitka/nodes/BuiltinOpenNodes.py +52 -18
- nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
- nuitka/nodes/BuiltinRangeNodes.py +21 -19
- nuitka/nodes/BuiltinRefNodes.py +68 -19
- nuitka/nodes/BuiltinSumNodes.py +20 -18
- nuitka/nodes/BuiltinTypeNodes.py +19 -17
- nuitka/nodes/BuiltinVarsNodes.py +19 -18
- nuitka/nodes/BytesNodes.py +19 -17
- nuitka/nodes/CallNodes.py +19 -17
- nuitka/nodes/Checkers.py +19 -17
- nuitka/nodes/ChildrenHavingMixins.py +1250 -302
- nuitka/nodes/ClassNodes.py +49 -29
- nuitka/nodes/CodeObjectSpecs.py +29 -18
- nuitka/nodes/ComparisonNodes.py +19 -17
- nuitka/nodes/ConditionalNodes.py +21 -23
- nuitka/nodes/ConstantRefNodes.py +57 -17
- nuitka/nodes/ContainerMakingNodes.py +19 -17
- nuitka/nodes/ContainerOperationNodes.py +19 -17
- nuitka/nodes/CoroutineNodes.py +19 -17
- nuitka/nodes/CtypesNodes.py +19 -18
- nuitka/nodes/DictionaryNodes.py +19 -18
- nuitka/nodes/ExceptionNodes.py +29 -17
- nuitka/nodes/ExecEvalNodes.py +19 -17
- nuitka/nodes/ExpressionBases.py +34 -26
- nuitka/nodes/ExpressionBasesGenerated.py +54 -32
- nuitka/nodes/ExpressionShapeMixins.py +19 -17
- nuitka/nodes/FrameNodes.py +19 -17
- nuitka/nodes/FunctionAttributeNodes.py +19 -17
- nuitka/nodes/FunctionNodes.py +81 -35
- nuitka/nodes/FutureSpecs.py +35 -20
- nuitka/nodes/GeneratorNodes.py +21 -19
- nuitka/nodes/GlobalsLocalsNodes.py +22 -17
- nuitka/nodes/HardImportNodesGenerated.py +545 -129
- nuitka/nodes/ImportHardNodes.py +46 -38
- nuitka/nodes/ImportNodes.py +436 -446
- nuitka/nodes/IndicatorMixins.py +19 -17
- nuitka/nodes/InjectCNodes.py +19 -18
- nuitka/nodes/IterationHandles.py +55 -34
- nuitka/nodes/KeyValuePairNodes.py +19 -17
- nuitka/nodes/ListOperationNodes.py +33 -21
- nuitka/nodes/LocalsDictNodes.py +19 -17
- nuitka/nodes/LocalsScopes.py +41 -41
- nuitka/nodes/LoopNodes.py +28 -17
- nuitka/nodes/MatchNodes.py +37 -24
- nuitka/nodes/ModuleAttributeNodes.py +18 -35
- nuitka/nodes/ModuleNodes.py +90 -31
- nuitka/nodes/NetworkxNodes.py +45 -0
- nuitka/nodes/NodeBases.py +45 -43
- nuitka/nodes/NodeMakingHelpers.py +21 -19
- nuitka/nodes/NodeMetaClasses.py +45 -28
- nuitka/nodes/OperatorNodes.py +28 -26
- nuitka/nodes/OperatorNodesUnary.py +20 -17
- nuitka/nodes/OsSysNodes.py +66 -18
- nuitka/nodes/OutlineNodes.py +22 -20
- nuitka/nodes/PackageMetadataNodes.py +37 -27
- nuitka/nodes/PackageResourceNodes.py +29 -23
- nuitka/nodes/PrintNodes.py +19 -17
- nuitka/nodes/ReturnNodes.py +20 -18
- nuitka/nodes/SideEffectNodes.py +19 -17
- nuitka/nodes/SliceNodes.py +20 -18
- nuitka/nodes/StatementBasesGenerated.py +125 -77
- nuitka/nodes/StatementNodes.py +19 -17
- nuitka/nodes/StrNodes.py +19 -17
- nuitka/nodes/StringConcatenationNodes.py +20 -17
- nuitka/nodes/SubscriptNodes.py +26 -24
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +19 -17
- nuitka/nodes/TypeMatchNodes.py +19 -17
- nuitka/nodes/TypeNodes.py +40 -17
- nuitka/nodes/VariableAssignNodes.py +122 -64
- nuitka/nodes/VariableDelNodes.py +19 -17
- nuitka/nodes/VariableNameNodes.py +19 -17
- nuitka/nodes/VariableRefNodes.py +63 -26
- nuitka/nodes/VariableReleaseNodes.py +19 -17
- nuitka/nodes/YieldNodes.py +21 -19
- nuitka/nodes/__init__.py +5 -4
- nuitka/nodes/shapes/BuiltinTypeShapes.py +145 -39
- nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
- nuitka/nodes/shapes/ShapeMixins.py +40 -17
- nuitka/nodes/shapes/StandardShapes.py +27 -20
- nuitka/nodes/shapes/__init__.py +5 -4
- nuitka/optimizations/BytecodeDemotion.py +19 -17
- nuitka/optimizations/FunctionInlining.py +22 -23
- nuitka/optimizations/Graphs.py +19 -17
- nuitka/optimizations/Optimization.py +39 -35
- nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
- nuitka/optimizations/Tags.py +19 -18
- nuitka/optimizations/TraceCollections.py +67 -24
- nuitka/optimizations/ValueTraces.py +92 -25
- nuitka/optimizations/__init__.py +5 -4
- nuitka/pgo/PGO.py +33 -23
- nuitka/pgo/__init__.py +5 -4
- nuitka/plugins/PluginBase.py +610 -109
- nuitka/plugins/Plugins.py +241 -58
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +5 -4
- nuitka/plugins/standard/AntiBloatPlugin.py +357 -129
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
- nuitka/plugins/standard/DataFilesPlugin.py +65 -29
- nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
- nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
- nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
- nuitka/plugins/standard/DillPlugin.py +42 -134
- nuitka/plugins/standard/DllFilesPlugin.py +125 -42
- nuitka/plugins/standard/EnumPlugin.py +19 -17
- nuitka/plugins/standard/EventletPlugin.py +19 -17
- nuitka/plugins/standard/GeventPlugin.py +19 -17
- nuitka/plugins/standard/GiPlugin.py +44 -28
- nuitka/plugins/standard/GlfwPlugin.py +20 -17
- nuitka/plugins/standard/ImplicitImports.py +407 -46
- nuitka/plugins/standard/KivyPlugin.py +30 -17
- nuitka/plugins/standard/MatplotlibPlugin.py +88 -42
- nuitka/plugins/standard/MultiprocessingPlugin.py +25 -20
- nuitka/plugins/standard/NumpyPlugin.py +19 -17
- nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
- nuitka/plugins/standard/PbrPlugin.py +21 -19
- nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
- nuitka/plugins/standard/PmwPlugin.py +30 -27
- nuitka/plugins/standard/PySidePyQtPlugin.py +74 -80
- nuitka/plugins/standard/PywebViewPlugin.py +19 -17
- nuitka/plugins/standard/SpacyPlugin.py +136 -0
- nuitka/plugins/standard/TensorflowPlugin.py +20 -17
- nuitka/plugins/standard/TkinterPlugin.py +103 -53
- nuitka/plugins/standard/TorchPlugin.py +20 -17
- nuitka/plugins/standard/TransformersPlugin.py +94 -30
- nuitka/plugins/standard/TrioPlugin.py +18 -15
- nuitka/plugins/standard/UpxPlugin.py +21 -19
- nuitka/plugins/standard/__init__.py +5 -4
- nuitka/plugins/standard/standard.nuitka-package.config.yml +3449 -1299
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +121 -66
- nuitka/reports/CompilationReportReader.py +67 -0
- nuitka/reports/LicenseReport.rst.j2 +21 -21
- nuitka/reports/Reports.py +352 -76
- nuitka/reports/__init__.py +5 -4
- nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
- nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
- nuitka/specs/BuiltinListOperationSpecs.py +18 -17
- nuitka/specs/BuiltinParameterSpecs.py +30 -20
- nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
- nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
- nuitka/specs/HardImportSpecs.py +67 -22
- nuitka/specs/ParameterSpecs.py +56 -41
- nuitka/specs/__init__.py +5 -4
- nuitka/tools/Basics.py +20 -18
- nuitka/tools/__init__.py +5 -4
- nuitka/tools/commercial/__init__.py +7 -6
- nuitka/tools/data_composer/DataComposer.py +78 -62
- nuitka/tools/data_composer/__init__.py +5 -4
- nuitka/tools/data_composer/__main__.py +18 -17
- nuitka/tools/environments/CreateEnvironment.py +20 -17
- nuitka/tools/environments/Virtualenv.py +60 -32
- nuitka/tools/environments/__init__.py +5 -4
- nuitka/tools/general/__init__.py +5 -4
- nuitka/tools/general/dll_report/__init__.py +5 -4
- nuitka/tools/general/dll_report/__main__.py +19 -21
- nuitka/tools/general/find_module/FindModuleCode.py +35 -22
- nuitka/tools/general/find_module/__init__.py +5 -4
- nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
- nuitka/tools/onefile_compressor/__init__.py +5 -4
- nuitka/tools/onefile_compressor/__main__.py +18 -17
- nuitka/tools/podman/Podman.py +19 -17
- nuitka/tools/podman/__init__.py +5 -4
- nuitka/tools/podman/__main__.py +35 -19
- nuitka/tools/profiler/__init__.py +5 -4
- nuitka/tools/profiler/__main__.py +18 -17
- nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
- nuitka/tools/scanning/DisplayPackageData.py +31 -19
- nuitka/tools/scanning/__init__.py +5 -4
- nuitka/tools/specialize/CTypeDescriptions.py +93 -71
- nuitka/tools/specialize/Common.py +18 -17
- nuitka/tools/specialize/SpecializeC.py +31 -27
- nuitka/tools/specialize/SpecializePython.py +108 -45
- nuitka/tools/specialize/__init__.py +5 -4
- nuitka/tools/testing/Common.py +106 -52
- nuitka/tools/testing/Constructs.py +19 -17
- nuitka/tools/testing/OutputComparison.py +54 -18
- nuitka/tools/testing/Pythons.py +19 -18
- nuitka/tools/testing/RuntimeTracing.py +20 -19
- nuitka/tools/testing/SearchModes.py +26 -20
- nuitka/tools/testing/Valgrind.py +19 -17
- nuitka/tools/testing/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
- nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
- nuitka/tools/testing/compare_with_cpython/__main__.py +36 -29
- nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
- nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
- nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
- nuitka/tools/testing/measure_construct_performance/__main__.py +22 -25
- nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
- nuitka/tools/testing/run_nuitka_tests/__main__.py +57 -40
- nuitka/tools/watch/AutoStage.py +144 -0
- nuitka/tools/watch/GitHub.py +113 -0
- nuitka/tools/watch/__init__.py +5 -4
- nuitka/tools/watch/__main__.py +322 -91
- nuitka/tree/Building.py +176 -147
- nuitka/tree/ComplexCallHelperFunctions.py +80 -58
- nuitka/tree/Extractions.py +19 -17
- nuitka/tree/InternalModule.py +29 -20
- nuitka/tree/Operations.py +19 -17
- nuitka/tree/ReformulationAssertStatements.py +20 -17
- nuitka/tree/ReformulationAssignmentStatements.py +92 -91
- nuitka/tree/ReformulationBooleanExpressions.py +19 -17
- nuitka/tree/ReformulationCallExpressions.py +20 -18
- nuitka/tree/ReformulationClasses.py +45 -39
- nuitka/tree/ReformulationClasses3.py +146 -98
- nuitka/tree/ReformulationComparisonExpressions.py +29 -35
- nuitka/tree/ReformulationContractionExpressions.py +58 -55
- nuitka/tree/ReformulationDictionaryCreation.py +40 -35
- nuitka/tree/ReformulationExecStatements.py +42 -39
- nuitka/tree/ReformulationForLoopStatements.py +30 -34
- nuitka/tree/ReformulationFunctionStatements.py +58 -54
- nuitka/tree/ReformulationImportStatements.py +34 -29
- nuitka/tree/ReformulationLambdaExpressions.py +23 -24
- nuitka/tree/ReformulationMatchStatements.py +244 -92
- nuitka/tree/ReformulationMultidist.py +22 -18
- nuitka/tree/ReformulationNamespacePackages.py +55 -46
- nuitka/tree/ReformulationPrintStatements.py +23 -24
- nuitka/tree/ReformulationSequenceCreation.py +50 -49
- nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
- nuitka/tree/ReformulationTryExceptStatements.py +19 -17
- nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
- nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
- nuitka/tree/ReformulationWithStatements.py +39 -41
- nuitka/tree/ReformulationYieldExpressions.py +21 -19
- nuitka/tree/SourceHandling.py +76 -31
- nuitka/tree/SyntaxErrors.py +19 -17
- nuitka/tree/TreeHelpers.py +33 -20
- nuitka/tree/VariableClosure.py +35 -39
- nuitka/tree/__init__.py +5 -4
- nuitka/utils/AppDirs.py +41 -20
- nuitka/utils/CStrings.py +66 -21
- nuitka/utils/CommandLineOptions.py +84 -19
- nuitka/utils/Distributions.py +445 -54
- nuitka/utils/Download.py +89 -57
- nuitka/utils/Execution.py +73 -34
- nuitka/utils/FileOperations.py +318 -74
- nuitka/utils/Hashing.py +55 -33
- nuitka/utils/Images.py +26 -19
- nuitka/utils/Importing.py +118 -24
- nuitka/utils/InstalledPythons.py +80 -75
- nuitka/utils/InstanceCounters.py +20 -17
- nuitka/utils/Jinja2.py +30 -22
- nuitka/utils/Json.py +19 -17
- nuitka/utils/MacOSApp.py +26 -18
- nuitka/utils/MemoryUsage.py +20 -18
- nuitka/utils/ModuleNames.py +42 -26
- nuitka/utils/ReExecute.py +50 -28
- nuitka/utils/Rest.py +20 -17
- nuitka/utils/SharedLibraries.py +161 -75
- nuitka/utils/Shebang.py +20 -17
- nuitka/utils/Signing.py +63 -18
- nuitka/utils/SlotMetaClasses.py +57 -0
- nuitka/utils/StaticLibraries.py +83 -56
- nuitka/utils/ThreadedExecutor.py +18 -17
- nuitka/utils/Timing.py +22 -20
- nuitka/utils/Utils.py +115 -25
- nuitka/utils/WindowsFileUsage.py +22 -20
- nuitka/utils/WindowsResources.py +25 -18
- nuitka/utils/Yaml.py +62 -24
- nuitka/utils/__init__.py +5 -4
- Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
- nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/top_level.txt +0 -0
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
// Copyright
|
|
2
|
-
|
|
3
|
-
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
4
|
-
// integrates with CPython, but also works on its own.
|
|
5
|
-
//
|
|
6
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
// you may not use this file except in compliance with the License.
|
|
8
|
-
// You may obtain a copy of the License at
|
|
9
|
-
//
|
|
10
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
//
|
|
12
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
// See the License for the specific language governing permissions and
|
|
16
|
-
// limitations under the License.
|
|
17
|
-
//
|
|
1
|
+
// Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
18
3
|
// 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,17 @@ 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
|
-
while (*buffer != 0) {
|
|
111
|
-
buffer++;
|
|
112
|
-
}
|
|
97
|
+
static void appendModuleNameAsPathW(wchar_t *buffer, PyObject *module_name, size_t buffer_size) {
|
|
98
|
+
wchar_t const *module_name_wstr = PyUnicode_AsWideCharString(module_name, NULL);
|
|
113
99
|
|
|
114
|
-
while (*
|
|
115
|
-
|
|
100
|
+
while (*module_name_wstr != 0) {
|
|
101
|
+
wchar_t c = *module_name_wstr++;
|
|
116
102
|
|
|
117
|
-
if (c == '.') {
|
|
118
|
-
c =
|
|
103
|
+
if (c == L'.') {
|
|
104
|
+
c = SEP_L;
|
|
119
105
|
}
|
|
120
106
|
|
|
121
|
-
|
|
107
|
+
appendWCharSafeW(buffer, c, buffer_size);
|
|
122
108
|
}
|
|
123
109
|
}
|
|
124
110
|
#endif
|
|
@@ -150,7 +136,7 @@ static void patchCodeObjectPaths(PyCodeObject *code_object, PyObject *module_pat
|
|
|
150
136
|
NUITKA_MAY_BE_UNUSED static PyObject *MAKE_RELATIVE_PATH_FROM_NAME(char const *name, bool is_package, bool dir_only) {
|
|
151
137
|
char buffer[MAXPATHLEN + 1] = {0};
|
|
152
138
|
|
|
153
|
-
|
|
139
|
+
appendModuleNameAsPath(buffer, name, sizeof(buffer));
|
|
154
140
|
|
|
155
141
|
if (dir_only == false) {
|
|
156
142
|
if (is_package) {
|
|
@@ -180,19 +166,35 @@ NUITKA_MAY_BE_UNUSED static PyObject *MAKE_RELATIVE_PATH_FROM_NAME(char const *n
|
|
|
180
166
|
return result;
|
|
181
167
|
}
|
|
182
168
|
|
|
183
|
-
static PyObject *
|
|
184
|
-
|
|
169
|
+
static PyObject *_makeDunderPathObject(PyThreadState *tstate, PyObject *module_path_entry) {
|
|
170
|
+
CHECK_OBJECT(module_path_entry);
|
|
171
|
+
|
|
172
|
+
PyObject *path_list = MAKE_LIST_EMPTY(tstate, 1);
|
|
173
|
+
if (unlikely(path_list == NULL)) {
|
|
174
|
+
return NULL;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
PyList_SET_ITEM0(path_list, 0, module_path_entry);
|
|
178
|
+
|
|
179
|
+
CHECK_OBJECT(path_list);
|
|
180
|
+
return path_list;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
static PyObject *loadModuleFromCodeObject(PyThreadState *tstate, PyObject *module, PyCodeObject *code_object,
|
|
184
|
+
char const *name, bool is_package) {
|
|
185
185
|
assert(code_object != NULL);
|
|
186
186
|
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
{
|
|
188
|
+
NUITKA_MAY_BE_UNUSED bool b_res = Nuitka_SetModuleString(name, module);
|
|
189
|
+
assert(b_res != false);
|
|
190
|
+
}
|
|
189
191
|
|
|
190
192
|
char buffer[MAXPATHLEN + 1] = {0};
|
|
191
193
|
|
|
192
194
|
PyObject *module_path_entry = NULL;
|
|
193
195
|
|
|
194
196
|
if (is_package) {
|
|
195
|
-
|
|
197
|
+
appendModuleNameAsPath(buffer, name, sizeof(buffer));
|
|
196
198
|
PyObject *module_path_entry_base = Nuitka_String_FromString(buffer);
|
|
197
199
|
|
|
198
200
|
module_path_entry = MAKE_RELATIVE_PATH(module_path_entry_base);
|
|
@@ -201,7 +203,7 @@ static PyObject *loadModuleFromCodeObject(PyObject *module, PyCodeObject *code_o
|
|
|
201
203
|
appendCharSafe(buffer, SEP, sizeof(buffer));
|
|
202
204
|
appendStringSafe(buffer, "__init__.py", sizeof(buffer));
|
|
203
205
|
} else {
|
|
204
|
-
|
|
206
|
+
appendModuleNameAsPath(buffer, name, sizeof(buffer));
|
|
205
207
|
appendStringSafe(buffer, ".py", sizeof(buffer));
|
|
206
208
|
}
|
|
207
209
|
|
|
@@ -212,17 +214,9 @@ static PyObject *loadModuleFromCodeObject(PyObject *module, PyCodeObject *code_o
|
|
|
212
214
|
|
|
213
215
|
if (is_package) {
|
|
214
216
|
/* Set __path__ properly, unlike frozen module importer does. */
|
|
215
|
-
PyObject *path_list =
|
|
216
|
-
if (unlikely(path_list == NULL))
|
|
217
|
-
return NULL;
|
|
218
|
-
|
|
219
|
-
int res = PyList_SetItem(path_list, 0, module_path_entry);
|
|
220
|
-
if (unlikely(res != 0)) {
|
|
221
|
-
return NULL;
|
|
222
|
-
}
|
|
223
|
-
Py_INCREF(module_path_entry);
|
|
217
|
+
PyObject *path_list = _makeDunderPathObject(tstate, module_path_entry);
|
|
224
218
|
|
|
225
|
-
res = PyObject_SetAttr(module, const_str_plain___path__, path_list);
|
|
219
|
+
int res = PyObject_SetAttr(module, const_str_plain___path__, path_list);
|
|
226
220
|
if (unlikely(res != 0)) {
|
|
227
221
|
return NULL;
|
|
228
222
|
}
|
|
@@ -258,7 +252,7 @@ static struct Nuitka_MetaPathBasedLoaderEntry *findEntry(char const *name) {
|
|
|
258
252
|
|
|
259
253
|
while (current->name != NULL) {
|
|
260
254
|
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
261
|
-
current->name =
|
|
255
|
+
current->name = UN_TRANSLATE(current->name);
|
|
262
256
|
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
263
257
|
}
|
|
264
258
|
|
|
@@ -286,7 +280,7 @@ static struct Nuitka_MetaPathBasedLoaderEntry *findContainingPackageEntry(char c
|
|
|
286
280
|
|
|
287
281
|
while (current->name != NULL) {
|
|
288
282
|
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
289
|
-
current->name =
|
|
283
|
+
current->name = UN_TRANSLATE(current->name);
|
|
290
284
|
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
291
285
|
}
|
|
292
286
|
|
|
@@ -325,7 +319,7 @@ static PyObject *_getImportingSuffixesByPriority(PyThreadState *tstate, int kind
|
|
|
325
319
|
static PyObject *result = NULL;
|
|
326
320
|
|
|
327
321
|
if (result == NULL) {
|
|
328
|
-
result = MAKE_LIST_EMPTY(0);
|
|
322
|
+
result = MAKE_LIST_EMPTY(tstate, 0);
|
|
329
323
|
|
|
330
324
|
PyObject *imp_module = PyImport_ImportModule("imp");
|
|
331
325
|
PyObject *get_suffixes_func = PyObject_GetAttrString(imp_module, "get_suffixes");
|
|
@@ -383,10 +377,10 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
383
377
|
return false;
|
|
384
378
|
}
|
|
385
379
|
|
|
386
|
-
PyObject *candidates = MAKE_LIST_EMPTY(0);
|
|
380
|
+
PyObject *candidates = MAKE_LIST_EMPTY(tstate, 0);
|
|
387
381
|
|
|
388
382
|
// Search only relative to the parent name of course.
|
|
389
|
-
char const *
|
|
383
|
+
char const *module_relative_name_str = Nuitka_String_AsString(module_name) + strlen(parent_module_name) + 1;
|
|
390
384
|
|
|
391
385
|
Py_ssize_t parent_path_size = PyList_GET_SIZE(parent_path);
|
|
392
386
|
|
|
@@ -408,8 +402,8 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
408
402
|
if (Nuitka_String_CheckExact(filename)) {
|
|
409
403
|
char const *filename_str = Nuitka_String_AsString(filename);
|
|
410
404
|
|
|
411
|
-
if (strncmp(filename_str,
|
|
412
|
-
filename_str[strlen(
|
|
405
|
+
if (strncmp(filename_str, module_relative_name_str, strlen(module_relative_name_str)) == 0 &&
|
|
406
|
+
filename_str[strlen(module_relative_name_str)] == '.') {
|
|
413
407
|
LIST_APPEND1(candidates, PyTuple_Pack(2, path_element, filename));
|
|
414
408
|
}
|
|
415
409
|
}
|
|
@@ -419,7 +413,7 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
419
413
|
#if 0
|
|
420
414
|
PRINT_STRING("CANDIDATES:");
|
|
421
415
|
PRINT_STRING(Nuitka_String_AsString(module_name));
|
|
422
|
-
PRINT_STRING(
|
|
416
|
+
PRINT_STRING(module_relative_name_str);
|
|
423
417
|
PRINT_ITEM(candidates);
|
|
424
418
|
PRINT_NEW_LINE();
|
|
425
419
|
#endif
|
|
@@ -442,11 +436,11 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
442
436
|
|
|
443
437
|
char const *candidate_str = Nuitka_String_AsString(candidate);
|
|
444
438
|
|
|
445
|
-
if (strcmp(suffix_str, candidate_str + strlen(
|
|
439
|
+
if (strcmp(suffix_str, candidate_str + strlen(module_relative_name_str)) == 0) {
|
|
446
440
|
PyObject *fullpath = JOIN_PATH2(directory, candidate);
|
|
447
441
|
|
|
448
442
|
if (installed_extension_modules == NULL) {
|
|
449
|
-
installed_extension_modules = MAKE_DICT_EMPTY();
|
|
443
|
+
installed_extension_modules = MAKE_DICT_EMPTY(tstate);
|
|
450
444
|
}
|
|
451
445
|
|
|
452
446
|
// Force path to unicode, to have easier consumption, as we need a wchar_t or char *
|
|
@@ -470,11 +464,8 @@ static bool scanModuleInPackagePath(PyThreadState *tstate, PyObject *module_name
|
|
|
470
464
|
return result;
|
|
471
465
|
}
|
|
472
466
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
#else
|
|
476
|
-
static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const char *filename);
|
|
477
|
-
#endif
|
|
467
|
+
static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const filename_char_t *filename,
|
|
468
|
+
bool is_package);
|
|
478
469
|
|
|
479
470
|
static PyObject *callIntoInstalledExtensionModule(PyThreadState *tstate, PyObject *module_name,
|
|
480
471
|
PyObject *extension_module_filename) {
|
|
@@ -492,7 +483,9 @@ static PyObject *callIntoInstalledExtensionModule(PyThreadState *tstate, PyObjec
|
|
|
492
483
|
char const *extension_module_filename_str = Nuitka_String_AsString(extension_module_filename);
|
|
493
484
|
#endif
|
|
494
485
|
|
|
495
|
-
|
|
486
|
+
// TODO: The value of "is_package" is guessed, maybe infer from filename being
|
|
487
|
+
// a "__init__.so" and the like.
|
|
488
|
+
return callIntoExtensionModule(tstate, Nuitka_String_AsString(module_name), extension_module_filename_str, false);
|
|
496
489
|
}
|
|
497
490
|
|
|
498
491
|
#endif
|
|
@@ -573,7 +566,7 @@ static PyObject *_nuitka_loader_find_module(PyObject *self, PyObject *args, PyOb
|
|
|
573
566
|
PySys_WriteStderr("import %s # denied responsibility\n", name);
|
|
574
567
|
}
|
|
575
568
|
|
|
576
|
-
|
|
569
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
577
570
|
return Py_None;
|
|
578
571
|
}
|
|
579
572
|
|
|
@@ -593,37 +586,18 @@ static PyObject *_nuitka_loader_get_data(PyObject *self, PyObject *args, PyObjec
|
|
|
593
586
|
return GET_FILE_BYTES(tstate, filename);
|
|
594
587
|
}
|
|
595
588
|
|
|
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__);
|
|
589
|
+
static void setModuleFileValue(PyThreadState *tstate, PyObject *module, filename_char_t const *filename) {
|
|
590
|
+
CHECK_OBJECT(module);
|
|
591
|
+
assert(filename != NULL);
|
|
604
592
|
|
|
605
|
-
|
|
606
|
-
CLEAR_ERROR_OCCURRED(tstate);
|
|
607
|
-
needs_update = true;
|
|
608
|
-
} else {
|
|
609
|
-
if (existing_file_value == Py_None) {
|
|
610
|
-
needs_update = true;
|
|
611
|
-
}
|
|
593
|
+
assert(PyModule_Check(module));
|
|
612
594
|
|
|
613
|
-
|
|
614
|
-
}
|
|
595
|
+
PyObject *dict = PyModule_GetDict(module);
|
|
615
596
|
|
|
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
|
-
}
|
|
597
|
+
// TODO: We should have DICT_SET_ITEM0/1 for these things.
|
|
598
|
+
PyObject *new_file_value = Nuitka_String_FromFilename(filename);
|
|
599
|
+
DICT_SET_ITEM(dict, const_str_plain___file__, new_file_value);
|
|
600
|
+
Py_DECREF(new_file_value);
|
|
627
601
|
}
|
|
628
602
|
|
|
629
603
|
#if PYTHON_VERSION < 0x300
|
|
@@ -641,11 +615,99 @@ typedef PyObject *(*entrypoint_t)(void);
|
|
|
641
615
|
static PyObject *createModuleSpec(PyThreadState *tstate, PyObject *module_name, PyObject *origin, bool is_package);
|
|
642
616
|
#endif
|
|
643
617
|
|
|
618
|
+
static void _fillExtensionModuleDllEntryFunctionName(PyThreadState *tstate, char *buffer, size_t buffer_size,
|
|
619
|
+
char const *name) {
|
|
620
|
+
|
|
621
|
+
#if PYTHON_VERSION >= 0x350
|
|
622
|
+
PyObject *name_bytes_obj = PyBytes_FromString(name);
|
|
623
|
+
PyObject *name_obj = BYTES_DECODE2(tstate, name_bytes_obj, Nuitka_String_FromString("utf8"));
|
|
624
|
+
Py_DECREF(name_bytes_obj);
|
|
625
|
+
|
|
626
|
+
PyObject *name_ascii = UNICODE_ENCODE2(tstate, name_obj, const_str_plain_ascii);
|
|
627
|
+
|
|
628
|
+
if (name_ascii == NULL) {
|
|
629
|
+
DROP_ERROR_OCCURRED(tstate);
|
|
630
|
+
|
|
631
|
+
PyObject *name_punycode = UNICODE_ENCODE2(tstate, name_obj, const_str_plain_punycode);
|
|
632
|
+
|
|
633
|
+
CHECK_OBJECT(name_punycode);
|
|
634
|
+
|
|
635
|
+
snprintf(buffer, buffer_size, "PyInitU_%s", PyBytes_AsString(name_punycode));
|
|
636
|
+
|
|
637
|
+
Py_DECREF(name_punycode);
|
|
638
|
+
} else {
|
|
639
|
+
Py_DECREF(name_ascii);
|
|
640
|
+
|
|
641
|
+
snprintf(buffer, buffer_size, "PyInit_%s", name);
|
|
642
|
+
}
|
|
643
|
+
Py_DECREF(name_obj);
|
|
644
|
+
#else
|
|
645
|
+
|
|
646
|
+
snprintf(buffer, buffer_size,
|
|
647
|
+
#if PYTHON_VERSION < 0x300
|
|
648
|
+
"init%s",
|
|
649
|
+
#else
|
|
650
|
+
"PyInit_%s",
|
|
651
|
+
#endif
|
|
652
|
+
name);
|
|
653
|
+
#endif
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
#ifdef _NUITKA_STANDALONE
|
|
657
|
+
// Append the the entry name from full path module name with dots,
|
|
658
|
+
// and translate these into directory separators.
|
|
659
|
+
static void _makeModuleCFilenameValue(filename_char_t *filename, size_t filename_size, char const *module_name_cstr,
|
|
660
|
+
PyObject *module_name, bool is_package) {
|
|
644
661
|
#ifdef _WIN32
|
|
645
|
-
|
|
662
|
+
appendWStringSafeW(filename, getBinaryDirectoryWideChars(true), filename_size);
|
|
663
|
+
appendWCharSafeW(filename, SEP_L, filename_size);
|
|
664
|
+
appendModuleNameAsPathW(filename, module_name, filename_size);
|
|
665
|
+
if (is_package) {
|
|
666
|
+
appendWCharSafeW(filename, SEP_L, filename_size);
|
|
667
|
+
appendStringSafeW(filename, "__init__", filename_size);
|
|
668
|
+
}
|
|
669
|
+
appendStringSafeW(filename, ".pyd", filename_size);
|
|
646
670
|
#else
|
|
647
|
-
|
|
671
|
+
appendStringSafe(filename, getBinaryDirectoryHostEncoded(true), filename_size);
|
|
672
|
+
appendCharSafe(filename, SEP, filename_size);
|
|
673
|
+
appendModuleNameAsPath(filename, module_name_cstr, filename_size);
|
|
674
|
+
if (is_package) {
|
|
675
|
+
appendCharSafe(filename, SEP, filename_size);
|
|
676
|
+
appendStringSafe(filename, "__init__", filename_size);
|
|
677
|
+
}
|
|
678
|
+
appendStringSafe(filename, ".so", filename_size);
|
|
648
679
|
#endif
|
|
680
|
+
}
|
|
681
|
+
#endif
|
|
682
|
+
|
|
683
|
+
#if PYTHON_VERSION >= 0x3c0 && defined(_NUITKA_USE_UNEXPOSED_API)
|
|
684
|
+
extern _Thread_local const char *pkgcontext;
|
|
685
|
+
#endif
|
|
686
|
+
|
|
687
|
+
static const char *NuitkaImport_SwapPackageContext(const char *new_context) {
|
|
688
|
+
// TODO: The locking APIs for 3.13 give errors here that are not explained
|
|
689
|
+
// yet.
|
|
690
|
+
#if PYTHON_VERSION >= 0x3c0 && PYTHON_VERSION < 0x3d0
|
|
691
|
+
// spell-checker: ignore pkgcontext
|
|
692
|
+
const char *old_context = _PyRuntime.imports.pkgcontext;
|
|
693
|
+
_PyRuntime.imports.pkgcontext = new_context;
|
|
694
|
+
#if PYTHON_VERSION >= 0x3c0 && defined(_NUITKA_USE_UNEXPOSED_API)
|
|
695
|
+
pkgcontext = new_context;
|
|
696
|
+
#endif
|
|
697
|
+
return old_context;
|
|
698
|
+
#elif PYTHON_VERSION >= 0x370
|
|
699
|
+
char const *old_context = _Py_PackageContext;
|
|
700
|
+
_Py_PackageContext = (char *)new_context;
|
|
701
|
+
return old_context;
|
|
702
|
+
#else
|
|
703
|
+
char *old_context = _Py_PackageContext;
|
|
704
|
+
_Py_PackageContext = (char *)new_context;
|
|
705
|
+
return (char const *)old_context;
|
|
706
|
+
#endif
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const filename_char_t *filename,
|
|
710
|
+
bool is_package) {
|
|
649
711
|
// Determine the package name and basename of the module to load.
|
|
650
712
|
char const *dot = strrchr(full_name, '.');
|
|
651
713
|
char const *name;
|
|
@@ -661,13 +723,7 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
661
723
|
}
|
|
662
724
|
|
|
663
725
|
char entry_function_name[1024];
|
|
664
|
-
|
|
665
|
-
#if PYTHON_VERSION < 0x300
|
|
666
|
-
"init%s",
|
|
667
|
-
#else
|
|
668
|
-
"PyInit_%s",
|
|
669
|
-
#endif
|
|
670
|
-
name);
|
|
726
|
+
_fillExtensionModuleDllEntryFunctionName(tstate, entry_function_name, sizeof(entry_function_name), name);
|
|
671
727
|
|
|
672
728
|
#ifdef _WIN32
|
|
673
729
|
if (isVerbose()) {
|
|
@@ -675,6 +731,8 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
675
731
|
}
|
|
676
732
|
|
|
677
733
|
#ifndef _NUITKA_EXPERIMENTAL_DEBUG_STANDALONE
|
|
734
|
+
// Disable all but critical errors, prevents dialogs from showing.
|
|
735
|
+
// spell-checker: ignore SEM_FAILCRITICALERRORS
|
|
678
736
|
unsigned int old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
|
|
679
737
|
#endif
|
|
680
738
|
|
|
@@ -704,15 +762,18 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
704
762
|
|
|
705
763
|
// Report either way even if failed to get error message.
|
|
706
764
|
if (size == 0) {
|
|
707
|
-
PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed with error code %d", filename,
|
|
708
|
-
|
|
765
|
+
int ret = PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed with error code %d", filename,
|
|
766
|
+
error_code);
|
|
767
|
+
|
|
768
|
+
assert(ret >= 0);
|
|
709
769
|
} else {
|
|
710
770
|
// Strip trailing newline.
|
|
711
771
|
if (size >= 2 && error_message[size - 2] == '\r' && error_message[size - 1] == '\n') {
|
|
712
772
|
size -= 2;
|
|
713
773
|
error_message[size] = '\0';
|
|
714
774
|
}
|
|
715
|
-
PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed: %s", filename, error_message);
|
|
775
|
+
int ret = PyOS_snprintf(buffer, sizeof(buffer), "LoadLibraryExW '%S' failed: %s", filename, error_message);
|
|
776
|
+
assert(ret >= 0);
|
|
716
777
|
}
|
|
717
778
|
|
|
718
779
|
SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ImportError, buffer);
|
|
@@ -723,6 +784,15 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
723
784
|
#else
|
|
724
785
|
// This code would work for all versions, we are avoiding access to interpreter
|
|
725
786
|
// structure internals of 3.8 or higher.
|
|
787
|
+
// spell-checker: ignore getdlopenflags,dlopenflags
|
|
788
|
+
|
|
789
|
+
#ifdef __wasi__
|
|
790
|
+
const char *error = "dynamic libraries are not implemented in wasi";
|
|
791
|
+
SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ImportError, error);
|
|
792
|
+
return NULL;
|
|
793
|
+
|
|
794
|
+
entrypoint_t entrypoint = NULL;
|
|
795
|
+
#else
|
|
726
796
|
static PyObject *dlopenflags_object = NULL;
|
|
727
797
|
if (dlopenflags_object == NULL) {
|
|
728
798
|
dlopenflags_object = CALL_FUNCTION_NO_ARGS(tstate, Nuitka_SysGetObject("getdlopenflags"));
|
|
@@ -747,16 +817,11 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
747
817
|
}
|
|
748
818
|
|
|
749
819
|
entrypoint_t entrypoint = (entrypoint_t)dlsym(handle, entry_function_name);
|
|
820
|
+
#endif // __wasi__
|
|
750
821
|
#endif
|
|
751
822
|
assert(entrypoint);
|
|
752
823
|
|
|
753
|
-
|
|
754
|
-
char *old_context = _Py_PackageContext;
|
|
755
|
-
#else
|
|
756
|
-
char const *old_context = _Py_PackageContext;
|
|
757
|
-
#endif
|
|
758
|
-
|
|
759
|
-
_Py_PackageContext = (char *)package;
|
|
824
|
+
char const *old_context = NuitkaImport_SwapPackageContext(package);
|
|
760
825
|
|
|
761
826
|
// Finally call into the DLL.
|
|
762
827
|
PGO_onModuleEntered(full_name);
|
|
@@ -777,7 +842,13 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
777
842
|
PySys_WriteStderr("import %s # return from entrypoint\n", full_name);
|
|
778
843
|
}
|
|
779
844
|
|
|
780
|
-
|
|
845
|
+
#if 0
|
|
846
|
+
PRINT_STRING("FRESH");
|
|
847
|
+
PRINT_ITEM(module);
|
|
848
|
+
PRINT_NEW_LINE();
|
|
849
|
+
#endif
|
|
850
|
+
|
|
851
|
+
NuitkaImport_SwapPackageContext(old_context);
|
|
781
852
|
|
|
782
853
|
#if PYTHON_VERSION < 0x300
|
|
783
854
|
PyObject *module = Nuitka_GetModuleString(tstate, full_name);
|
|
@@ -806,7 +877,10 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
806
877
|
|
|
807
878
|
PyObject *full_name_obj = Nuitka_String_FromString(full_name);
|
|
808
879
|
|
|
809
|
-
PyObject *
|
|
880
|
+
PyObject *origin = Nuitka_String_FromFilename(filename);
|
|
881
|
+
|
|
882
|
+
PyObject *spec_value = createModuleSpec(tstate, full_name_obj, origin, is_package);
|
|
883
|
+
CHECK_OBJECT(spec_value);
|
|
810
884
|
|
|
811
885
|
module = PyModule_FromDefAndSpec(def, spec_value);
|
|
812
886
|
|
|
@@ -818,16 +892,25 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
818
892
|
return NULL;
|
|
819
893
|
}
|
|
820
894
|
|
|
821
|
-
setModuleFileValue(tstate, module, filename);
|
|
822
|
-
PyObject_SetAttrString((PyObject *)spec_value, "origin",
|
|
823
|
-
LOOKUP_ATTRIBUTE(tstate, module, const_str_plain___file__));
|
|
824
895
|
SET_ATTRIBUTE(tstate, module, const_str_plain___spec__, spec_value);
|
|
825
896
|
|
|
897
|
+
setModuleFileValue(tstate, module, filename);
|
|
898
|
+
|
|
899
|
+
/* Set __path__ properly, unlike frozen module importer does. */
|
|
900
|
+
PyObject *path_list = _makeDunderPathObject(tstate, origin);
|
|
901
|
+
|
|
902
|
+
int res = PyObject_SetAttr(module, const_str_plain___path__, path_list);
|
|
903
|
+
if (unlikely(res != 0)) {
|
|
904
|
+
return NULL;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
Py_DECREF(path_list);
|
|
908
|
+
|
|
826
909
|
Nuitka_SetModule(full_name_obj, module);
|
|
827
910
|
Py_DECREF(full_name_obj);
|
|
828
911
|
|
|
829
912
|
SET_ATTRIBUTE(tstate, spec_value, const_str_plain__initializing, Py_True);
|
|
830
|
-
|
|
913
|
+
res = PyModule_ExecDef(module, def);
|
|
831
914
|
SET_ATTRIBUTE(tstate, spec_value, const_str_plain__initializing, Py_False);
|
|
832
915
|
|
|
833
916
|
Py_DECREF(spec_value);
|
|
@@ -847,6 +930,8 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
847
930
|
} else {
|
|
848
931
|
def = PyModule_GetDef(module);
|
|
849
932
|
|
|
933
|
+
def->m_base.m_init = entrypoint;
|
|
934
|
+
|
|
850
935
|
// Set "__spec__" and "__file__" after load.
|
|
851
936
|
setModuleFileValue(tstate, module, filename);
|
|
852
937
|
PyObject *full_name_obj = Nuitka_String_FromString(full_name);
|
|
@@ -905,27 +990,27 @@ static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full
|
|
|
905
990
|
#else
|
|
906
991
|
PyObject *full_name_obj = PyUnicode_FromString(full_name);
|
|
907
992
|
CHECK_OBJECT(full_name_obj);
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
#else
|
|
911
|
-
PyObject *filename_obj = PyUnicode_FromString(filename);
|
|
912
|
-
#endif
|
|
993
|
+
PyObject *filename_obj = Nuitka_String_FromFilename(filename);
|
|
994
|
+
|
|
913
995
|
CHECK_OBJECT(filename_obj);
|
|
914
996
|
|
|
997
|
+
#if PYTHON_VERSION < 0x3d0
|
|
915
998
|
int res = _PyImport_FixupExtensionObject(module, full_name_obj, filename_obj
|
|
916
999
|
#if PYTHON_VERSION >= 0x370
|
|
917
1000
|
,
|
|
918
1001
|
Nuitka_GetSysModules()
|
|
919
1002
|
#endif
|
|
920
|
-
|
|
921
1003
|
);
|
|
1004
|
+
#endif
|
|
922
1005
|
|
|
923
1006
|
Py_DECREF(full_name_obj);
|
|
924
1007
|
Py_DECREF(filename_obj);
|
|
925
1008
|
|
|
1009
|
+
#if PYTHON_VERSION < 0x3d0
|
|
926
1010
|
if (unlikely(res == -1)) {
|
|
927
1011
|
return NULL;
|
|
928
1012
|
}
|
|
1013
|
+
#endif
|
|
929
1014
|
#endif
|
|
930
1015
|
|
|
931
1016
|
return module;
|
|
@@ -978,35 +1063,13 @@ static PyObject *loadModule(PyThreadState *tstate, PyObject *module, PyObject *m
|
|
|
978
1063
|
struct Nuitka_MetaPathBasedLoaderEntry const *entry) {
|
|
979
1064
|
#ifdef _NUITKA_STANDALONE
|
|
980
1065
|
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};
|
|
1066
|
+
bool is_package = (entry->flags & NUITKA_PACKAGE_FLAG) != 0;
|
|
992
1067
|
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
appendStringSafe(filename, ".so", sizeof(filename));
|
|
1068
|
+
filename_char_t filename[MAXPATHLEN + 1] = {0};
|
|
1069
|
+
_makeModuleCFilenameValue(filename, sizeof(filename) / sizeof(filename_char_t), entry->name, module_name,
|
|
1070
|
+
is_package);
|
|
997
1071
|
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
// Set "__spec__" and "__file__", some modules expect it early.
|
|
1001
|
-
setModuleFileValue(tstate, module, filename);
|
|
1002
|
-
#if PYTHON_VERSION >= 0x350
|
|
1003
|
-
PyObject *spec_value =
|
|
1004
|
-
createModuleSpec(tstate, module_name, LOOKUP_ATTRIBUTE(tstate, module, const_str_plain___file__), false);
|
|
1005
|
-
|
|
1006
|
-
SET_ATTRIBUTE(tstate, module, const_str_plain___spec__, spec_value);
|
|
1007
|
-
#endif
|
|
1008
|
-
|
|
1009
|
-
callIntoExtensionModule(tstate, entry->name, filename);
|
|
1072
|
+
callIntoExtensionModule(tstate, entry->name, filename, is_package);
|
|
1010
1073
|
} else
|
|
1011
1074
|
#endif
|
|
1012
1075
|
if ((entry->flags & NUITKA_BYTECODE_FLAG) != 0) {
|
|
@@ -1022,20 +1085,26 @@ static PyObject *loadModule(PyThreadState *tstate, PyObject *module, PyObject *m
|
|
|
1022
1085
|
abort();
|
|
1023
1086
|
}
|
|
1024
1087
|
|
|
1025
|
-
return loadModuleFromCodeObject(module, code_object, entry->name,
|
|
1088
|
+
return loadModuleFromCodeObject(tstate, module, code_object, entry->name,
|
|
1089
|
+
(entry->flags & NUITKA_PACKAGE_FLAG) != 0);
|
|
1026
1090
|
} else {
|
|
1027
1091
|
assert((entry->flags & NUITKA_EXTENSION_MODULE_FLAG) == 0);
|
|
1028
|
-
assert(entry->
|
|
1092
|
+
assert(entry->python_init_func);
|
|
1029
1093
|
|
|
1030
|
-
|
|
1031
|
-
|
|
1094
|
+
{
|
|
1095
|
+
NUITKA_MAY_BE_UNUSED bool res = Nuitka_SetModule(module_name, module);
|
|
1096
|
+
assert(res != false);
|
|
1097
|
+
}
|
|
1032
1098
|
|
|
1033
1099
|
// Run the compiled module code, we get the module returned.
|
|
1034
|
-
|
|
1100
|
+
#if PYTHON_VERSION < 0x300
|
|
1101
|
+
NUITKA_MAY_BE_UNUSED
|
|
1102
|
+
#endif
|
|
1103
|
+
PyObject *result = entry->python_init_func(tstate, module, entry);
|
|
1035
1104
|
CHECK_OBJECT_X(result);
|
|
1036
1105
|
|
|
1037
|
-
#if PYTHON_VERSION >=
|
|
1038
|
-
if (result != NULL) {
|
|
1106
|
+
#if PYTHON_VERSION >= 0x300
|
|
1107
|
+
if (likely(result != NULL)) {
|
|
1039
1108
|
_fixupSpecAttribute(tstate, result);
|
|
1040
1109
|
}
|
|
1041
1110
|
#endif
|
|
@@ -1071,8 +1140,16 @@ static PyObject *_EXECUTE_EMBEDDED_MODULE(PyThreadState *tstate, PyObject *modul
|
|
|
1071
1140
|
PyObject *result = NULL;
|
|
1072
1141
|
|
|
1073
1142
|
if (entry != NULL) {
|
|
1143
|
+
#ifdef _NUITKA_EXPERIMENTAL_FORCE_GC_COLLECT_ON_IMPORT
|
|
1144
|
+
PyGC_Collect();
|
|
1145
|
+
#endif
|
|
1146
|
+
|
|
1074
1147
|
result = loadModule(tstate, module, module_name, entry);
|
|
1075
1148
|
|
|
1149
|
+
#ifdef _NUITKA_EXPERIMENTAL_FORCE_GC_COLLECT_ON_IMPORT
|
|
1150
|
+
PyGC_Collect();
|
|
1151
|
+
#endif
|
|
1152
|
+
|
|
1076
1153
|
if (unlikely(result == NULL)) {
|
|
1077
1154
|
return NULL;
|
|
1078
1155
|
}
|
|
@@ -1102,7 +1179,7 @@ static PyObject *_EXECUTE_EMBEDDED_MODULE(PyThreadState *tstate, PyObject *modul
|
|
|
1102
1179
|
return result;
|
|
1103
1180
|
}
|
|
1104
1181
|
|
|
1105
|
-
|
|
1182
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
1106
1183
|
return Py_None;
|
|
1107
1184
|
}
|
|
1108
1185
|
|
|
@@ -1210,7 +1287,7 @@ static PyObject *_nuitka_loader_is_package(PyObject *self, PyObject *args, PyObj
|
|
|
1210
1287
|
result = Py_None;
|
|
1211
1288
|
}
|
|
1212
1289
|
|
|
1213
|
-
|
|
1290
|
+
Py_INCREF_IMMORTAL(result);
|
|
1214
1291
|
return result;
|
|
1215
1292
|
}
|
|
1216
1293
|
|
|
@@ -1225,7 +1302,9 @@ static PyObject *_nuitka_loader_iter_modules(struct Nuitka_LoaderObject *self, P
|
|
|
1225
1302
|
return NULL;
|
|
1226
1303
|
}
|
|
1227
1304
|
|
|
1228
|
-
|
|
1305
|
+
NUITKA_MAY_BE_UNUSED PyThreadState *tstate = PyThreadState_GET();
|
|
1306
|
+
|
|
1307
|
+
PyObject *result = MAKE_LIST_EMPTY(tstate, 0);
|
|
1229
1308
|
|
|
1230
1309
|
struct Nuitka_MetaPathBasedLoaderEntry *current = loader_entries;
|
|
1231
1310
|
assert(current);
|
|
@@ -1240,7 +1319,7 @@ static PyObject *_nuitka_loader_iter_modules(struct Nuitka_LoaderObject *self, P
|
|
|
1240
1319
|
|
|
1241
1320
|
while (current->name != NULL) {
|
|
1242
1321
|
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
1243
|
-
current->name =
|
|
1322
|
+
current->name = UN_TRANSLATE(current->name);
|
|
1244
1323
|
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
1245
1324
|
}
|
|
1246
1325
|
|
|
@@ -1281,9 +1360,9 @@ static PyObject *_nuitka_loader_iter_modules(struct Nuitka_LoaderObject *self, P
|
|
|
1281
1360
|
Py_DECREF(old);
|
|
1282
1361
|
}
|
|
1283
1362
|
|
|
1284
|
-
PyObject *r = MAKE_TUPLE_EMPTY(2);
|
|
1363
|
+
PyObject *r = MAKE_TUPLE_EMPTY(tstate, 2);
|
|
1285
1364
|
PyTuple_SET_ITEM(r, 0, name);
|
|
1286
|
-
|
|
1365
|
+
PyTuple_SET_ITEM_IMMORTAL(r, 1, BOOL_FROM((current->flags & NUITKA_PACKAGE_FLAG) != 0));
|
|
1287
1366
|
|
|
1288
1367
|
LIST_APPEND1(result, r);
|
|
1289
1368
|
|
|
@@ -1354,35 +1433,6 @@ PyObject *getImportLibBootstrapModule(void) {
|
|
|
1354
1433
|
}
|
|
1355
1434
|
#endif
|
|
1356
1435
|
|
|
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
1436
|
static PyObject *getModuleFileValue(PyThreadState *tstate, struct Nuitka_MetaPathBasedLoaderEntry const *entry) {
|
|
1387
1437
|
PyObject *dir_name = getModuleDirectory(tstate, entry);
|
|
1388
1438
|
|
|
@@ -1419,6 +1469,35 @@ static PyObject *getModuleFileValue(PyThreadState *tstate, struct Nuitka_MetaPat
|
|
|
1419
1469
|
return result;
|
|
1420
1470
|
}
|
|
1421
1471
|
|
|
1472
|
+
#if PYTHON_VERSION >= 0x340
|
|
1473
|
+
|
|
1474
|
+
static PyObject *_nuitka_loader_repr_module(PyObject *self, PyObject *args, PyObject *kwds) {
|
|
1475
|
+
PyObject *module;
|
|
1476
|
+
PyObject *unused;
|
|
1477
|
+
|
|
1478
|
+
int res =
|
|
1479
|
+
PyArg_ParseTupleAndKeywords(args, kwds, "O|O:module_repr", (char **)_kw_list_find_module, &module, &unused);
|
|
1480
|
+
|
|
1481
|
+
if (unlikely(res == 0)) {
|
|
1482
|
+
return NULL;
|
|
1483
|
+
}
|
|
1484
|
+
|
|
1485
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
1486
|
+
|
|
1487
|
+
return PyUnicode_FromFormat("<module '%s' from %R>", PyModule_GetName(module),
|
|
1488
|
+
Nuitka_GetFilenameObject(tstate, module));
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
static PyObject *getModuleSpecClass(PyObject *importlib_module) {
|
|
1492
|
+
static PyObject *module_spec_class = NULL;
|
|
1493
|
+
|
|
1494
|
+
if (module_spec_class == NULL) {
|
|
1495
|
+
module_spec_class = PyObject_GetAttrString(importlib_module, "ModuleSpec");
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
return module_spec_class;
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1422
1501
|
static PyObject *createModuleSpec(PyThreadState *tstate, PyObject *module_name, PyObject *origin, bool is_package) {
|
|
1423
1502
|
CHECK_OBJECT(module_name);
|
|
1424
1503
|
assert(Nuitka_String_Check(module_name));
|
|
@@ -1436,7 +1515,7 @@ static PyObject *createModuleSpec(PyThreadState *tstate, PyObject *module_name,
|
|
|
1436
1515
|
return NULL;
|
|
1437
1516
|
}
|
|
1438
1517
|
|
|
1439
|
-
PyObject *args = MAKE_TUPLE2(module_name, (PyObject *)&Nuitka_Loader_Type);
|
|
1518
|
+
PyObject *args = MAKE_TUPLE2(tstate, module_name, (PyObject *)&Nuitka_Loader_Type);
|
|
1440
1519
|
|
|
1441
1520
|
PyObject *kw_values[] = {is_package ? Py_True : Py_False, origin};
|
|
1442
1521
|
|
|
@@ -1522,7 +1601,7 @@ static PyObject *_nuitka_loader_find_spec(PyObject *self, PyObject *args, PyObje
|
|
|
1522
1601
|
PySys_WriteStderr("import %s # denied responsibility\n", full_name);
|
|
1523
1602
|
}
|
|
1524
1603
|
|
|
1525
|
-
|
|
1604
|
+
Py_INCREF_IMMORTAL(Py_None);
|
|
1526
1605
|
return Py_None;
|
|
1527
1606
|
}
|
|
1528
1607
|
|
|
@@ -1592,9 +1671,9 @@ static PyObject *_nuitka_loader_exec_module(PyObject *self, PyObject *args, PyOb
|
|
|
1592
1671
|
|
|
1593
1672
|
if (extension_module_filename != NULL) {
|
|
1594
1673
|
// Set filename attribute
|
|
1595
|
-
|
|
1674
|
+
bool b_res = SET_ATTRIBUTE(tstate, module, const_str_plain___file__, extension_module_filename);
|
|
1596
1675
|
|
|
1597
|
-
if (unlikely(
|
|
1676
|
+
if (unlikely(b_res == false)) {
|
|
1598
1677
|
// Might be refuted, which wouldn't be harmful.
|
|
1599
1678
|
CLEAR_ERROR_OCCURRED(tstate);
|
|
1600
1679
|
}
|
|
@@ -1662,13 +1741,13 @@ static PyObject *_nuitka_loader_find_distributions(PyObject *self, PyObject *arg
|
|
|
1662
1741
|
return NULL;
|
|
1663
1742
|
}
|
|
1664
1743
|
|
|
1665
|
-
|
|
1744
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
1745
|
+
|
|
1746
|
+
PyObject *temp = MAKE_LIST_EMPTY(tstate, 0);
|
|
1666
1747
|
|
|
1667
1748
|
Py_ssize_t pos = 0;
|
|
1668
1749
|
PyObject *distribution_name;
|
|
1669
1750
|
|
|
1670
|
-
PyThreadState *tstate = PyThreadState_GET();
|
|
1671
|
-
|
|
1672
1751
|
while (Nuitka_DistributionNext(&pos, &distribution_name)) {
|
|
1673
1752
|
bool include = false;
|
|
1674
1753
|
if (name == Py_None) {
|
|
@@ -1687,6 +1766,12 @@ static PyObject *_nuitka_loader_find_distributions(PyObject *self, PyObject *arg
|
|
|
1687
1766
|
if (include) {
|
|
1688
1767
|
// Create a distribution object from our data.
|
|
1689
1768
|
PyObject *distribution = Nuitka_Distribution_New(tstate, distribution_name);
|
|
1769
|
+
|
|
1770
|
+
if (distribution == NULL) {
|
|
1771
|
+
Py_DECREF(temp);
|
|
1772
|
+
return NULL;
|
|
1773
|
+
}
|
|
1774
|
+
|
|
1690
1775
|
LIST_APPEND1(temp, distribution);
|
|
1691
1776
|
}
|
|
1692
1777
|
}
|
|
@@ -1698,7 +1783,7 @@ static PyObject *_nuitka_loader_find_distributions(PyObject *self, PyObject *arg
|
|
|
1698
1783
|
return result;
|
|
1699
1784
|
}
|
|
1700
1785
|
|
|
1701
|
-
static char const *_kw_list_sys_path_hook[] = {"
|
|
1786
|
+
static char const *_kw_list_sys_path_hook[] = {"path", NULL};
|
|
1702
1787
|
|
|
1703
1788
|
static PyObject *_nuitka_loader_sys_path_hook(PyObject *self, PyObject *args, PyObject *kwds) {
|
|
1704
1789
|
PyObject *path;
|
|
@@ -1722,7 +1807,7 @@ static PyObject *_nuitka_loader_sys_path_hook(PyObject *self, PyObject *args, Py
|
|
|
1722
1807
|
|
|
1723
1808
|
while (entry->name != NULL) {
|
|
1724
1809
|
if ((entry->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
1725
|
-
entry->name =
|
|
1810
|
+
entry->name = UN_TRANSLATE(entry->name);
|
|
1726
1811
|
entry->flags -= NUITKA_TRANSLATED_FLAG;
|
|
1727
1812
|
}
|
|
1728
1813
|
|
|
@@ -1779,7 +1864,7 @@ static PyMethodDef Nuitka_Loader_methods[] = {
|
|
|
1779
1864
|
|
|
1780
1865
|
{"sys_path_hook", (PyCFunction)_nuitka_loader_sys_path_hook, METH_STATIC | METH_VARARGS | METH_KEYWORDS, NULL},
|
|
1781
1866
|
|
|
1782
|
-
{NULL, NULL}
|
|
1867
|
+
{NULL, NULL} // terminator
|
|
1783
1868
|
};
|
|
1784
1869
|
|
|
1785
1870
|
static PyObject *Nuitka_Loader_tp_repr(struct Nuitka_LoaderObject *loader) {
|
|
@@ -1809,15 +1894,29 @@ static void Nuitka_Loader_tp_dealloc(struct Nuitka_LoaderObject *loader) {
|
|
|
1809
1894
|
|
|
1810
1895
|
static int Nuitka_Loader_tp_traverse(struct Nuitka_LoaderObject *loader, visitproc visit, void *arg) { return 0; }
|
|
1811
1896
|
|
|
1897
|
+
static PyObject *Nuitka_Loader_get_name(struct Nuitka_LoaderObject *loader, void *closure) {
|
|
1898
|
+
PyObject *result = Nuitka_String_FromString(loader->m_loader_entry->name);
|
|
1899
|
+
|
|
1900
|
+
return result;
|
|
1901
|
+
}
|
|
1902
|
+
static PyObject *Nuitka_Loader_get_path(struct Nuitka_LoaderObject *loader, void *closure) {
|
|
1903
|
+
PyThreadState *tstate = PyThreadState_GET();
|
|
1904
|
+
PyObject *result = getModuleFileValue(tstate, loader->m_loader_entry);
|
|
1905
|
+
|
|
1906
|
+
return result;
|
|
1907
|
+
}
|
|
1908
|
+
|
|
1812
1909
|
static PyObject *Nuitka_Loader_get__module__(struct Nuitka_LoaderObject *loader, void *closure) {
|
|
1813
1910
|
PyObject *result = const_str_plain___nuitka__;
|
|
1814
1911
|
|
|
1815
|
-
|
|
1912
|
+
Py_INCREF_IMMORTAL(result);
|
|
1816
1913
|
return result;
|
|
1817
1914
|
}
|
|
1818
1915
|
|
|
1819
|
-
static PyGetSetDef
|
|
1820
|
-
|
|
1916
|
+
static PyGetSetDef Nuitka_Loader_tp_getset[] = {{(char *)"__module__", (getter)Nuitka_Loader_get__module__, NULL, NULL},
|
|
1917
|
+
{(char *)"name", (getter)Nuitka_Loader_get_name, NULL, NULL},
|
|
1918
|
+
{(char *)"path", (getter)Nuitka_Loader_get_path, NULL, NULL},
|
|
1919
|
+
{NULL}};
|
|
1821
1920
|
|
|
1822
1921
|
PyTypeObject Nuitka_Loader_Type = {
|
|
1823
1922
|
PyVarObject_HEAD_INIT(NULL, 0) "nuitka_module_loader",
|
|
@@ -1848,7 +1947,7 @@ PyTypeObject Nuitka_Loader_Type = {
|
|
|
1848
1947
|
0, // tp_iternext
|
|
1849
1948
|
Nuitka_Loader_methods, // tp_methods
|
|
1850
1949
|
0, // tp_members
|
|
1851
|
-
|
|
1950
|
+
Nuitka_Loader_tp_getset, // tp_getset
|
|
1852
1951
|
};
|
|
1853
1952
|
|
|
1854
1953
|
/* Used by modules to register child loaders for packages. */
|
|
@@ -1863,8 +1962,44 @@ PyObject *Nuitka_Loader_New(struct Nuitka_MetaPathBasedLoaderEntry const *entry)
|
|
|
1863
1962
|
return (PyObject *)result;
|
|
1864
1963
|
}
|
|
1865
1964
|
|
|
1866
|
-
|
|
1867
|
-
|
|
1965
|
+
#ifdef _NUITKA_MODULE
|
|
1966
|
+
void updateMetaPathBasedLoaderModuleRoot(char const *module_root_name) {
|
|
1967
|
+
assert(module_root_name != NULL);
|
|
1968
|
+
char const *last_dot = strrchr(module_root_name, '.');
|
|
1969
|
+
|
|
1970
|
+
if (last_dot != NULL) {
|
|
1971
|
+
struct Nuitka_MetaPathBasedLoaderEntry *current = loader_entries;
|
|
1972
|
+
assert(current);
|
|
1973
|
+
|
|
1974
|
+
while (current->name != NULL) {
|
|
1975
|
+
if ((current->flags & NUITKA_TRANSLATED_FLAG) != 0) {
|
|
1976
|
+
current->name = UN_TRANSLATE(current->name);
|
|
1977
|
+
current->flags -= NUITKA_TRANSLATED_FLAG;
|
|
1978
|
+
}
|
|
1979
|
+
|
|
1980
|
+
char name[2048];
|
|
1981
|
+
|
|
1982
|
+
if (strcmp(last_dot + 1, current->name) == 0) {
|
|
1983
|
+
copyStringSafeN(name, module_root_name, last_dot - module_root_name + 1, sizeof(name));
|
|
1984
|
+
appendStringSafe(name, current->name, sizeof(name));
|
|
1985
|
+
|
|
1986
|
+
current->name = strdup(name);
|
|
1987
|
+
} else if (strncmp(last_dot + 1, current->name, strlen(last_dot + 1)) == 0 &&
|
|
1988
|
+
current->name[strlen(last_dot + 1)] == '.') {
|
|
1989
|
+
copyStringSafeN(name, module_root_name, last_dot - module_root_name + 1, sizeof(name));
|
|
1990
|
+
appendStringSafe(name, current->name, sizeof(name));
|
|
1991
|
+
|
|
1992
|
+
current->name = strdup(name);
|
|
1993
|
+
}
|
|
1994
|
+
|
|
1995
|
+
current++;
|
|
1996
|
+
}
|
|
1997
|
+
}
|
|
1998
|
+
}
|
|
1999
|
+
#endif
|
|
2000
|
+
|
|
2001
|
+
void registerMetaPathBasedLoader(struct Nuitka_MetaPathBasedLoaderEntry *_loader_entries,
|
|
2002
|
+
unsigned char **bytecode_data) {
|
|
1868
2003
|
// Do it only once.
|
|
1869
2004
|
if (loader_entries) {
|
|
1870
2005
|
assert(_loader_entries == loader_entries);
|
|
@@ -1878,48 +2013,22 @@ void registerMetaPathBasedUnfreezer(struct Nuitka_MetaPathBasedLoaderEntry *_loa
|
|
|
1878
2013
|
PySys_WriteStderr("Setup nuitka compiled module/bytecode/extension importer.\n");
|
|
1879
2014
|
}
|
|
1880
2015
|
|
|
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
|
-
}
|
|
2016
|
+
loader_entries = _loader_entries;
|
|
1909
2017
|
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
2018
|
+
#if defined(_NUITKA_MODULE) && PYTHON_VERSION < 0x3c0
|
|
2019
|
+
if (_Py_PackageContext != NULL) {
|
|
2020
|
+
updateMetaPathBasedLoaderModuleRoot(_Py_PackageContext);
|
|
1913
2021
|
}
|
|
1914
2022
|
#endif
|
|
1915
2023
|
|
|
1916
|
-
loader_entries = _loader_entries;
|
|
1917
|
-
|
|
1918
2024
|
Nuitka_PyType_Ready(&Nuitka_Loader_Type, NULL, true, false, false, false, false);
|
|
1919
2025
|
|
|
1920
2026
|
#ifdef _NUITKA_EXE
|
|
1921
|
-
|
|
1922
|
-
|
|
2027
|
+
{
|
|
2028
|
+
NUITKA_MAY_BE_UNUSED int res =
|
|
2029
|
+
PyDict_SetItemString((PyObject *)dict_builtin, "__nuitka_loader_type", (PyObject *)&Nuitka_Loader_Type);
|
|
2030
|
+
assert(res == 0);
|
|
2031
|
+
}
|
|
1923
2032
|
#endif
|
|
1924
2033
|
|
|
1925
2034
|
#if PYTHON_VERSION >= 0x370
|
|
@@ -1961,6 +2070,7 @@ void setEarlyFrozenModulesFileAttribute(PyThreadState *tstate) {
|
|
|
1961
2070
|
PyObject *file_value = MAKE_RELATIVE_PATH_FROM_NAME(Nuitka_String_AsString(key), is_package, false);
|
|
1962
2071
|
PyObject_SetAttr(value, const_str_plain___file__, file_value);
|
|
1963
2072
|
Py_DECREF(file_value);
|
|
2073
|
+
CHECK_OBJECT(file_value);
|
|
1964
2074
|
}
|
|
1965
2075
|
}
|
|
1966
2076
|
}
|
|
@@ -1972,3 +2082,18 @@ void setEarlyFrozenModulesFileAttribute(PyThreadState *tstate) {
|
|
|
1972
2082
|
|
|
1973
2083
|
// The importlib distribution class is implemented in a separate file.
|
|
1974
2084
|
#include "MetaPathBasedLoaderImportlibMetadataDistribution.c"
|
|
2085
|
+
|
|
2086
|
+
// Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
2087
|
+
// integrates with CPython, but also works on its own.
|
|
2088
|
+
//
|
|
2089
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
2090
|
+
// you may not use this file except in compliance with the License.
|
|
2091
|
+
// You may obtain a copy of the License at
|
|
2092
|
+
//
|
|
2093
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
2094
|
+
//
|
|
2095
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
2096
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
2097
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2098
|
+
// See the License for the specific language governing permissions and
|
|
2099
|
+
// limitations under the License.
|