Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.4.8__cp311-cp311-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of Nuitka-winsvc might be problematic. Click here for more details.

Files changed (704) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.4.8.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/METADATA +4 -3
  4. Nuitka_winsvc-2.4.8.dist-info/RECORD +954 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +18 -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 +400 -0
  13. nuitka/MainControl.py +200 -112
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +368 -175
  16. nuitka/Options.py +632 -213
  17. nuitka/OutputDirectories.py +40 -21
  18. nuitka/PostProcessing.py +73 -50
  19. nuitka/Progress.py +58 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +106 -19
  23. nuitka/Serialization.py +68 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +108 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +21 -7
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +202 -140
  33. nuitka/build/CCompilerVersion.scons +39 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +50 -54
  36. nuitka/build/SconsCaching.py +93 -90
  37. nuitka/build/SconsCompilerSettings.py +157 -69
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +154 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +147 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +105 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +18 -18
  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 +18 -18
  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 +91 -53
  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 +29 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/environment_variables.h +30 -0
  59. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  60. nuitka/build/include/nuitka/exception_groups.h +23 -26
  61. nuitka/build/include/nuitka/exceptions.h +593 -190
  62. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  63. nuitka/build/include/nuitka/freelists.h +38 -18
  64. nuitka/build/include/nuitka/helper/attributes.h +24 -18
  65. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  66. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  68. nuitka/build/include/nuitka/helper/calling_generated.h +17 -17
  69. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  70. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  71. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  72. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  73. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  74. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  75. nuitka/build/include/nuitka/helper/complex.h +17 -17
  76. nuitka/build/include/nuitka/helper/dictionaries.h +24 -22
  77. nuitka/build/include/nuitka/helper/floats.h +17 -18
  78. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  79. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  80. nuitka/build/include/nuitka/helper/ints.h +32 -20
  81. nuitka/build/include/nuitka/helper/iterators.h +17 -17
  82. nuitka/build/include/nuitka/helper/lists.h +26 -24
  83. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  84. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  85. nuitka/build/include/nuitka/helper/operations.h +17 -17
  86. nuitka/build/include/nuitka/helper/operations_binary_add.h +17 -17
  87. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  88. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  89. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  90. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  91. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  92. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  99. nuitka/build/include/nuitka/helper/operations_binary_sub.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_inplace_add.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  108. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  116. nuitka/build/include/nuitka/helper/raising.h +29 -17
  117. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  118. nuitka/build/include/nuitka/helper/richcomparisons.h +14 -14
  119. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  120. nuitka/build/include/nuitka/helper/sets.h +11 -12
  121. nuitka/build/include/nuitka/helper/slices.h +31 -25
  122. nuitka/build/include/nuitka/helper/strings.h +16 -17
  123. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  124. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  125. nuitka/build/include/nuitka/helpers.h +38 -20
  126. nuitka/build/include/nuitka/importing.h +28 -21
  127. nuitka/build/include/nuitka/jit_sources.h +25 -0
  128. nuitka/build/include/nuitka/prelude.h +128 -46
  129. nuitka/build/include/nuitka/printing.h +22 -17
  130. nuitka/build/include/nuitka/python_pgo.h +19 -18
  131. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  132. nuitka/build/include/nuitka/threading.h +32 -33
  133. nuitka/build/include/nuitka/tracing.h +28 -18
  134. nuitka/build/include/nuitka/type_aliases.h +27 -0
  135. nuitka/build/include/nuitka/unfreezing.h +29 -23
  136. nuitka/build/inline_copy/bin/scons.py +14 -0
  137. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  138. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  139. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  140. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  141. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  142. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  143. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  144. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  145. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  146. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  147. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  160. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  161. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  162. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  163. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  164. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  165. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  166. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  167. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  168. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  169. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  170. nuitka/build/static_src/CompiledAsyncgenType.c +176 -182
  171. nuitka/build/static_src/CompiledCellType.c +63 -40
  172. nuitka/build/static_src/CompiledCodeHelpers.c +181 -128
  173. nuitka/build/static_src/CompiledCoroutineType.c +196 -203
  174. nuitka/build/static_src/CompiledFrameType.c +287 -133
  175. nuitka/build/static_src/CompiledFunctionType.c +389 -95
  176. nuitka/build/static_src/CompiledGeneratorType.c +376 -252
  177. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +185 -198
  178. nuitka/build/static_src/CompiledMethodType.c +83 -71
  179. nuitka/build/static_src/HelpersAllocator.c +88 -19
  180. nuitka/build/static_src/HelpersAttributes.c +33 -54
  181. nuitka/build/static_src/HelpersBuiltin.c +43 -33
  182. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  183. nuitka/build/static_src/HelpersBytes.c +19 -20
  184. nuitka/build/static_src/HelpersCalling.c +33 -30
  185. nuitka/build/static_src/HelpersCallingGenerated.c +1000 -181
  186. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  187. nuitka/build/static_src/HelpersClasses.c +17 -17
  188. nuitka/build/static_src/HelpersComparisonEq.c +518 -492
  189. nuitka/build/static_src/HelpersComparisonEqUtils.c +21 -19
  190. nuitka/build/static_src/HelpersComparisonGe.c +513 -497
  191. nuitka/build/static_src/HelpersComparisonGt.c +512 -496
  192. nuitka/build/static_src/HelpersComparisonLe.c +513 -497
  193. nuitka/build/static_src/HelpersComparisonLt.c +512 -496
  194. nuitka/build/static_src/HelpersComparisonNe.c +520 -492
  195. nuitka/build/static_src/HelpersConsole.c +96 -0
  196. nuitka/build/static_src/HelpersConstantsBlob.c +542 -519
  197. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  198. nuitka/build/static_src/HelpersDictionaries.c +51 -29
  199. nuitka/build/static_src/HelpersDictionariesGenerated.c +177 -68
  200. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  201. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  202. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  203. nuitka/build/static_src/HelpersExceptions.c +161 -50
  204. nuitka/build/static_src/HelpersFiles.c +37 -17
  205. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  206. nuitka/build/static_src/HelpersFloats.c +37 -31
  207. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  208. nuitka/build/static_src/HelpersImport.c +48 -20
  209. nuitka/build/static_src/HelpersImportHard.c +53 -17
  210. nuitka/build/static_src/HelpersJitSources.c +46 -0
  211. nuitka/build/static_src/HelpersLists.c +140 -50
  212. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  213. nuitka/build/static_src/HelpersMappings.c +17 -17
  214. nuitka/build/static_src/HelpersMatching.c +137 -51
  215. nuitka/build/static_src/HelpersOperationBinaryAdd.c +173 -146
  216. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +99 -52
  217. nuitka/build/static_src/HelpersOperationBinaryBitand.c +50 -50
  218. nuitka/build/static_src/HelpersOperationBinaryBitor.c +50 -50
  219. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +50 -50
  220. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +41 -41
  221. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  222. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +41 -41
  223. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  224. nuitka/build/static_src/HelpersOperationBinaryLshift.c +47 -47
  225. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +24 -24
  226. nuitka/build/static_src/HelpersOperationBinaryMod.c +107 -107
  227. nuitka/build/static_src/HelpersOperationBinaryMult.c +81 -75
  228. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  229. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +41 -41
  230. nuitka/build/static_src/HelpersOperationBinaryPow.c +44 -44
  231. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  232. nuitka/build/static_src/HelpersOperationBinaryRshift.c +47 -47
  233. nuitka/build/static_src/HelpersOperationBinarySub.c +80 -80
  234. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +41 -41
  235. nuitka/build/static_src/HelpersOperationInplaceAdd.c +171 -153
  236. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  237. nuitka/build/static_src/HelpersOperationInplaceBitand.c +53 -53
  238. nuitka/build/static_src/HelpersOperationInplaceBitor.c +53 -53
  239. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +53 -53
  240. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +62 -62
  241. nuitka/build/static_src/HelpersOperationInplaceLshift.c +44 -44
  242. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +37 -37
  243. nuitka/build/static_src/HelpersOperationInplaceMod.c +134 -134
  244. nuitka/build/static_src/HelpersOperationInplaceMult.c +78 -78
  245. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +62 -62
  246. nuitka/build/static_src/HelpersOperationInplacePow.c +62 -62
  247. nuitka/build/static_src/HelpersOperationInplaceRshift.c +44 -44
  248. nuitka/build/static_src/HelpersOperationInplaceSub.c +112 -112
  249. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +62 -62
  250. nuitka/build/static_src/HelpersProfiling.c +24 -23
  251. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  252. nuitka/build/static_src/HelpersRaising.c +88 -20
  253. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  254. nuitka/build/static_src/HelpersSequences.c +18 -19
  255. nuitka/build/static_src/HelpersSlices.c +29 -23
  256. nuitka/build/static_src/HelpersStrings.c +234 -37
  257. nuitka/build/static_src/HelpersTuples.c +46 -34
  258. nuitka/build/static_src/HelpersTypes.c +68 -23
  259. nuitka/build/static_src/InspectPatcher.c +108 -27
  260. nuitka/build/static_src/MainProgram.c +359 -263
  261. nuitka/build/static_src/MetaPathBasedLoader.c +367 -242
  262. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  263. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  264. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +97 -22
  265. nuitka/build/static_src/OnefileBootstrap.c +276 -164
  266. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  267. nuitka/code_generation/AsyncgenCodes.py +19 -17
  268. nuitka/code_generation/AttributeCodes.py +31 -27
  269. nuitka/code_generation/BinaryOperationHelperDefinitions.py +24 -20
  270. nuitka/code_generation/BranchCodes.py +19 -17
  271. nuitka/code_generation/BuiltinCodes.py +20 -17
  272. nuitka/code_generation/CallCodes.py +19 -17
  273. nuitka/code_generation/ClassCodes.py +19 -17
  274. nuitka/code_generation/CodeGeneration.py +48 -27
  275. nuitka/code_generation/CodeHelperSelection.py +19 -17
  276. nuitka/code_generation/CodeHelpers.py +24 -20
  277. nuitka/code_generation/CodeObjectCodes.py +34 -24
  278. nuitka/code_generation/ComparisonCodes.py +38 -20
  279. nuitka/code_generation/ComparisonHelperDefinitions.py +19 -17
  280. nuitka/code_generation/ConditionalCodes.py +19 -17
  281. nuitka/code_generation/ConstantCodes.py +82 -28
  282. nuitka/code_generation/Contexts.py +152 -26
  283. nuitka/code_generation/CoroutineCodes.py +19 -17
  284. nuitka/code_generation/CtypesCodes.py +19 -17
  285. nuitka/code_generation/DictCodes.py +25 -23
  286. nuitka/code_generation/Emission.py +21 -18
  287. nuitka/code_generation/ErrorCodes.py +27 -33
  288. nuitka/code_generation/EvalCodes.py +24 -20
  289. nuitka/code_generation/ExceptionCodes.py +27 -18
  290. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +20 -17
  291. nuitka/code_generation/ExpressionCodes.py +19 -17
  292. nuitka/code_generation/FrameCodes.py +24 -20
  293. nuitka/code_generation/FunctionCodes.py +24 -21
  294. nuitka/code_generation/GeneratorCodes.py +23 -20
  295. nuitka/code_generation/GlobalConstants.py +43 -23
  296. nuitka/code_generation/GlobalsLocalsCodes.py +21 -19
  297. nuitka/code_generation/IdCodes.py +19 -17
  298. nuitka/code_generation/ImportCodes.py +90 -50
  299. nuitka/code_generation/Indentation.py +23 -22
  300. nuitka/code_generation/IndexCodes.py +19 -17
  301. nuitka/code_generation/InjectCCodes.py +14 -12
  302. nuitka/code_generation/IntegerCodes.py +19 -17
  303. nuitka/code_generation/IteratorCodes.py +19 -17
  304. nuitka/code_generation/JitCodes.py +44 -0
  305. nuitka/code_generation/LabelCodes.py +19 -17
  306. nuitka/code_generation/LineNumberCodes.py +19 -17
  307. nuitka/code_generation/ListCodes.py +32 -36
  308. nuitka/code_generation/LoaderCodes.py +22 -17
  309. nuitka/code_generation/LocalsDictCodes.py +56 -32
  310. nuitka/code_generation/LoopCodes.py +19 -17
  311. nuitka/code_generation/MatchCodes.py +42 -22
  312. nuitka/code_generation/ModuleCodes.py +43 -25
  313. nuitka/code_generation/Namify.py +27 -23
  314. nuitka/code_generation/NetworkxCodes.py +51 -0
  315. nuitka/code_generation/OperationCodes.py +29 -31
  316. nuitka/code_generation/PackageResourceCodes.py +59 -23
  317. nuitka/code_generation/PrintCodes.py +19 -17
  318. nuitka/code_generation/PythonAPICodes.py +19 -17
  319. nuitka/code_generation/RaisingCodes.py +19 -17
  320. nuitka/code_generation/Reports.py +19 -17
  321. nuitka/code_generation/ReturnCodes.py +19 -17
  322. nuitka/code_generation/SetCodes.py +19 -17
  323. nuitka/code_generation/SliceCodes.py +22 -20
  324. nuitka/code_generation/StringCodes.py +19 -17
  325. nuitka/code_generation/SubscriptCodes.py +24 -30
  326. nuitka/code_generation/TensorflowCodes.py +54 -0
  327. nuitka/code_generation/TryCodes.py +19 -17
  328. nuitka/code_generation/TupleCodes.py +20 -18
  329. nuitka/code_generation/TypeAliasCodes.py +71 -0
  330. nuitka/code_generation/VariableCodes.py +26 -22
  331. nuitka/code_generation/VariableDeclarations.py +20 -17
  332. nuitka/code_generation/YieldCodes.py +22 -20
  333. nuitka/code_generation/__init__.py +5 -4
  334. nuitka/code_generation/c_types/CTypeBases.py +19 -17
  335. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  336. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  337. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  338. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +19 -17
  339. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +19 -17
  340. nuitka/code_generation/c_types/CTypeNuitkaInts.py +19 -18
  341. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +19 -17
  342. nuitka/code_generation/c_types/CTypePyObjectPointers.py +27 -25
  343. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  344. nuitka/code_generation/c_types/__init__.py +5 -4
  345. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +18 -17
  346. nuitka/code_generation/templates/CodeTemplatesConstants.py +132 -36
  347. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +18 -17
  348. nuitka/code_generation/templates/CodeTemplatesExceptions.py +19 -18
  349. nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -17
  350. nuitka/code_generation/templates/CodeTemplatesFunction.py +18 -17
  351. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +19 -17
  352. nuitka/code_generation/templates/CodeTemplatesIterators.py +18 -18
  353. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  354. nuitka/code_generation/templates/CodeTemplatesModules.py +244 -165
  355. nuitka/code_generation/templates/CodeTemplatesVariables.py +42 -27
  356. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  357. nuitka/code_generation/templates/__init__.py +5 -4
  358. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  359. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +18 -18
  360. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +76 -25
  361. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  362. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  363. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  364. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  365. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +121 -48
  366. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +18 -18
  367. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +18 -18
  368. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  369. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  370. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  371. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +28 -28
  372. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  373. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  374. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +44 -32
  375. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +20 -20
  376. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +28 -28
  377. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +24 -24
  378. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +33 -29
  379. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  380. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +27 -27
  381. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  382. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  384. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +17 -17
  385. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  386. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +26 -24
  387. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  388. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  389. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  390. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  391. nuitka/containers/Namedtuples.py +19 -18
  392. nuitka/containers/OrderedSetsFallback.py +19 -17
  393. nuitka/containers/__init__.py +5 -4
  394. nuitka/distutils/Build.py +19 -18
  395. nuitka/distutils/DistutilCommands.py +34 -23
  396. nuitka/distutils/__init__.py +5 -4
  397. nuitka/finalizations/Finalization.py +20 -17
  398. nuitka/finalizations/FinalizeMarkups.py +21 -41
  399. nuitka/finalizations/__init__.py +5 -4
  400. nuitka/freezer/DependsExe.py +48 -28
  401. nuitka/freezer/DllDependenciesCommon.py +47 -20
  402. nuitka/freezer/DllDependenciesMacOS.py +147 -57
  403. nuitka/freezer/DllDependenciesPosix.py +29 -19
  404. nuitka/freezer/DllDependenciesWin32.py +29 -21
  405. nuitka/freezer/ImportDetection.py +20 -17
  406. nuitka/freezer/IncludedDataFiles.py +118 -47
  407. nuitka/freezer/IncludedEntryPoints.py +102 -38
  408. nuitka/freezer/Onefile.py +32 -22
  409. nuitka/freezer/Standalone.py +105 -50
  410. nuitka/freezer/__init__.py +5 -4
  411. nuitka/importing/IgnoreListing.py +19 -17
  412. nuitka/importing/ImportCache.py +24 -21
  413. nuitka/importing/ImportResolving.py +103 -95
  414. nuitka/importing/Importing.py +286 -92
  415. nuitka/importing/PreloadedPackages.py +21 -18
  416. nuitka/importing/Recursion.py +131 -47
  417. nuitka/importing/StandardLibrary.py +46 -28
  418. nuitka/importing/__init__.py +5 -4
  419. nuitka/nodes/AsyncgenNodes.py +19 -17
  420. nuitka/nodes/AttributeLookupNodes.py +19 -17
  421. nuitka/nodes/AttributeNodes.py +19 -17
  422. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  423. nuitka/nodes/BuiltinAllNodes.py +19 -17
  424. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  425. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  426. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  427. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  428. nuitka/nodes/BuiltinDictNodes.py +19 -17
  429. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  430. nuitka/nodes/BuiltinHashNodes.py +19 -17
  431. nuitka/nodes/BuiltinInputNodes.py +19 -17
  432. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  433. nuitka/nodes/BuiltinIteratorNodes.py +24 -20
  434. nuitka/nodes/BuiltinLenNodes.py +19 -17
  435. nuitka/nodes/BuiltinNextNodes.py +19 -17
  436. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  437. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  438. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  439. nuitka/nodes/BuiltinRefNodes.py +68 -19
  440. nuitka/nodes/BuiltinSumNodes.py +20 -18
  441. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  442. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  443. nuitka/nodes/BytesNodes.py +19 -17
  444. nuitka/nodes/CallNodes.py +19 -17
  445. nuitka/nodes/Checkers.py +19 -17
  446. nuitka/nodes/ChildrenHavingMixins.py +1250 -302
  447. nuitka/nodes/ClassNodes.py +49 -29
  448. nuitka/nodes/CodeObjectSpecs.py +29 -18
  449. nuitka/nodes/ComparisonNodes.py +19 -17
  450. nuitka/nodes/ConditionalNodes.py +21 -23
  451. nuitka/nodes/ConstantRefNodes.py +57 -17
  452. nuitka/nodes/ContainerMakingNodes.py +19 -17
  453. nuitka/nodes/ContainerOperationNodes.py +19 -17
  454. nuitka/nodes/CoroutineNodes.py +19 -17
  455. nuitka/nodes/CtypesNodes.py +19 -18
  456. nuitka/nodes/DictionaryNodes.py +19 -18
  457. nuitka/nodes/ExceptionNodes.py +29 -17
  458. nuitka/nodes/ExecEvalNodes.py +19 -17
  459. nuitka/nodes/ExpressionBases.py +34 -26
  460. nuitka/nodes/ExpressionBasesGenerated.py +54 -32
  461. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  462. nuitka/nodes/FrameNodes.py +19 -17
  463. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  464. nuitka/nodes/FunctionNodes.py +81 -35
  465. nuitka/nodes/FutureSpecs.py +35 -20
  466. nuitka/nodes/GeneratorNodes.py +21 -19
  467. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  468. nuitka/nodes/HardImportNodesGenerated.py +545 -129
  469. nuitka/nodes/ImportHardNodes.py +46 -38
  470. nuitka/nodes/ImportNodes.py +436 -446
  471. nuitka/nodes/IndicatorMixins.py +19 -17
  472. nuitka/nodes/InjectCNodes.py +19 -18
  473. nuitka/nodes/IterationHandles.py +55 -34
  474. nuitka/nodes/KeyValuePairNodes.py +19 -17
  475. nuitka/nodes/ListOperationNodes.py +33 -21
  476. nuitka/nodes/LocalsDictNodes.py +19 -17
  477. nuitka/nodes/LocalsScopes.py +41 -41
  478. nuitka/nodes/LoopNodes.py +28 -17
  479. nuitka/nodes/MatchNodes.py +37 -24
  480. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  481. nuitka/nodes/ModuleNodes.py +90 -31
  482. nuitka/nodes/NetworkxNodes.py +45 -0
  483. nuitka/nodes/NodeBases.py +45 -43
  484. nuitka/nodes/NodeMakingHelpers.py +21 -19
  485. nuitka/nodes/NodeMetaClasses.py +45 -28
  486. nuitka/nodes/OperatorNodes.py +28 -26
  487. nuitka/nodes/OperatorNodesUnary.py +20 -17
  488. nuitka/nodes/OsSysNodes.py +66 -18
  489. nuitka/nodes/OutlineNodes.py +22 -20
  490. nuitka/nodes/PackageMetadataNodes.py +37 -27
  491. nuitka/nodes/PackageResourceNodes.py +29 -23
  492. nuitka/nodes/PrintNodes.py +19 -17
  493. nuitka/nodes/ReturnNodes.py +20 -18
  494. nuitka/nodes/SideEffectNodes.py +19 -17
  495. nuitka/nodes/SliceNodes.py +20 -18
  496. nuitka/nodes/StatementBasesGenerated.py +125 -77
  497. nuitka/nodes/StatementNodes.py +19 -17
  498. nuitka/nodes/StrNodes.py +19 -17
  499. nuitka/nodes/StringConcatenationNodes.py +20 -17
  500. nuitka/nodes/SubscriptNodes.py +26 -24
  501. nuitka/nodes/TensorflowNodes.py +38 -0
  502. nuitka/nodes/TryNodes.py +19 -17
  503. nuitka/nodes/TypeMatchNodes.py +19 -17
  504. nuitka/nodes/TypeNodes.py +40 -17
  505. nuitka/nodes/VariableAssignNodes.py +122 -64
  506. nuitka/nodes/VariableDelNodes.py +19 -17
  507. nuitka/nodes/VariableNameNodes.py +19 -17
  508. nuitka/nodes/VariableRefNodes.py +63 -26
  509. nuitka/nodes/VariableReleaseNodes.py +19 -17
  510. nuitka/nodes/YieldNodes.py +21 -19
  511. nuitka/nodes/__init__.py +5 -4
  512. nuitka/nodes/shapes/BuiltinTypeShapes.py +145 -39
  513. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  514. nuitka/nodes/shapes/ShapeMixins.py +40 -17
  515. nuitka/nodes/shapes/StandardShapes.py +27 -20
  516. nuitka/nodes/shapes/__init__.py +5 -4
  517. nuitka/optimizations/BytecodeDemotion.py +19 -17
  518. nuitka/optimizations/FunctionInlining.py +22 -23
  519. nuitka/optimizations/Graphs.py +19 -17
  520. nuitka/optimizations/Optimization.py +39 -35
  521. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  522. nuitka/optimizations/Tags.py +19 -18
  523. nuitka/optimizations/TraceCollections.py +67 -24
  524. nuitka/optimizations/ValueTraces.py +92 -25
  525. nuitka/optimizations/__init__.py +5 -4
  526. nuitka/pgo/PGO.py +33 -23
  527. nuitka/pgo/__init__.py +5 -4
  528. nuitka/plugins/PluginBase.py +610 -109
  529. nuitka/plugins/Plugins.py +241 -58
  530. nuitka/plugins/YamlPluginBase.py +121 -0
  531. nuitka/plugins/__init__.py +5 -4
  532. nuitka/plugins/standard/AntiBloatPlugin.py +357 -129
  533. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  534. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  535. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  536. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  537. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  538. nuitka/plugins/standard/DillPlugin.py +42 -134
  539. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  540. nuitka/plugins/standard/EnumPlugin.py +19 -17
  541. nuitka/plugins/standard/EventletPlugin.py +19 -17
  542. nuitka/plugins/standard/GeventPlugin.py +19 -17
  543. nuitka/plugins/standard/GiPlugin.py +44 -28
  544. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  545. nuitka/plugins/standard/ImplicitImports.py +407 -46
  546. nuitka/plugins/standard/KivyPlugin.py +30 -17
  547. nuitka/plugins/standard/MatplotlibPlugin.py +88 -42
  548. nuitka/plugins/standard/MultiprocessingPlugin.py +25 -20
  549. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  550. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  551. nuitka/plugins/standard/PbrPlugin.py +21 -19
  552. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  553. nuitka/plugins/standard/PmwPlugin.py +30 -27
  554. nuitka/plugins/standard/PySidePyQtPlugin.py +74 -80
  555. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  556. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  557. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  558. nuitka/plugins/standard/TkinterPlugin.py +103 -53
  559. nuitka/plugins/standard/TorchPlugin.py +20 -17
  560. nuitka/plugins/standard/TransformersPlugin.py +94 -30
  561. nuitka/plugins/standard/TrioPlugin.py +18 -15
  562. nuitka/plugins/standard/UpxPlugin.py +21 -19
  563. nuitka/plugins/standard/__init__.py +5 -4
  564. nuitka/plugins/standard/standard.nuitka-package.config.yml +3449 -1299
  565. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  566. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +121 -66
  567. nuitka/reports/CompilationReportReader.py +67 -0
  568. nuitka/reports/LicenseReport.rst.j2 +21 -21
  569. nuitka/reports/Reports.py +352 -76
  570. nuitka/reports/__init__.py +5 -4
  571. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  572. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  573. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  574. nuitka/specs/BuiltinParameterSpecs.py +30 -20
  575. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  576. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  577. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  578. nuitka/specs/HardImportSpecs.py +67 -22
  579. nuitka/specs/ParameterSpecs.py +56 -41
  580. nuitka/specs/__init__.py +5 -4
  581. nuitka/tools/Basics.py +20 -18
  582. nuitka/tools/__init__.py +5 -4
  583. nuitka/tools/commercial/__init__.py +7 -6
  584. nuitka/tools/data_composer/DataComposer.py +78 -62
  585. nuitka/tools/data_composer/__init__.py +5 -4
  586. nuitka/tools/data_composer/__main__.py +18 -17
  587. nuitka/tools/environments/CreateEnvironment.py +20 -17
  588. nuitka/tools/environments/Virtualenv.py +60 -32
  589. nuitka/tools/environments/__init__.py +5 -4
  590. nuitka/tools/general/__init__.py +5 -4
  591. nuitka/tools/general/dll_report/__init__.py +5 -4
  592. nuitka/tools/general/dll_report/__main__.py +19 -21
  593. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  594. nuitka/tools/general/find_module/__init__.py +5 -4
  595. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  596. nuitka/tools/onefile_compressor/__init__.py +5 -4
  597. nuitka/tools/onefile_compressor/__main__.py +18 -17
  598. nuitka/tools/podman/Podman.py +19 -17
  599. nuitka/tools/podman/__init__.py +5 -4
  600. nuitka/tools/podman/__main__.py +35 -19
  601. nuitka/tools/profiler/__init__.py +5 -4
  602. nuitka/tools/profiler/__main__.py +18 -17
  603. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  604. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  605. nuitka/tools/scanning/__init__.py +5 -4
  606. nuitka/tools/specialize/CTypeDescriptions.py +93 -71
  607. nuitka/tools/specialize/Common.py +18 -17
  608. nuitka/tools/specialize/SpecializeC.py +31 -27
  609. nuitka/tools/specialize/SpecializePython.py +108 -45
  610. nuitka/tools/specialize/__init__.py +5 -4
  611. nuitka/tools/testing/Common.py +106 -52
  612. nuitka/tools/testing/Constructs.py +19 -17
  613. nuitka/tools/testing/OutputComparison.py +54 -18
  614. nuitka/tools/testing/Pythons.py +19 -18
  615. nuitka/tools/testing/RuntimeTracing.py +20 -19
  616. nuitka/tools/testing/SearchModes.py +26 -20
  617. nuitka/tools/testing/Valgrind.py +19 -17
  618. nuitka/tools/testing/__init__.py +5 -4
  619. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  620. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  621. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  622. nuitka/tools/testing/compare_with_cpython/__main__.py +36 -29
  623. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  624. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  625. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  626. nuitka/tools/testing/measure_construct_performance/__main__.py +22 -25
  627. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  628. nuitka/tools/testing/run_nuitka_tests/__main__.py +57 -40
  629. nuitka/tools/watch/AutoStage.py +144 -0
  630. nuitka/tools/watch/GitHub.py +113 -0
  631. nuitka/tools/watch/__init__.py +5 -4
  632. nuitka/tools/watch/__main__.py +322 -91
  633. nuitka/tree/Building.py +176 -147
  634. nuitka/tree/ComplexCallHelperFunctions.py +80 -58
  635. nuitka/tree/Extractions.py +19 -17
  636. nuitka/tree/InternalModule.py +29 -20
  637. nuitka/tree/Operations.py +19 -17
  638. nuitka/tree/ReformulationAssertStatements.py +20 -17
  639. nuitka/tree/ReformulationAssignmentStatements.py +92 -91
  640. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  641. nuitka/tree/ReformulationCallExpressions.py +20 -18
  642. nuitka/tree/ReformulationClasses.py +45 -39
  643. nuitka/tree/ReformulationClasses3.py +146 -98
  644. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  645. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  646. nuitka/tree/ReformulationDictionaryCreation.py +40 -35
  647. nuitka/tree/ReformulationExecStatements.py +42 -39
  648. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  649. nuitka/tree/ReformulationFunctionStatements.py +58 -54
  650. nuitka/tree/ReformulationImportStatements.py +34 -29
  651. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  652. nuitka/tree/ReformulationMatchStatements.py +244 -92
  653. nuitka/tree/ReformulationMultidist.py +22 -18
  654. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  655. nuitka/tree/ReformulationPrintStatements.py +23 -24
  656. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  657. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  658. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  659. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  660. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  661. nuitka/tree/ReformulationWithStatements.py +39 -41
  662. nuitka/tree/ReformulationYieldExpressions.py +21 -19
  663. nuitka/tree/SourceHandling.py +76 -31
  664. nuitka/tree/SyntaxErrors.py +19 -17
  665. nuitka/tree/TreeHelpers.py +33 -20
  666. nuitka/tree/VariableClosure.py +35 -39
  667. nuitka/tree/__init__.py +5 -4
  668. nuitka/utils/AppDirs.py +41 -20
  669. nuitka/utils/CStrings.py +66 -21
  670. nuitka/utils/CommandLineOptions.py +84 -19
  671. nuitka/utils/Distributions.py +445 -54
  672. nuitka/utils/Download.py +89 -57
  673. nuitka/utils/Execution.py +73 -34
  674. nuitka/utils/FileOperations.py +318 -74
  675. nuitka/utils/Hashing.py +55 -33
  676. nuitka/utils/Images.py +26 -19
  677. nuitka/utils/Importing.py +118 -24
  678. nuitka/utils/InstalledPythons.py +80 -75
  679. nuitka/utils/InstanceCounters.py +20 -17
  680. nuitka/utils/Jinja2.py +30 -22
  681. nuitka/utils/Json.py +19 -17
  682. nuitka/utils/MacOSApp.py +26 -18
  683. nuitka/utils/MemoryUsage.py +20 -18
  684. nuitka/utils/ModuleNames.py +42 -26
  685. nuitka/utils/ReExecute.py +50 -28
  686. nuitka/utils/Rest.py +20 -17
  687. nuitka/utils/SharedLibraries.py +161 -75
  688. nuitka/utils/Shebang.py +20 -17
  689. nuitka/utils/Signing.py +63 -18
  690. nuitka/utils/SlotMetaClasses.py +57 -0
  691. nuitka/utils/StaticLibraries.py +83 -56
  692. nuitka/utils/ThreadedExecutor.py +18 -17
  693. nuitka/utils/Timing.py +22 -20
  694. nuitka/utils/Utils.py +115 -25
  695. nuitka/utils/WindowsFileUsage.py +22 -20
  696. nuitka/utils/WindowsResources.py +25 -18
  697. nuitka/utils/Yaml.py +62 -24
  698. nuitka/utils/__init__.py +5 -4
  699. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  700. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  701. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  702. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/LICENSE.txt +0 -0
  703. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.dist-info}/entry_points.txt +0 -0
  704. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.4.8.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__
@@ -49,12 +33,12 @@ static inline PyDictValues *_Nuitka_PyDict_new_values(Py_ssize_t size) {
49
33
  Py_ssize_t values_size = sizeof(PyObject *) * size;
50
34
 
51
35
  #if PYTHON_VERSION < 0x3b0
52
- return (PyDictValues *)PyMem_MALLOC(values_size);
36
+ return (PyDictValues *)NuitkaMem_Malloc(values_size);
53
37
  #else
54
38
  // With Python3.11 or higher a prefix is allocated too.
55
39
  size_t prefix_size = _Py_SIZE_ROUND_UP(size + 2, sizeof(PyObject *));
56
40
  size_t n = prefix_size + values_size;
57
- uint8_t *mem = (uint8_t *)PyMem_MALLOC(n);
41
+ uint8_t *mem = (uint8_t *)NuitkaMem_Malloc(n);
58
42
 
59
43
  assert(mem != NULL);
60
44
 
@@ -65,22 +49,26 @@ static inline PyDictValues *_Nuitka_PyDict_new_values(Py_ssize_t size) {
65
49
  #endif
66
50
  }
67
51
 
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
52
  #if PYTHON_VERSION >= 0x300
76
- static PyDictObject *_Nuitka_AllocatePyDictObject(void) {
53
+ static PyDictObject *_Nuitka_AllocatePyDictObject(PyThreadState *tstate) {
77
54
  PyDictObject *result_mp;
78
55
 
79
56
  #if NUITKA_DICT_HAS_FREELIST
80
- struct _Py_dict_state *state = _Nuitka_Py_get_dict_state();
57
+ // This is the CPython name, spell-checker: ignore numfree
58
+
59
+ #if PYTHON_VERSION < 0x3d0
60
+ PyDictObject **items = tstate->interp->dict_state.free_list;
61
+ int *numfree = &tstate->interp->dict_state.numfree;
62
+ #else
63
+ struct _Py_object_freelists *freelists = _Nuitka_object_freelists_GET(tstate);
64
+ struct _Py_dict_freelist *state = &freelists->dicts;
65
+ PyDictObject **items = state->items;
66
+ int *numfree = &state->numfree;
67
+ #endif
81
68
 
82
- if (state->numfree) {
83
- result_mp = state->free_list[--state->numfree];
69
+ if (*numfree) {
70
+ (*numfree) -= 1;
71
+ result_mp = items[*numfree];
84
72
 
85
73
  Nuitka_Py_NewReference((PyObject *)result_mp);
86
74
 
@@ -96,6 +84,38 @@ static PyDictObject *_Nuitka_AllocatePyDictObject(void) {
96
84
  }
97
85
  #endif
98
86
 
87
+ #if PYTHON_VERSION >= 0x360
88
+ static PyDictKeysObject *_Nuitka_AllocatePyDictKeysObject(PyThreadState *tstate, Py_ssize_t keys_size) {
89
+ // CPython names, spell-checker: ignore numfree,dictkeys
90
+ PyDictKeysObject *dk;
91
+
92
+ // TODO: Cannot always use cached objects. Need to also consider
93
+ // "log2_size == PyDict_LOG_MINSIZE && unicode" as a criterion,
94
+ // seems it can only be used for the smallest keys type.
95
+ #if NUITKA_DICT_HAS_FREELIST && 0
96
+ #if PYTHON_VERSION < 0x3d0
97
+ PyDictKeysObject **items = tstate->interp->dict_state.keys_free_list;
98
+ int *numfree = &tstate->interp->dict_state.keys_numfree;
99
+ #else
100
+ struct _Py_object_freelists *freelists = _Nuitka_object_freelists_GET(tstate);
101
+ struct _Py_dictkeys_freelist *state = &freelists->dictkeys;
102
+ PyDictKeysObject **items = state->items;
103
+ int *numfree = &state->numfree;
104
+ #endif
105
+
106
+ if (*numfree) {
107
+ (*numfree) -= 1;
108
+ dk = items[*numfree];
109
+ } else
110
+ #endif
111
+ {
112
+ dk = (PyDictKeysObject *)NuitkaObject_Malloc(keys_size);
113
+ }
114
+
115
+ return dk;
116
+ }
117
+ #endif
118
+
99
119
  #if PYTHON_VERSION >= 0x360 && !defined(_NUITKA_EXPERIMENTAL_DISABLE_DICT_OPT)
100
120
  static Py_ssize_t _Nuitka_Py_PyDict_KeysSize(PyDictKeysObject *keys) {
101
121
  #if PYTHON_VERSION < 0x360
@@ -114,7 +134,7 @@ static Py_ssize_t _Nuitka_Py_PyDict_KeysSize(PyDictKeysObject *keys) {
114
134
  }
115
135
  #endif
116
136
 
117
- PyObject *DICT_COPY(PyObject *dict_value) {
137
+ PyObject *DICT_COPY(PyThreadState *tstate, PyObject *dict_value) {
118
138
  #if _NUITKA_EXPERIMENTAL_DISABLE_DICT_OPT
119
139
  CHECK_OBJECT(dict_value);
120
140
  assert(PyDict_CheckExact(dict_value));
@@ -127,7 +147,7 @@ PyObject *DICT_COPY(PyObject *dict_value) {
127
147
  assert(PyDict_CheckExact(dict_value));
128
148
 
129
149
  if (((PyDictObject *)dict_value)->ma_used == 0) {
130
- result = MAKE_DICT_EMPTY();
150
+ result = MAKE_DICT_EMPTY(tstate);
131
151
  } else {
132
152
  PyDictObject *dict_mp = (PyDictObject *)dict_value;
133
153
 
@@ -144,7 +164,7 @@ PyObject *DICT_COPY(PyObject *dict_value) {
144
164
 
145
165
  PyObject *value = entry->me_value;
146
166
 
147
- int res = PyDict_SetItem(result, key, value);
167
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
148
168
  assert(res == 0);
149
169
  }
150
170
  }
@@ -152,19 +172,19 @@ PyObject *DICT_COPY(PyObject *dict_value) {
152
172
  /* Python 3 */
153
173
  #ifndef PY_NOGIL
154
174
  if (_PyDict_HasSplitTable(dict_mp)) {
155
- Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
156
-
157
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
175
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
158
176
  assert(result_mp != NULL);
159
177
  result = (PyObject *)result_mp;
160
178
 
179
+ Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
180
+
161
181
  PyDictValues *new_values = _Nuitka_PyDict_new_values(size);
162
182
  assert(new_values != NULL);
163
183
 
164
184
  #if PYTHON_VERSION >= 0x3b0
165
185
  // Need to preserve values prefix.
166
186
  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);
187
+ memcpy((char *)new_values - prefix_size, (char *)dict_mp->ma_values - prefix_size, prefix_size - 1);
168
188
  #endif
169
189
 
170
190
  result_mp->ma_values = new_values;
@@ -200,14 +220,14 @@ PyObject *DICT_COPY(PyObject *dict_value) {
200
220
  assert(dict_mp->ma_values == NULL);
201
221
  assert(dict_mp->ma_keys->dk_refcnt == 1);
202
222
 
203
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
223
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
204
224
  result = (PyObject *)result_mp;
205
225
 
206
226
  result_mp->ma_values = NULL;
207
227
  result_mp->ma_used = dict_mp->ma_used;
208
228
 
209
229
  Py_ssize_t keys_size = _Nuitka_Py_PyDict_KeysSize(dict_mp->ma_keys);
210
- result_mp->ma_keys = (PyDictKeysObject *)PyObject_MALLOC(keys_size);
230
+ result_mp->ma_keys = _Nuitka_AllocatePyDictKeysObject(tstate, keys_size);
211
231
  assert(result_mp->ma_keys);
212
232
 
213
233
  memcpy(result_mp->ma_keys, dict_mp->ma_keys, keys_size);
@@ -277,20 +297,37 @@ PyObject *DICT_COPY(PyObject *dict_value) {
277
297
  {
278
298
  result = _PyDict_NewPresized(dict_mp->ma_used);
279
299
 
300
+ #if PYTHON_VERSION < 0x3b0
280
301
  Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
281
302
 
282
303
  for (Py_ssize_t i = 0; i < size; i++) {
283
304
  PyDictKeyEntry *entry = &DK_ENTRIES(dict_mp->ma_keys)[i];
305
+ PyObject *value = entry->me_value;
284
306
 
285
- if (entry->me_value != NULL) {
307
+ if (value != NULL) {
286
308
  PyObject *key = entry->me_key;
309
+ CHECK_OBJECT(key);
287
310
 
288
- PyObject *value = entry->me_value;
311
+ CHECK_OBJECT(value);
289
312
 
290
- int res = PyDict_SetItem(result, key, value);
313
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
291
314
  assert(res == 0);
292
315
  }
293
316
  }
317
+ #else
318
+ Py_ssize_t pos = 0;
319
+ PyObject *key, *value;
320
+
321
+ while (Nuitka_DictNext((PyObject *)dict_mp, &pos, &key, &value)) {
322
+ CHECK_OBJECT(key);
323
+ CHECK_OBJECT(value);
324
+
325
+ CHECK_OBJECT(value);
326
+
327
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
328
+ assert(res == 0);
329
+ }
330
+ #endif
294
331
  }
295
332
  #endif
296
333
  }
@@ -306,7 +343,7 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
306
343
  CHECK_OBJECT(dict_value);
307
344
  assert(PyDict_CheckExact(dict_value));
308
345
 
309
- result = DICT_COPY(dict_value);
346
+ result = DICT_COPY(tstate, dict_value);
310
347
 
311
348
  Py_ssize_t pos = 0;
312
349
  PyObject *key, *value;
@@ -323,7 +360,7 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
323
360
  assert(PyDict_CheckExact(dict_value));
324
361
 
325
362
  if (((PyDictObject *)dict_value)->ma_used == 0) {
326
- result = MAKE_DICT_EMPTY();
363
+ result = MAKE_DICT_EMPTY(tstate);
327
364
  } else {
328
365
  PyDictObject *dict_mp = (PyDictObject *)dict_value;
329
366
 
@@ -341,7 +378,7 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
341
378
  PyObject *value = entry->me_value;
342
379
  value = DEEP_COPY(tstate, value);
343
380
 
344
- int res = PyDict_SetItem(result, key, value);
381
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
345
382
  assert(res == 0);
346
383
 
347
384
  Py_DECREF(value);
@@ -351,19 +388,19 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
351
388
  /* Python 3 */
352
389
  #ifndef PY_NOGIL
353
390
  if (_PyDict_HasSplitTable(dict_mp)) {
354
- Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
355
-
356
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
391
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
357
392
  assert(result_mp != NULL);
358
393
  result = (PyObject *)result_mp;
359
394
 
395
+ Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
396
+
360
397
  PyDictValues *new_values = _Nuitka_PyDict_new_values(size);
361
398
  assert(new_values != NULL);
362
399
 
363
400
  #if PYTHON_VERSION >= 0x3b0
364
401
  // Need to preserve values prefix.
365
402
  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);
403
+ memcpy((char *)new_values - prefix_size, (char *)dict_mp->ma_values - prefix_size, prefix_size - 1);
367
404
  #endif
368
405
 
369
406
  result_mp->ma_values = new_values;
@@ -399,14 +436,14 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
399
436
  assert(dict_mp->ma_values == NULL);
400
437
  assert(dict_mp->ma_keys->dk_refcnt == 1);
401
438
 
402
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
439
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
403
440
  result = (PyObject *)result_mp;
404
441
 
405
442
  result_mp->ma_values = NULL;
406
443
  result_mp->ma_used = dict_mp->ma_used;
407
444
 
408
445
  Py_ssize_t keys_size = _Nuitka_Py_PyDict_KeysSize(dict_mp->ma_keys);
409
- result_mp->ma_keys = (PyDictKeysObject *)PyObject_MALLOC(keys_size);
446
+ result_mp->ma_keys = _Nuitka_AllocatePyDictKeysObject(tstate, keys_size);
410
447
  assert(result_mp->ma_keys);
411
448
 
412
449
  memcpy(result_mp->ma_keys, dict_mp->ma_keys, keys_size);
@@ -478,23 +515,45 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
478
515
  {
479
516
  result = _PyDict_NewPresized(dict_mp->ma_used);
480
517
 
518
+ #if PYTHON_VERSION < 0x3b0
481
519
  Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
482
520
 
483
521
  for (Py_ssize_t i = 0; i < size; i++) {
484
522
  PyDictKeyEntry *entry = &DK_ENTRIES(dict_mp->ma_keys)[i];
523
+ PyObject *value = entry->me_value;
485
524
 
486
- if (entry->me_value != NULL) {
525
+ if (value != NULL) {
487
526
  PyObject *key = entry->me_key;
527
+ CHECK_OBJECT(key);
528
+
529
+ CHECK_OBJECT(value);
488
530
 
489
- PyObject *value = entry->me_value;
490
531
  value = DEEP_COPY(tstate, value);
491
532
 
492
- int res = PyDict_SetItem(result, key, value);
533
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
493
534
  assert(res == 0);
494
535
 
495
536
  Py_DECREF(value);
496
537
  }
497
538
  }
539
+ #else
540
+ Py_ssize_t pos = 0;
541
+ PyObject *key, *value;
542
+
543
+ while (Nuitka_DictNext((PyObject *)dict_mp, &pos, &key, &value)) {
544
+ CHECK_OBJECT(key);
545
+ CHECK_OBJECT(value);
546
+
547
+ CHECK_OBJECT(value);
548
+
549
+ value = DEEP_COPY(tstate, value);
550
+
551
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
552
+ assert(res == 0);
553
+
554
+ Py_DECREF(value);
555
+ }
556
+ #endif
498
557
  }
499
558
  #endif
500
559
  }
@@ -505,7 +564,7 @@ PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value) {
505
564
  }
506
565
 
507
566
  // Helper for function calls with star dict arguments. */
508
- static PyObject *COPY_DICT_KW(PyObject *dict_value) {
567
+ static PyObject *COPY_DICT_KW(PyThreadState *tstate, PyObject *dict_value) {
509
568
  PyObject *result;
510
569
  bool had_kw_error = false;
511
570
 
@@ -513,7 +572,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
513
572
  CHECK_OBJECT(dict_value);
514
573
  assert(PyDict_CheckExact(dict_value));
515
574
 
516
- result = DICT_COPY(dict_value);
575
+ result = DICT_COPY(tstate, dict_value);
517
576
 
518
577
  Py_ssize_t pos = 0;
519
578
  PyObject *key, *value;
@@ -528,7 +587,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
528
587
  assert(PyDict_CheckExact(dict_value));
529
588
 
530
589
  if (((PyDictObject *)dict_value)->ma_used == 0) {
531
- result = MAKE_DICT_EMPTY();
590
+ result = MAKE_DICT_EMPTY(tstate);
532
591
  } else {
533
592
  PyDictObject *dict_mp = (PyDictObject *)dict_value;
534
593
 
@@ -548,7 +607,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
548
607
 
549
608
  PyObject *value = entry->me_value;
550
609
 
551
- int res = PyDict_SetItem(result, key, value);
610
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
552
611
  assert(res == 0);
553
612
  }
554
613
  }
@@ -556,12 +615,13 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
556
615
  /* Python 3 */
557
616
  #ifndef PY_NOGIL
558
617
  if (_PyDict_HasSplitTable(dict_mp)) {
559
- Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
560
-
561
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
618
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
562
619
  assert(result_mp != NULL);
563
620
  result = (PyObject *)result_mp;
564
621
 
622
+ Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
623
+
624
+ #if PYTHON_VERSION < 0x3b0
565
625
  for (Py_ssize_t i = 0; i < size; i++) {
566
626
  PyDictKeyEntry *entry = &DK_ENTRIES(dict_mp->ma_keys)[i];
567
627
 
@@ -571,6 +631,18 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
571
631
  had_kw_error = true;
572
632
  }
573
633
  }
634
+ #else
635
+ Py_ssize_t pos = 0;
636
+ PyObject *key, *_value;
637
+
638
+ while (Nuitka_DictNext((PyObject *)dict_mp, &pos, &key, &_value)) {
639
+ CHECK_OBJECT(key);
640
+ CHECK_OBJECT(_value);
641
+
642
+ if (unlikely(!checkKeywordType(key))) {
643
+ had_kw_error = true;
644
+ }
645
+ #endif
574
646
  }
575
647
 
576
648
  PyDictValues *new_values = _Nuitka_PyDict_new_values(size);
@@ -579,7 +651,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
579
651
  #if PYTHON_VERSION >= 0x3b0
580
652
  // Need to preserve values prefix.
581
653
  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);
654
+ memcpy((char *)new_values - prefix_size, (char *)dict_mp->ma_values - prefix_size, prefix_size - 1);
583
655
  #endif
584
656
 
585
657
  result_mp->ma_values = new_values;
@@ -615,14 +687,14 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
615
687
  assert(dict_mp->ma_values == NULL);
616
688
  assert(dict_mp->ma_keys->dk_refcnt == 1);
617
689
 
618
- PyDictObject *result_mp = _Nuitka_AllocatePyDictObject();
690
+ PyDictObject *result_mp = _Nuitka_AllocatePyDictObject(tstate);
619
691
  result = (PyObject *)result_mp;
620
692
 
621
693
  result_mp->ma_values = NULL;
622
694
  result_mp->ma_used = dict_mp->ma_used;
623
695
 
624
696
  Py_ssize_t keys_size = _Nuitka_Py_PyDict_KeysSize(dict_mp->ma_keys);
625
- result_mp->ma_keys = (PyDictKeysObject *)PyObject_MALLOC(keys_size);
697
+ result_mp->ma_keys = _Nuitka_AllocatePyDictKeysObject(tstate, keys_size);
626
698
  assert(result_mp->ma_keys);
627
699
 
628
700
  memcpy(result_mp->ma_keys, dict_mp->ma_keys, keys_size);
@@ -675,7 +747,7 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
675
747
 
676
748
  Py_INCREF(value);
677
749
  PyObject *key = *key_ptr;
678
- if (is_unicode) {
750
+ if (is_unicode == false) {
679
751
  if (unlikely(!checkKeywordType(key))) {
680
752
  had_kw_error = true;
681
753
  }
@@ -699,23 +771,45 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
699
771
  {
700
772
  result = _PyDict_NewPresized(dict_mp->ma_used);
701
773
 
774
+ #if PYTHON_VERSION < 0x3b0
702
775
  Py_ssize_t size = DK_ENTRIES_SIZE(dict_mp->ma_keys);
703
776
 
704
777
  for (Py_ssize_t i = 0; i < size; i++) {
705
778
  PyDictKeyEntry *entry = &DK_ENTRIES(dict_mp->ma_keys)[i];
779
+ PyObject *value = entry->me_value;
706
780
 
707
- if (entry->me_value != NULL) {
781
+ if (value != NULL) {
708
782
  PyObject *key = entry->me_key;
783
+ CHECK_OBJECT(key);
784
+
709
785
  if (unlikely(!checkKeywordType(key))) {
710
786
  had_kw_error = true;
711
787
  }
712
788
 
713
- PyObject *value = entry->me_value;
789
+ CHECK_OBJECT(value);
714
790
 
715
- int res = PyDict_SetItem(result, key, value);
791
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
716
792
  assert(res == 0);
717
793
  }
718
794
  }
795
+ #else
796
+ Py_ssize_t pos = 0;
797
+ PyObject *key, *value;
798
+
799
+ while (Nuitka_DictNext((PyObject *)dict_mp, &pos, &key, &value)) {
800
+ CHECK_OBJECT(key);
801
+ CHECK_OBJECT(value);
802
+
803
+ if (unlikely(!checkKeywordType(key))) {
804
+ had_kw_error = true;
805
+ }
806
+
807
+ CHECK_OBJECT(value);
808
+
809
+ NUITKA_MAY_BE_UNUSED int res = PyDict_SetItem(result, key, value);
810
+ assert(res == 0);
811
+ }
812
+ #endif
719
813
  }
720
814
  #endif
721
815
  }
@@ -729,3 +823,18 @@ static PyObject *COPY_DICT_KW(PyObject *dict_value) {
729
823
 
730
824
  return result;
731
825
  }
826
+
827
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
828
+ // integrates with CPython, but also works on its own.
829
+ //
830
+ // Licensed under the Apache License, Version 2.0 (the "License");
831
+ // you may not use this file except in compliance with the License.
832
+ // You may obtain a copy of the License at
833
+ //
834
+ // http://www.apache.org/licenses/LICENSE-2.0
835
+ //
836
+ // Unless required by applicable law or agreed to in writing, software
837
+ // distributed under the License is distributed on an "AS IS" BASIS,
838
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
839
+ // See the License for the specific language governing permissions and
840
+ // 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.