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,4 @@
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
18
2
 
19
3
  /* This file is included from another C file, help IDEs to still parse it on its own. */
20
4
  #ifdef __IDE_ONLY__
@@ -23,21 +7,6 @@
23
7
 
24
8
  /* WARNING, this code is GENERATED. Modify the template HelperDictionaryCopy.c.j2 instead! */
25
9
 
26
- // Usable fraction of keys.
27
- #define DK_USABLE_FRACTION(n) (((n) << 1) / 3)
28
-
29
- #if PYTHON_VERSION < 0x3b0
30
- typedef PyObject *PyDictValues;
31
- #endif
32
-
33
- #if PYTHON_VERSION < 0x360
34
- #define DK_ENTRIES_SIZE(keys) (keys->dk_size)
35
- #elif PYTHON_VERSION < 0x3b0
36
- #define DK_ENTRIES_SIZE(keys) DK_USABLE_FRACTION(DK_SIZE(keys))
37
- #else
38
- #define DK_ENTRIES_SIZE(keys) (keys->dk_nentries)
39
- #endif
40
-
41
10
  // More than 2/3 of the keys are used, i.e. no space is wasted.
42
11
  #if PYTHON_VERSION < 0x360
43
12
  #define IS_COMPACT(dict_mp) (dict_mp->ma_used >= (dict_mp->ma_keys->dk_size * 2) / 3)
@@ -49,12 +18,12 @@ static inline PyDictValues *_Nuitka_PyDict_new_values(Py_ssize_t size) {
49
18
  Py_ssize_t values_size = sizeof(PyObject *) * size;
50
19
 
51
20
  #if PYTHON_VERSION < 0x3b0
52
- return (PyDictValues *)PyMem_MALLOC(values_size);
21
+ return (PyDictValues *)NuitkaMem_Malloc(values_size);
53
22
  #else
54
23
  // With Python3.11 or higher a prefix is allocated too.
55
24
  size_t prefix_size = _Py_SIZE_ROUND_UP(size + 2, sizeof(PyObject *));
56
25
  size_t n = prefix_size + values_size;
57
- uint8_t *mem = (uint8_t *)PyMem_MALLOC(n);
26
+ uint8_t *mem = (uint8_t *)NuitkaMem_Malloc(n);
58
27
 
59
28
  assert(mem != NULL);
60
29
 
@@ -65,56 +34,7 @@ static inline PyDictValues *_Nuitka_PyDict_new_values(Py_ssize_t size) {
65
34
  #endif
66
35
  }
67
36
 
68
- #if NUITKA_DICT_HAS_FREELIST
69
- static struct _Py_dict_state *_Nuitka_Py_get_dict_state(void) {
70
- PyInterpreterState *interp = _PyInterpreterState_GET();
71
- return &interp->dict_state;
72
- }
73
- #endif
74
-
75
- #if PYTHON_VERSION >= 0x300
76
- static PyDictObject *_Nuitka_AllocatePyDictObject(void) {
77
- PyDictObject *result_mp;
78
-
79
- #if NUITKA_DICT_HAS_FREELIST
80
- struct _Py_dict_state *state = _Nuitka_Py_get_dict_state();
81
-
82
- if (state->numfree) {
83
- result_mp = state->free_list[--state->numfree];
84
-
85
- Nuitka_Py_NewReference((PyObject *)result_mp);
86
-
87
- assert(PyDict_CheckExact((PyObject *)result_mp));
88
- assert(result_mp != NULL);
89
- } else
90
- #endif
91
- {
92
- result_mp = (PyDictObject *)Nuitka_GC_New(&PyDict_Type);
93
- }
94
-
95
- return result_mp;
96
- }
97
- #endif
98
-
99
- #if PYTHON_VERSION >= 0x360 && !defined(_NUITKA_EXPERIMENTAL_DISABLE_DICT_OPT)
100
- static Py_ssize_t _Nuitka_Py_PyDict_KeysSize(PyDictKeysObject *keys) {
101
- #if PYTHON_VERSION < 0x360
102
- return sizeof(PyDictKeysObject) + (DK_SIZE(keys) - 1) * sizeof(PyDictKeyEntry);
103
- #elif PYTHON_VERSION < 0x370
104
- return (sizeof(PyDictKeysObject) - Py_MEMBER_SIZE(PyDictKeysObject, dk_indices) + DK_IXSIZE(keys) * DK_SIZE(keys) +
105
- DK_USABLE_FRACTION(DK_SIZE(keys)) * sizeof(PyDictKeyEntry));
106
- #elif PYTHON_VERSION < 0x3b0
107
- return (sizeof(PyDictKeysObject) + DK_IXSIZE(keys) * DK_SIZE(keys) +
108
- DK_USABLE_FRACTION(DK_SIZE(keys)) * sizeof(PyDictKeyEntry));
109
- #else
110
- size_t entry_size = keys->dk_kind == DICT_KEYS_GENERAL ? sizeof(PyDictKeyEntry) : sizeof(PyDictUnicodeEntry);
111
- return (sizeof(PyDictKeysObject) + ((size_t)1 << keys->dk_log2_index_bytes) +
112
- DK_USABLE_FRACTION(DK_SIZE(keys)) * entry_size);
113
- #endif
114
- }
115
- #endif
116
-
117
- PyObject *DICT_COPY(PyObject *dict_value) {
37
+ PyObject *DICT_COPY(PyThreadState *tstate, PyObject *dict_value) {
118
38
  #if _NUITKA_EXPERIMENTAL_DISABLE_DICT_OPT
119
39
  CHECK_OBJECT(dict_value);
120
40
  assert(PyDict_CheckExact(dict_value));
@@ -127,7 +47,7 @@ PyObject *DICT_COPY(PyObject *dict_value) {
127
47
  assert(PyDict_CheckExact(dict_value));
128
48
 
129
49
  if (((PyDictObject *)dict_value)->ma_used == 0) {
130
- result = MAKE_DICT_EMPTY();
50
+ result = MAKE_DICT_EMPTY(tstate);
131
51
  } else {
132
52
  PyDictObject *dict_mp = (PyDictObject *)dict_value;
133
53
 
@@ -144,27 +64,26 @@ PyObject *DICT_COPY(PyObject *dict_value) {
144
64
 
145
65
  PyObject *value = entry->me_value;
146
66
 
147
- int res = PyDict_SetItem(result, key, value);
67
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
148
68
  assert(res == 0);
149
69
  }
150
70
  }
151
71
  #else
152
72
  /* Python 3 */
153
- #ifndef PY_NOGIL
154
73
  if (_PyDict_HasSplitTable(dict_mp)) {
155
- Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
156
-
157
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
74
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
158
75
  assert(result_mp != NULL);
159
76
  result = (PyObject *)result_mp;
160
77
 
78
+ Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
79
+
161
80
  PyDictValues *new_values = _Nuitka_PyDict_new_values(size);
162
81
  assert(new_values != NULL);
163
82
 
164
83
  #if PYTHON_VERSION >= 0x3b0
165
84
  // Need to preserve values prefix.
166
85
  size_t prefix_size = ((uint8_t *)new_values)[-1];
167
- memcpy(((char *)new_values) - prefix_size, ((char *)dict_mp->ma_values) - prefix_size, prefix_size - 1);
86
+ memcpy((char *)new_values - prefix_size, (char *)dict_mp->ma_values - prefix_size, prefix_size - 1);
168
87
  #endif
169
88
 
170
89
  result_mp->ma_values = new_values;
@@ -191,7 +110,6 @@ PyObject *DICT_COPY(PyObject *dict_value) {
191
110
 
192
111
  Nuitka_GC_Track(result_mp);
193
112
  } else
194
- #endif
195
113
  #if PYTHON_VERSION >= 0x360
196
114
  // Fast dictionary copy if it has at least 2/3 space usage. This is most relevant
197
115
  // for the DICT_COPY, where it might even be the intention to trigger a shrink with
@@ -200,14 +118,14 @@ PyObject *DICT_COPY(PyObject *dict_value) {
200
118
  assert(dict_mp->ma_values == NULL);
201
119
  assert(dict_mp->ma_keys->dk_refcnt == 1);
202
120
 
203
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
121
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
204
122
  result = (PyObject *)result_mp;
205
123
 
206
124
  result_mp->ma_values = NULL;
207
125
  result_mp->ma_used = dict_mp->ma_used;
208
126
 
209
127
  Py_ssize_t keys_size = _Nuitka_Py_PyDict_KeysSize(dict_mp->ma_keys);
210
- result_mp->ma_keys = (PyDictKeysObject *)PyObject_MALLOC(keys_size);
128
+ result_mp->ma_keys = _Nuitka_AllocatePyDictKeysObject(tstate, keys_size);
211
129
  assert(result_mp->ma_keys);
212
130
 
213
131
  memcpy(result_mp->ma_keys, dict_mp->ma_keys, keys_size);
@@ -277,20 +195,37 @@ PyObject *DICT_COPY(PyObject *dict_value) {
277
195
  {
278
196
  result = _PyDict_NewPresized(dict_mp->ma_used);
279
197
 
198
+ #if PYTHON_VERSION < 0x3b0
280
199
  Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
281
200
 
282
201
  for (Py_ssize_t i = 0; i < size; i++) {
283
202
  PyDictKeyEntry *entry = &DK_ENTRIES(dict_mp->ma_keys)[i];
203
+ PyObject *value = entry->me_value;
284
204
 
285
- if (entry->me_value != NULL) {
205
+ if (value != NULL) {
286
206
  PyObject *key = entry->me_key;
207
+ CHECK_OBJECT(key);
287
208
 
288
- PyObject *value = entry->me_value;
209
+ CHECK_OBJECT(value);
289
210
 
290
- int res = PyDict_SetItem(result, key, value);
211
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
291
212
  assert(res == 0);
292
213
  }
293
214
  }
215
+ #else
216
+ Py_ssize_t pos = 0;
217
+ PyObject *key, *value;
218
+
219
+ while (Nuitka_DictNext((PyObject *)dict_mp, &pos, &key, &value)) {
220
+ CHECK_OBJECT(key);
221
+ CHECK_OBJECT(value);
222
+
223
+ CHECK_OBJECT(value);
224
+
225
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
226
+ assert(res == 0);
227
+ }
228
+ #endif
294
229
  }
295
230
  #endif
296
231
  }
@@ -306,7 +241,7 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
306
241
  CHECK_OBJECT(dict_value);
307
242
  assert(PyDict_CheckExact(dict_value));
308
243
 
309
- result = DICT_COPY(dict_value);
244
+ result = DICT_COPY(tstate, dict_value);
310
245
 
311
246
  Py_ssize_t pos = 0;
312
247
  PyObject *key, *value;
@@ -323,7 +258,7 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
323
258
  assert(PyDict_CheckExact(dict_value));
324
259
 
325
260
  if (((PyDictObject *)dict_value)->ma_used == 0) {
326
- result = MAKE_DICT_EMPTY();
261
+ result = MAKE_DICT_EMPTY(tstate);
327
262
  } else {
328
263
  PyDictObject *dict_mp = (PyDictObject *)dict_value;
329
264
 
@@ -341,7 +276,7 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
341
276
  PyObject *value = entry->me_value;
342
277
  value = DEEP_COPY(tstate, value);
343
278
 
344
- int res = PyDict_SetItem(result, key, value);
279
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
345
280
  assert(res == 0);
346
281
 
347
282
  Py_DECREF(value);
@@ -349,21 +284,20 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
349
284
  }
350
285
  #else
351
286
  /* Python 3 */
352
- #ifndef PY_NOGIL
353
287
  if (_PyDict_HasSplitTable(dict_mp)) {
354
- Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
355
-
356
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
288
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
357
289
  assert(result_mp != NULL);
358
290
  result = (PyObject *)result_mp;
359
291
 
292
+ Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
293
+
360
294
  PyDictValues *new_values = _Nuitka_PyDict_new_values(size);
361
295
  assert(new_values != NULL);
362
296
 
363
297
  #if PYTHON_VERSION >= 0x3b0
364
298
  // Need to preserve values prefix.
365
299
  size_t prefix_size = ((uint8_t *)new_values)[-1];
366
- memcpy(((char *)new_values) - prefix_size, ((char *)dict_mp->ma_values) - prefix_size, prefix_size - 1);
300
+ memcpy((char *)new_values - prefix_size, (char *)dict_mp->ma_values - prefix_size, prefix_size - 1);
367
301
  #endif
368
302
 
369
303
  result_mp->ma_values = new_values;
@@ -390,7 +324,6 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
390
324
 
391
325
  Nuitka_GC_Track(result_mp);
392
326
  } else
393
- #endif
394
327
  #if PYTHON_VERSION >= 0x360
395
328
  // Fast dictionary copy if it has at least 2/3 space usage. This is most relevant
396
329
  // for the DICT_COPY, where it might even be the intention to trigger a shrink with
@@ -399,14 +332,14 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
399
332
  assert(dict_mp->ma_values == NULL);
400
333
  assert(dict_mp->ma_keys->dk_refcnt == 1);
401
334
 
402
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
335
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
403
336
  result = (PyObject *)result_mp;
404
337
 
405
338
  result_mp->ma_values = NULL;
406
339
  result_mp->ma_used = dict_mp->ma_used;
407
340
 
408
341
  Py_ssize_t keys_size = _Nuitka_Py_PyDict_KeysSize(dict_mp->ma_keys);
409
- result_mp->ma_keys = (PyDictKeysObject *)PyObject_MALLOC(keys_size);
342
+ result_mp->ma_keys = _Nuitka_AllocatePyDictKeysObject(tstate, keys_size);
410
343
  assert(result_mp->ma_keys);
411
344
 
412
345
  memcpy(result_mp->ma_keys, dict_mp->ma_keys, keys_size);
@@ -478,23 +411,45 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
478
411
  {
479
412
  result = _PyDict_NewPresized(dict_mp->ma_used);
480
413
 
414
+ #if PYTHON_VERSION < 0x3b0
481
415
  Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
482
416
 
483
417
  for (Py_ssize_t i = 0; i < size; i++) {
484
418
  PyDictKeyEntry *entry = &DK_ENTRIES(dict_mp->ma_keys)[i];
419
+ PyObject *value = entry->me_value;
485
420
 
486
- if (entry->me_value != NULL) {
421
+ if (value != NULL) {
487
422
  PyObject *key = entry->me_key;
423
+ CHECK_OBJECT(key);
424
+
425
+ CHECK_OBJECT(value);
488
426
 
489
- PyObject *value = entry->me_value;
490
427
  value = DEEP_COPY(tstate, value);
491
428
 
492
- int res = PyDict_SetItem(result, key, value);
429
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
493
430
  assert(res == 0);
494
431
 
495
432
  Py_DECREF(value);
496
433
  }
497
434
  }
435
+ #else
436
+ Py_ssize_t pos = 0;
437
+ PyObject *key, *value;
438
+
439
+ while (Nuitka_DictNext((PyObject *)dict_mp, &pos, &key, &value)) {
440
+ CHECK_OBJECT(key);
441
+ CHECK_OBJECT(value);
442
+
443
+ CHECK_OBJECT(value);
444
+
445
+ value = DEEP_COPY(tstate, value);
446
+
447
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
448
+ assert(res == 0);
449
+
450
+ Py_DECREF(value);
451
+ }
452
+ #endif
498
453
  }
499
454
  #endif
500
455
  }
@@ -505,7 +460,7 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
505
460
  }
506
461
 
507
462
  // Helper for function calls with star dict arguments. */
508
- static PyObject *COPY_DICT_KW(PyObject *dict_value) {
463
+ static PyObject *COPY_DICT_KW(PyThreadState *tstate, PyObject *dict_value) {
509
464
  PyObject *result;
510
465
  bool had_kw_error = false;
511
466
 
@@ -513,7 +468,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
513
468
  CHECK_OBJECT(dict_value);
514
469
  assert(PyDict_CheckExact(dict_value));
515
470
 
516
- result = DICT_COPY(dict_value);
471
+ result = DICT_COPY(tstate, dict_value);
517
472
 
518
473
  Py_ssize_t pos = 0;
519
474
  PyObject *key, *value;
@@ -528,7 +483,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
528
483
  assert(PyDict_CheckExact(dict_value));
529
484
 
530
485
  if (((PyDictObject *)dict_value)->ma_used == 0) {
531
- result = MAKE_DICT_EMPTY();
486
+ result = MAKE_DICT_EMPTY(tstate);
532
487
  } else {
533
488
  PyDictObject *dict_mp = (PyDictObject *)dict_value;
534
489
 
@@ -548,20 +503,20 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
548
503
 
549
504
  PyObject *value = entry->me_value;
550
505
 
551
- int res = PyDict_SetItem(result, key, value);
506
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
552
507
  assert(res == 0);
553
508
  }
554
509
  }
555
510
  #else
556
511
  /* Python 3 */
557
- #ifndef PY_NOGIL
558
512
  if (_PyDict_HasSplitTable(dict_mp)) {
559
- Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
560
-
561
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
513
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
562
514
  assert(result_mp != NULL);
563
515
  result = (PyObject *)result_mp;
564
516
 
517
+ Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
518
+
519
+ #if PYTHON_VERSION < 0x3b0
565
520
  for (Py_ssize_t i = 0; i < size; i++) {
566
521
  PyDictKeyEntry *entry = &DK_ENTRIES(dict_mp->ma_keys)[i];
567
522
 
@@ -571,6 +526,18 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
571
526
  had_kw_error = true;
572
527
  }
573
528
  }
529
+ #else
530
+ Py_ssize_t pos = 0;
531
+ PyObject *key, *_value;
532
+
533
+ while (Nuitka_DictNext((PyObject *)dict_mp, &pos, &key, &_value)) {
534
+ CHECK_OBJECT(key);
535
+ CHECK_OBJECT(_value);
536
+
537
+ if (unlikely(!checkKeywordType(key))) {
538
+ had_kw_error = true;
539
+ }
540
+ #endif
574
541
  }
575
542
 
576
543
  PyDictValues *new_values = _Nuitka_PyDict_new_values(size);
@@ -579,7 +546,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
579
546
  #if PYTHON_VERSION >= 0x3b0
580
547
  // Need to preserve values prefix.
581
548
  size_t prefix_size = ((uint8_t *)new_values)[-1];
582
- memcpy(((char *)new_values) - prefix_size, ((char *)dict_mp->ma_values) - prefix_size, prefix_size - 1);
549
+ memcpy((char *)new_values - prefix_size, (char *)dict_mp->ma_values - prefix_size, prefix_size - 1);
583
550
  #endif
584
551
 
585
552
  result_mp->ma_values = new_values;
@@ -606,7 +573,6 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
606
573
 
607
574
  Nuitka_GC_Track(result_mp);
608
575
  } else
609
- #endif
610
576
  #if PYTHON_VERSION >= 0x360
611
577
  // Fast dictionary copy if it has at least 2/3 space usage. This is most relevant
612
578
  // for the DICT_COPY, where it might even be the intention to trigger a shrink with
@@ -615,14 +581,14 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
615
581
  assert(dict_mp->ma_values == NULL);
616
582
  assert(dict_mp->ma_keys->dk_refcnt == 1);
617
583
 
618
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
584
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
619
585
  result = (PyObject *)result_mp;
620
586
 
621
587
  result_mp->ma_values = NULL;
622
588
  result_mp->ma_used = dict_mp->ma_used;
623
589
 
624
590
  Py_ssize_t keys_size = _Nuitka_Py_PyDict_KeysSize(dict_mp->ma_keys);
625
- result_mp->ma_keys = (PyDictKeysObject *)PyObject_MALLOC(keys_size);
591
+ result_mp->ma_keys = _Nuitka_AllocatePyDictKeysObject(tstate, keys_size);
626
592
  assert(result_mp->ma_keys);
627
593
 
628
594
  memcpy(result_mp->ma_keys, dict_mp->ma_keys, keys_size);
@@ -675,7 +641,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
675
641
 
676
642
  Py_INCREF(value);
677
643
  PyObject *key = *key_ptr;
678
- if (is_unicode) {
644
+ if (is_unicode == false) {
679
645
  if (unlikely(!checkKeywordType(key))) {
680
646
  had_kw_error = true;
681
647
  }
@@ -699,23 +665,45 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
699
665
  {
700
666
  result = _PyDict_NewPresized(dict_mp->ma_used);
701
667
 
668
+ #if PYTHON_VERSION < 0x3b0
702
669
  Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
703
670
 
704
671
  for (Py_ssize_t i = 0; i < size; i++) {
705
672
  PyDictKeyEntry *entry = &DK_ENTRIES(dict_mp->ma_keys)[i];
673
+ PyObject *value = entry->me_value;
706
674
 
707
- if (entry->me_value != NULL) {
675
+ if (value != NULL) {
708
676
  PyObject *key = entry->me_key;
677
+ CHECK_OBJECT(key);
678
+
709
679
  if (unlikely(!checkKeywordType(key))) {
710
680
  had_kw_error = true;
711
681
  }
712
682
 
713
- PyObject *value = entry->me_value;
683
+ CHECK_OBJECT(value);
714
684
 
715
- int res = PyDict_SetItem(result, key, value);
685
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
716
686
  assert(res == 0);
717
687
  }
718
688
  }
689
+ #else
690
+ Py_ssize_t pos = 0;
691
+ PyObject *key, *value;
692
+
693
+ while (Nuitka_DictNext((PyObject *)dict_mp, &pos, &key, &value)) {
694
+ CHECK_OBJECT(key);
695
+ CHECK_OBJECT(value);
696
+
697
+ if (unlikely(!checkKeywordType(key))) {
698
+ had_kw_error = true;
699
+ }
700
+
701
+ CHECK_OBJECT(value);
702
+
703
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
704
+ assert(res == 0);
705
+ }
706
+ #endif
719
707
  }
720
708
  #endif
721
709
  }
@@ -729,3 +717,18 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
729
717
 
730
718
  return result;
731
719
  }
720
+
721
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
722
+ // integrates with CPython, but also works on its own.
723
+ //
724
+ // Licensed under the Apache License, Version 2.0 (the "License");
725
+ // you may not use this file except in compliance with the License.
726
+ // You may obtain a copy of the License at
727
+ //
728
+ // http://www.apache.org/licenses/LICENSE-2.0
729
+ //
730
+ // Unless required by applicable law or agreed to in writing, software
731
+ // distributed under the License is distributed on an "AS IS" BASIS,
732
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
733
+ // See the License for the specific language governing permissions and
734
+ // limitations under the License.
@@ -0,0 +1,63 @@
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /* These helpers are used to report C backtraces */
4
+
5
+ #include "backtrace/backtrace.h"
6
+
7
+ static struct backtrace_state *our_backtrace_state = NULL;
8
+
9
+ void INIT_C_BACKTRACES(void) {
10
+ our_backtrace_state = backtrace_create_state(NULL, 1, NULL, NULL);
11
+ assert(our_backtrace_state != NULL);
12
+ }
13
+
14
+ static int bt_frame_count = 0;
15
+
16
+ static int ourBacktraceFullCallback(void *data, uintptr_t pc, const char *filename, int lineno, const char *function) {
17
+ if (strcmp(function, "DUMP_C_BACKTRACE") != 0) {
18
+ fprintf(stderr, "#%d %s:%d %s\n", bt_frame_count, filename, lineno, function);
19
+ bt_frame_count += 1;
20
+ }
21
+
22
+ if (strcmp(function, "main") == 0) {
23
+ return 1;
24
+ }
25
+
26
+ return 0;
27
+ }
28
+
29
+ void DUMP_C_BACKTRACE(void) {
30
+ assert(our_backtrace_state != NULL);
31
+
32
+ bt_frame_count = 0;
33
+ backtrace_full(our_backtrace_state, 0, ourBacktraceFullCallback, NULL, NULL);
34
+ }
35
+
36
+ #include "backtrace/backtrace.c"
37
+ #include "backtrace/dwarf.c"
38
+ #if !defined(_WIN32)
39
+ #include "backtrace/elf.c"
40
+ #include "backtrace/mmap.c"
41
+ #else
42
+ #include "backtrace/alloc.c"
43
+ #include "backtrace/pecoff.c"
44
+ #endif
45
+ #include "backtrace/fileline.c"
46
+ #include "backtrace/posix.c"
47
+ #include "backtrace/read.c"
48
+ #include "backtrace/sort.c"
49
+ #include "backtrace/state.c"
50
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
51
+ // integrates with CPython, but also works on its own.
52
+ //
53
+ // Licensed under the Apache License, Version 2.0 (the "License");
54
+ // you may not use this file except in compliance with the License.
55
+ // You may obtain a copy of the License at
56
+ //
57
+ // http://www.apache.org/licenses/LICENSE-2.0
58
+ //
59
+ // Unless required by applicable law or agreed to in writing, software
60
+ // distributed under the License is distributed on an "AS IS" BASIS,
61
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
62
+ // See the License for the specific language governing permissions and
63
+ // limitations under the License.
@@ -0,0 +1,65 @@
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ // Helpers for working with environment variables from Python binary in a
4
+ // portable way.
5
+
6
+ #include "nuitka/environment_variables.h"
7
+
8
+ #include "HelpersEnvironmentVariablesSystem.c"
9
+
10
+ void undoEnvironmentVariable(PyThreadState *tstate, char const *variable_name, environment_char_t const *old_value) {
11
+ PyObject *os_module = IMPORT_HARD_OS();
12
+ CHECK_OBJECT(os_module);
13
+
14
+ PyObject *os_environ = PyObject_GetAttrString(os_module, "environ");
15
+ CHECK_OBJECT(os_environ);
16
+
17
+ PyObject *variable_name_str = Nuitka_String_FromString(variable_name);
18
+ CHECK_OBJECT(variable_name_str);
19
+
20
+ if (old_value) {
21
+ setEnvironmentVariable(variable_name, old_value);
22
+
23
+ #ifdef _WIN32
24
+ PyObject *env_value = NuitkaUnicode_FromWideChar(old_value, -1);
25
+ #else
26
+ PyObject *env_value = Nuitka_String_FromString(old_value);
27
+ #endif
28
+ CHECK_OBJECT(env_value);
29
+
30
+ int res = PyObject_SetItem(os_environ, variable_name_str, env_value);
31
+
32
+ if (unlikely(res != 0)) {
33
+ PyErr_PrintEx(1);
34
+ Py_Exit(1);
35
+ }
36
+
37
+ Py_DECREF(env_value);
38
+ } else {
39
+ unsetEnvironmentVariable(variable_name);
40
+
41
+ int res = PyObject_DelItem(os_environ, variable_name_str);
42
+
43
+ if (unlikely(res != 0)) {
44
+ CLEAR_ERROR_OCCURRED(tstate);
45
+ }
46
+ }
47
+
48
+ Py_DECREF(variable_name_str);
49
+ Py_DECREF(os_environ);
50
+ }
51
+
52
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
53
+ // integrates with CPython, but also works on its own.
54
+ //
55
+ // Licensed under the Apache License, Version 2.0 (the "License");
56
+ // you may not use this file except in compliance with the License.
57
+ // You may obtain a copy of the License at
58
+ //
59
+ // http://www.apache.org/licenses/LICENSE-2.0
60
+ //
61
+ // Unless required by applicable law or agreed to in writing, software
62
+ // distributed under the License is distributed on an "AS IS" BASIS,
63
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
64
+ // See the License for the specific language governing permissions and
65
+ // limitations under the License.