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.

Files changed (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +93 -54
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,5 @@
1
- // Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
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;; p++) {
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 *appendModulenameAsPath(char *buffer, char const *module_name, size_t buffer_size) {
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 appendModulenameAsPathW(wchar_t *buffer, char const *module_name, size_t buffer_size) {
109
- // Skip to the end
110
- while (*buffer != 0) {
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 (*module_name) {
115
- char c = *module_name++;
101
+ while (size > 0) {
102
+ wchar_t c = *module_name_wstr++;
103
+ size -= 1;
116
104
 
117
- if (c == '.') {
118
- c = SEP;
105
+ if (c == L'.') {
106
+ c = SEP_L;
119
107
  }
120
108
 
121
- appendCharSafeW(buffer, c, buffer_size);
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
- #else
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
- appendModulenameAsPath(buffer, name, sizeof(buffer));
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 *loadModuleFromCodeObject(PyObject *module, PyCodeObject *code_object, char const *name,
184
- bool is_package) {
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
- bool b_res = Nuitka_SetModuleString(name, module);
188
- assert(b_res != false);
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
- appendModulenameAsPath(buffer, name, sizeof(buffer));
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
- appendModulenameAsPath(buffer, name, sizeof(buffer));
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 = MAKE_LIST_EMPTY(1);
216
- if (unlikely(path_list == NULL))
217
- return NULL;
215
+ PyObject *path_list = _makeDunderPathObject(tstate, module_path_entry);
218
216
 
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);
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 = UNTRANSLATE(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 = UNTRANSLATE(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 *module_relname_str = Nuitka_String_AsString(module_name) + strlen(parent_module_name) + 1;
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, module_relname_str, strlen(module_relname_str)) == 0 &&
412
- filename_str[strlen(module_relname_str)] == '.') {
413
- LIST_APPEND1(candidates, PyTuple_Pack(2, path_element, filename));
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(module_relname_str);
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(module_relname_str)) == 0) {
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
- #ifdef _WIN32
474
- static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const wchar_t *filename);
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
- #if PYTHON_VERSION < 0x300
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
- return callIntoExtensionModule(tstate, Nuitka_String_AsString(module_name), extension_module_filename_str);
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
- Py_INCREF(Py_None);
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
- #ifdef _WIN32
597
- static void setModuleFileValue(PyThreadState *tstate, PyObject *module, wchar_t const *filename) {
598
- #else
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
- if (existing_file_value == NULL) {
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
- Py_DECREF(existing_file_value);
614
- }
589
+ PyObject *dict = PyModule_GetDict(module);
615
590
 
616
- if (needs_update) {
617
- #ifdef _WIN32
618
- int res = SET_ATTRIBUTE(tstate, module, const_str_plain___file__, NuitkaUnicode_FromWideChar(filename, -1));
619
- #else
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
- static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const wchar_t *filename) {
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
- static PyObject *callIntoExtensionModule(PyThreadState *tstate, char const *full_name, const char *filename) {
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
- snprintf(entry_function_name, sizeof(entry_function_name),
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
- error_code);
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
- #if PYTHON_VERSION < 0x370
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
- _Py_PackageContext = old_context;
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 *spec_value = createModuleSpec(tstate, full_name_obj, NULL, false);
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
- SET_ATTRIBUTE(tstate, spec_value, const_str_plain__initializing, Py_True);
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
- #ifdef _WIN32
909
- PyObject *filename_obj = NuitkaUnicode_FromWideChar(filename, -1);
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 >= 0x340
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
- // Append the the entry name from full path module name with dots,
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
- // 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);
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
- SET_ATTRIBUTE(tstate, module, const_str_plain___spec__, spec_value);
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, (entry->flags & NUITKA_PACKAGE_FLAG) != 0);
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->python_initfunc);
1091
+ assert(entry->python_init_func);
1029
1092
 
1030
- bool res = Nuitka_SetModule(module_name, module);
1031
- assert(res != false);
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
- PyObject *result = entry->python_initfunc(tstate, module, entry);
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 >= 0x340
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
- Py_INCREF(Py_None);
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
- Py_INCREF(result);
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
- PyObject *result = MAKE_LIST_EMPTY(0);
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 = UNTRANSLATE(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
- PyTuple_SET_ITEM0(r, 1, BOOL_FROM((current->flags & NUITKA_PACKAGE_FLAG) != 0));
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
- Py_INCREF(Py_None);
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
- res = SET_ATTRIBUTE(tstate, module, const_str_plain___file__, extension_module_filename);
1673
+ bool b_res = SET_ATTRIBUTE(tstate, module, const_str_plain___file__, extension_module_filename);
1596
1674
 
1597
- if (unlikely(res < 0)) {
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
- PyObject *temp = MAKE_LIST_EMPTY(0);
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[] = {"context", NULL};
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 = UNTRANSLATE(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 >= 0x340
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
- Py_INCREF(result);
1911
+ Py_INCREF_IMMORTAL(result);
1816
1912
  return result;
1817
1913
  }
1818
1914
 
1819
- static PyGetSetDef Nuitka_Loader_getsets[] = {{(char *)"__module__", (getter)Nuitka_Loader_get__module__, NULL, NULL},
1820
- {NULL}};
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
- Nuitka_Loader_getsets, // tp_getset
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
- void registerMetaPathBasedUnfreezer(struct Nuitka_MetaPathBasedLoaderEntry *_loader_entries,
1867
- unsigned char **bytecode_data) {
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
- #ifdef _NUITKA_MODULE
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
- current++;
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
- int res = PyDict_SetItemString((PyObject *)dict_builtin, "__nuitka_loader_type", (PyObject *)&Nuitka_Loader_Type);
1922
- assert(res == 0);
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.