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

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

Potentially problematic release.


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

Files changed (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +93 -54
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,5 @@
1
- // Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- //
3
- // Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- // integrates with CPython, but also works on its own.
5
- //
6
- // Licensed under the Apache License, Version 2.0 (the "License");
7
- // you may not use this file except in compliance with the License.
8
- // You may obtain a copy of the License at
9
- //
10
- // http://www.apache.org/licenses/LICENSE-2.0
11
- //
12
- // Unless required by applicable law or agreed to in writing, software
13
- // distributed under the License is distributed on an "AS IS" BASIS,
14
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- // See the License for the specific language governing permissions and
16
- // limitations under the License.
17
- //
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
18
3
  /** Compiled Asyncgen.
19
4
  *
20
5
  * Unlike in CPython, we have one type for just asyncgen, this doesn't do
@@ -78,15 +63,16 @@ static void Nuitka_MarkAsyncgenAsNotRunning(struct Nuitka_AsyncgenObject *asyncg
78
63
 
79
64
  static long Nuitka_Asyncgen_tp_hash(struct Nuitka_AsyncgenObject *asyncgen) { return asyncgen->m_counter; }
80
65
 
81
- static PyObject *Nuitka_Asyncgen_get_name(struct Nuitka_AsyncgenObject *asyncgen) {
82
- CHECK_OBJECT(asyncgen);
66
+ static PyObject *Nuitka_Asyncgen_get_name(PyObject *self, void *data) {
67
+ CHECK_OBJECT(self);
83
68
 
69
+ struct Nuitka_AsyncgenObject *asyncgen = (struct Nuitka_AsyncgenObject *)self;
84
70
  Py_INCREF(asyncgen->m_name);
85
71
  return asyncgen->m_name;
86
72
  }
87
73
 
88
- static int Nuitka_Asyncgen_set_name(struct Nuitka_AsyncgenObject *asyncgen, PyObject *value) {
89
- CHECK_OBJECT(asyncgen);
74
+ static int Nuitka_Asyncgen_set_name(PyObject *self, PyObject *value, void *data) {
75
+ CHECK_OBJECT(self);
90
76
  CHECK_OBJECT_X(value);
91
77
 
92
78
  // Cannot be deleted, not be non-unicode value.
@@ -97,6 +83,7 @@ static int Nuitka_Asyncgen_set_name(struct Nuitka_AsyncgenObject *asyncgen, PyOb
97
83
  return -1;
98
84
  }
99
85
 
86
+ struct Nuitka_AsyncgenObject *asyncgen = (struct Nuitka_AsyncgenObject *)self;
100
87
  PyObject *tmp = asyncgen->m_name;
101
88
  Py_INCREF(value);
102
89
  asyncgen->m_name = value;
@@ -105,15 +92,16 @@ static int Nuitka_Asyncgen_set_name(struct Nuitka_AsyncgenObject *asyncgen, PyOb
105
92
  return 0;
106
93
  }
107
94
 
108
- static PyObject *Nuitka_Asyncgen_get_qualname(struct Nuitka_AsyncgenObject *asyncgen) {
109
- CHECK_OBJECT(asyncgen);
95
+ static PyObject *Nuitka_Asyncgen_get_qualname(PyObject *self, void *data) {
96
+ CHECK_OBJECT(self);
110
97
 
98
+ struct Nuitka_AsyncgenObject *asyncgen = (struct Nuitka_AsyncgenObject *)self;
111
99
  Py_INCREF(asyncgen->m_qualname);
112
100
  return asyncgen->m_qualname;
113
101
  }
114
102
 
115
- static int Nuitka_Asyncgen_set_qualname(struct Nuitka_AsyncgenObject *asyncgen, PyObject *value) {
116
- CHECK_OBJECT(asyncgen);
103
+ static int Nuitka_Asyncgen_set_qualname(PyObject *self, PyObject *value, void *data) {
104
+ CHECK_OBJECT(self);
117
105
  CHECK_OBJECT_X(value);
118
106
 
119
107
  // Cannot be deleted, not be non-unicode value.
@@ -124,6 +112,7 @@ static int Nuitka_Asyncgen_set_qualname(struct Nuitka_AsyncgenObject *asyncgen,
124
112
  return -1;
125
113
  }
126
114
 
115
+ struct Nuitka_AsyncgenObject *asyncgen = (struct Nuitka_AsyncgenObject *)self;
127
116
  PyObject *tmp = asyncgen->m_qualname;
128
117
  Py_INCREF(value);
129
118
  asyncgen->m_qualname = value;
@@ -132,19 +121,21 @@ static int Nuitka_Asyncgen_set_qualname(struct Nuitka_AsyncgenObject *asyncgen,
132
121
  return 0;
133
122
  }
134
123
 
135
- static PyObject *Nuitka_Asyncgen_get_ag_await(struct Nuitka_AsyncgenObject *asyncgen) {
136
- CHECK_OBJECT(asyncgen);
124
+ static PyObject *Nuitka_Asyncgen_get_ag_await(PyObject *self, void *data) {
125
+ CHECK_OBJECT(self);
137
126
 
138
- if (asyncgen->m_yieldfrom) {
139
- Py_INCREF(asyncgen->m_yieldfrom);
140
- return asyncgen->m_yieldfrom;
127
+ struct Nuitka_AsyncgenObject *asyncgen = (struct Nuitka_AsyncgenObject *)self;
128
+ if (asyncgen->m_yield_from) {
129
+ Py_INCREF(asyncgen->m_yield_from);
130
+ return asyncgen->m_yield_from;
141
131
  } else {
142
- Py_INCREF(Py_None);
132
+ Py_INCREF_IMMORTAL(Py_None);
143
133
  return Py_None;
144
134
  }
145
135
  }
146
136
 
147
- static PyObject *Nuitka_Asyncgen_get_code(struct Nuitka_AsyncgenObject *asyncgen) {
137
+ static PyObject *Nuitka_Asyncgen_get_code(PyObject *self, void *data) {
138
+ struct Nuitka_AsyncgenObject *asyncgen = (struct Nuitka_AsyncgenObject *)self;
148
139
  CHECK_OBJECT(asyncgen);
149
140
  CHECK_OBJECT(asyncgen->m_code_object);
150
141
 
@@ -152,8 +143,8 @@ static PyObject *Nuitka_Asyncgen_get_code(struct Nuitka_AsyncgenObject *asyncgen
152
143
  return (PyObject *)asyncgen->m_code_object;
153
144
  }
154
145
 
155
- static int Nuitka_Asyncgen_set_code(struct Nuitka_AsyncgenObject *asyncgen, PyObject *value) {
156
- CHECK_OBJECT(asyncgen);
146
+ static int Nuitka_Asyncgen_set_code(PyObject *self, PyObject *value, void *data) {
147
+ CHECK_OBJECT(self);
157
148
 
158
149
  PyThreadState *tstate = PyThreadState_GET();
159
150
 
@@ -161,7 +152,8 @@ static int Nuitka_Asyncgen_set_code(struct Nuitka_AsyncgenObject *asyncgen, PyOb
161
152
  return -1;
162
153
  }
163
154
 
164
- static PyObject *Nuitka_Asyncgen_get_frame(struct Nuitka_AsyncgenObject *asyncgen) {
155
+ static PyObject *Nuitka_Asyncgen_get_frame(PyObject *self, void *data) {
156
+ struct Nuitka_AsyncgenObject *asyncgen = (struct Nuitka_AsyncgenObject *)self;
165
157
  CHECK_OBJECT(asyncgen);
166
158
  CHECK_OBJECT_X(asyncgen->m_frame);
167
159
 
@@ -169,13 +161,13 @@ static PyObject *Nuitka_Asyncgen_get_frame(struct Nuitka_AsyncgenObject *asyncge
169
161
  Py_INCREF(asyncgen->m_frame);
170
162
  return (PyObject *)asyncgen->m_frame;
171
163
  } else {
172
- Py_INCREF(Py_None);
164
+ Py_INCREF_IMMORTAL(Py_None);
173
165
  return Py_None;
174
166
  }
175
167
  }
176
168
 
177
- static int Nuitka_Asyncgen_set_frame(struct Nuitka_AsyncgenObject *asyncgen, PyObject *value) {
178
- CHECK_OBJECT(asyncgen);
169
+ static int Nuitka_Asyncgen_set_frame(PyObject *self, PyObject *value, void *data) {
170
+ CHECK_OBJECT(self);
179
171
  CHECK_OBJECT_X(value);
180
172
 
181
173
  PyThreadState *tstate = PyThreadState_GET();
@@ -200,23 +192,23 @@ static PyObject *Nuitka_YieldFromAsyncgenCore(PyThreadState *tstate, struct Nuit
200
192
  CHECK_OBJECT(asyncgen);
201
193
  CHECK_OBJECT_X(send_value);
202
194
 
203
- PyObject *yieldfrom = asyncgen->m_yieldfrom;
204
- CHECK_OBJECT(yieldfrom);
195
+ PyObject *yield_from = asyncgen->m_yield_from;
196
+ CHECK_OBJECT(yield_from);
205
197
 
206
198
  // Need to make it unaccessible while using it.
207
- asyncgen->m_yieldfrom = NULL;
199
+ asyncgen->m_yield_from = NULL;
208
200
 
209
201
  PyObject *returned_value;
210
- PyObject *yielded = _Nuitka_YieldFromCore(tstate, yieldfrom, send_value, &returned_value, mode);
202
+ PyObject *yielded = _Nuitka_YieldFromCore(tstate, yield_from, send_value, &returned_value, mode);
211
203
 
212
204
  if (yielded == NULL) {
213
- assert(asyncgen->m_yieldfrom == NULL);
214
- Py_DECREF(yieldfrom);
205
+ assert(asyncgen->m_yield_from == NULL);
206
+ Py_DECREF(yield_from);
215
207
 
216
208
  yielded = ((asyncgen_code)asyncgen->m_code)(tstate, asyncgen, returned_value);
217
209
  } else {
218
- assert(asyncgen->m_yieldfrom == NULL);
219
- asyncgen->m_yieldfrom = yieldfrom;
210
+ assert(asyncgen->m_yield_from == NULL);
211
+ asyncgen->m_yield_from = yield_from;
220
212
  }
221
213
 
222
214
  return yielded;
@@ -295,28 +287,24 @@ static PyObject *Nuitka_YieldFromAsyncgenInitial(PyThreadState *tstate, struct N
295
287
  static PyObject *Nuitka_AsyncgenValueWrapper_New(PyObject *value);
296
288
 
297
289
  static PySendResult _Nuitka_Asyncgen_sendR(PyThreadState *tstate, struct Nuitka_AsyncgenObject *asyncgen,
298
- PyObject *value, bool closing, PyObject *exception_type,
299
- PyObject *exception_value, PyTracebackObject *exception_tb,
290
+ PyObject *value, bool closing,
291
+ struct Nuitka_ExceptionPreservationItem *exception_state,
300
292
  PyObject **result) {
301
293
  CHECK_OBJECT(asyncgen);
302
294
  assert(Nuitka_Asyncgen_Check((PyObject *)asyncgen));
303
295
  CHECK_OBJECT_X(value);
304
- CHECK_OBJECT_X(exception_type);
305
- CHECK_OBJECT_X(exception_value);
306
- CHECK_OBJECT_X(exception_tb);
296
+ CHECK_EXCEPTION_STATE_X(exception_state);
307
297
 
308
298
  #if _DEBUG_ASYNCGEN
309
299
  PRINT_ASYNCGEN_STATUS("Enter", asyncgen);
310
300
  PRINT_COROUTINE_VALUE("value", value);
311
- PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
301
+ PRINT_EXCEPTION_STATE(exception_state);
312
302
  PRINT_CURRENT_EXCEPTION();
313
303
  PRINT_NEW_LINE();
314
304
  #endif
315
305
 
316
306
  if (value != NULL) {
317
- assert(exception_type == NULL);
318
- assert(exception_value == NULL);
319
- assert(exception_tb == NULL);
307
+ ASSERT_EMPTY_EXCEPTION_STATE(exception_state);
320
308
  }
321
309
 
322
310
  if (asyncgen->m_status == status_Unused && value != NULL && value != Py_None) {
@@ -357,11 +345,11 @@ static PySendResult _Nuitka_Asyncgen_sendR(PyThreadState *tstate, struct Nuitka_
357
345
  asyncgen->m_running = true;
358
346
 
359
347
  // Check for thrown exception, and publish it.
360
- if (unlikely(exception_type != NULL)) {
348
+ if (unlikely(HAS_EXCEPTION_STATE(exception_state))) {
361
349
  assert(value == NULL);
362
350
 
363
351
  // Transfer exception ownership to published.
364
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
352
+ RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
365
353
  }
366
354
 
367
355
  if (asyncgen->m_frame) {
@@ -378,7 +366,7 @@ static PySendResult _Nuitka_Asyncgen_sendR(PyThreadState *tstate, struct Nuitka_
378
366
 
379
367
  PyObject *yielded;
380
368
 
381
- if (asyncgen->m_yieldfrom == NULL) {
369
+ if (asyncgen->m_yield_from == NULL) {
382
370
  yielded = ((asyncgen_code)asyncgen->m_code)(tstate, asyncgen, value);
383
371
  } else {
384
372
  // This does not release the value if any, so we need to do it afterwards.
@@ -386,16 +374,14 @@ static PySendResult _Nuitka_Asyncgen_sendR(PyThreadState *tstate, struct Nuitka_
386
374
  Py_XDECREF(value);
387
375
  }
388
376
 
389
- // If the asyncgen returns with m_yieldfrom set, it wants us to yield
377
+ // If the asyncgen returns with m_yield_from set, it wants us to yield
390
378
  // from that value from now on.
391
- while (yielded == NULL && asyncgen->m_yieldfrom != NULL) {
379
+ while (yielded == NULL && asyncgen->m_yield_from != NULL) {
392
380
  yielded = Nuitka_YieldFromAsyncgenNext(tstate, asyncgen);
393
381
  }
394
382
 
395
383
  Nuitka_MarkAsyncgenAsNotRunning(asyncgen);
396
384
 
397
- tstate = PyThreadState_GET();
398
-
399
385
  // Remove the back frame from asyncgen if it's there.
400
386
  if (asyncgen->m_frame) {
401
387
  // assert(tstate->frame == &asyncgen->m_frame->m_frame);
@@ -441,42 +427,21 @@ static PySendResult _Nuitka_Asyncgen_sendR(PyThreadState *tstate, struct Nuitka_
441
427
  PyObject *error_occurred = GET_ERROR_OCCURRED(tstate);
442
428
 
443
429
  if (error_occurred == PyExc_StopIteration || error_occurred == PyExc_StopAsyncIteration) {
444
- PyObject *saved_exception_type, *saved_exception_value;
445
- PyTracebackObject *saved_exception_tb;
446
-
447
- // TODO: For Python3.12, this kind of code ought to use tstate methods entirely.
448
- FETCH_ERROR_OCCURRED(tstate, &saved_exception_type, &saved_exception_value, &saved_exception_tb);
449
- NORMALIZE_EXCEPTION(tstate, &saved_exception_type, &saved_exception_value, &saved_exception_tb);
450
-
430
+ char const *message;
451
431
  if (error_occurred == PyExc_StopIteration) {
452
- SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, "async generator raised StopIteration");
432
+ message = "async generator raised StopIteration";
453
433
  } else {
454
- SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError,
455
- "async generator raised StopAsyncIteration");
434
+ message = "async generator raised StopAsyncIteration";
456
435
  }
457
436
 
458
- FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
459
-
460
- RAISE_EXCEPTION_WITH_CAUSE(tstate, &exception_type, &exception_value, &exception_tb,
461
- saved_exception_value);
462
-
463
- CHECK_OBJECT(exception_value);
464
- CHECK_OBJECT(saved_exception_value);
465
-
466
- Py_INCREF(saved_exception_value);
467
- PyException_SetContext(exception_value, saved_exception_value);
468
-
469
- Py_DECREF(saved_exception_type);
470
- Py_XDECREF(saved_exception_tb);
471
-
472
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
437
+ RAISE_RUNTIME_ERROR_RAISED_STOP_ITERATION(tstate, message);
473
438
  return PYGEN_ERROR;
474
439
  }
475
440
 
476
441
  return PYGEN_ERROR;
477
442
  } else {
478
443
  // For normal yield, wrap the result value before returning.
479
- if (asyncgen->m_yieldfrom == NULL) {
444
+ if (asyncgen->m_yield_from == NULL) {
480
445
  // Transferred ownership to constructor of Nuitka_AsyncgenValueWrapper
481
446
  PyObject *wrapped = Nuitka_AsyncgenValueWrapper_New(yielded);
482
447
  yielded = wrapped;
@@ -491,25 +456,21 @@ static PySendResult _Nuitka_Asyncgen_sendR(PyThreadState *tstate, struct Nuitka_
491
456
  Py_XDECREF(value);
492
457
 
493
458
  // Release exception if any, we are finished with it and will raise another.
494
- Py_XDECREF(exception_type);
495
- Py_XDECREF(exception_value);
496
- Py_XDECREF(exception_tb);
459
+ RELEASE_ERROR_OCCURRED_STATE_X(exception_state);
497
460
 
498
461
  return PYGEN_RETURN;
499
462
  }
500
463
  }
501
464
 
502
465
  static PyObject *_Nuitka_Asyncgen_send(PyThreadState *tstate, struct Nuitka_AsyncgenObject *asyncgen, PyObject *value,
503
- bool closing, PyObject *exception_type, PyObject *exception_value,
504
- PyTracebackObject *exception_tb) {
466
+ bool closing, struct Nuitka_ExceptionPreservationItem *exception_state) {
505
467
 
506
468
  PyObject *result;
507
- PySendResult res = _Nuitka_Asyncgen_sendR(tstate, asyncgen, value, closing, exception_type, exception_value,
508
- exception_tb, &result);
469
+ PySendResult res = _Nuitka_Asyncgen_sendR(tstate, asyncgen, value, closing, exception_state, &result);
509
470
 
510
471
  switch (res) {
511
472
  case PYGEN_RETURN:
512
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopAsyncIteration);
473
+ SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
513
474
  return NULL;
514
475
  case PYGEN_NEXT:
515
476
  return result;
@@ -528,9 +489,10 @@ static bool _Nuitka_Asyncgen_close(PyThreadState *tstate, struct Nuitka_Asyncgen
528
489
  CHECK_OBJECT(asyncgen);
529
490
 
530
491
  if (asyncgen->m_status == status_Running) {
531
- Py_INCREF(PyExc_GeneratorExit);
492
+ struct Nuitka_ExceptionPreservationItem exception_state;
493
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, &exception_state, PyExc_GeneratorExit, NULL, NULL);
532
494
 
533
- PyObject *result = _Nuitka_Asyncgen_send(tstate, asyncgen, NULL, true, PyExc_GeneratorExit, NULL, NULL);
495
+ PyObject *result = _Nuitka_Asyncgen_send(tstate, asyncgen, NULL, true, &exception_state);
534
496
 
535
497
  if (unlikely(result)) {
536
498
  Py_DECREF(result);
@@ -545,8 +507,8 @@ static bool _Nuitka_Asyncgen_close(PyThreadState *tstate, struct Nuitka_Asyncgen
545
507
  return true;
546
508
  }
547
509
 
548
- static bool _Nuitka_Generator_check_throw2(PyThreadState *tstate, PyObject **exception_type, PyObject **exception_value,
549
- PyTracebackObject **exception_tb);
510
+ static bool _Nuitka_Generator_check_throw(PyThreadState *tstate,
511
+ struct Nuitka_ExceptionPreservationItem *exception_state);
550
512
 
551
513
  // This function is called when yielding to a asyncgen through "_Nuitka_YieldFromPassExceptionTo"
552
514
  // and potentially wrapper objects used by generators, or by the throw method itself.
@@ -555,41 +517,35 @@ static bool _Nuitka_Generator_check_throw2(PyThreadState *tstate, PyObject **exc
555
517
  // value of exception_type will not be NULL, but the actual exception will not necessarily
556
518
  // be normalized.
557
519
  static PyObject *_Nuitka_Asyncgen_throw2(PyThreadState *tstate, struct Nuitka_AsyncgenObject *asyncgen,
558
- bool close_on_genexit, PyObject *exception_type, PyObject *exception_value,
559
- PyTracebackObject *exception_tb) {
520
+ bool close_on_genexit,
521
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
560
522
  CHECK_OBJECT(asyncgen);
561
523
  assert(Nuitka_Asyncgen_Check((PyObject *)asyncgen));
562
- CHECK_OBJECT(exception_type);
563
- CHECK_OBJECT_X(exception_value);
564
- CHECK_OBJECT_X(exception_tb);
524
+ CHECK_EXCEPTION_STATE(exception_state);
565
525
 
566
526
  #if _DEBUG_ASYNCGEN
567
527
  PRINT_ASYNCGEN_STATUS("Enter", asyncgen);
568
- PRINT_COROUTINE_VALUE("yieldfrom", asyncgen->m_yieldfrom);
569
- PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
528
+ PRINT_COROUTINE_VALUE("yield_from", asyncgen->m_yield_from);
529
+ PRINT_EXCEPTION_STATE(exception_state);
570
530
  PRINT_NEW_LINE();
571
531
  #endif
572
532
 
573
- if (asyncgen->m_yieldfrom != NULL) {
533
+ if (asyncgen->m_yield_from != NULL) {
574
534
  // TODO: This check is not done for coroutines, correct?
575
535
  if (close_on_genexit) {
576
- if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_type, PyExc_GeneratorExit)) {
536
+ if (EXCEPTION_STATE_MATCH_BOOL_SINGLE(tstate, exception_state, PyExc_GeneratorExit)) {
577
537
  // Asynchronous generators need to close the yield_from.
578
538
  Nuitka_MarkAsyncgenAsRunning(asyncgen);
579
- bool res = Nuitka_gen_close_iter(tstate, asyncgen->m_yieldfrom);
539
+ bool res = Nuitka_gen_close_iter(tstate, asyncgen->m_yield_from);
580
540
  Nuitka_MarkAsyncgenAsNotRunning(asyncgen);
581
541
 
582
542
  if (res == false) {
583
543
  // Release exception, we are done with it now and pick up the new one.
584
- Py_DECREF(exception_type);
585
- Py_XDECREF(exception_value);
586
- Py_XDECREF(exception_tb);
587
-
588
- FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
544
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
545
+ FETCH_ERROR_OCCURRED_STATE(tstate, exception_state);
589
546
  }
590
547
 
591
- return _Nuitka_Asyncgen_send(tstate, asyncgen, NULL, false, exception_type, exception_value,
592
- exception_tb);
548
+ return _Nuitka_Asyncgen_send(tstate, asyncgen, NULL, false, exception_state);
593
549
  }
594
550
  }
595
551
 
@@ -597,56 +553,55 @@ static PyObject *_Nuitka_Asyncgen_throw2(PyThreadState *tstate, struct Nuitka_As
597
553
 
598
554
  #if _DEBUG_ASYNCGEN
599
555
  PRINT_ASYNCGEN_STATUS("Passing to yielded from", asyncgen);
600
- PRINT_COROUTINE_VALUE("m_yieldfrom", asyncgen->m_yieldfrom);
556
+ PRINT_COROUTINE_VALUE("m_yield_from", asyncgen->m_yield_from);
601
557
  PRINT_NEW_LINE();
602
558
  #endif
603
559
 
604
560
  #if NUITKA_UNCOMPILED_THROW_INTEGRATION
605
- if (PyGen_CheckExact(asyncgen->m_yieldfrom) || PyCoro_CheckExact(asyncgen->m_yieldfrom)) {
606
- PyGenObject *gen = (PyGenObject *)asyncgen->m_yieldfrom;
561
+ if (PyGen_CheckExact(asyncgen->m_yield_from) || PyCoro_CheckExact(asyncgen->m_yield_from)) {
562
+ PyGenObject *gen = (PyGenObject *)asyncgen->m_yield_from;
607
563
 
608
564
  // Transferred exception ownership to "Nuitka_UncompiledGenerator_throw".
609
565
  Nuitka_MarkAsyncgenAsRunning(asyncgen);
610
- ret = Nuitka_UncompiledGenerator_throw(tstate, gen, 1, exception_type, exception_value, exception_tb);
566
+ ret = Nuitka_UncompiledGenerator_throw(tstate, gen, 1, exception_state);
611
567
  Nuitka_MarkAsyncgenAsNotRunning(asyncgen);
612
568
  } else
613
569
  #endif
614
- if (Nuitka_Generator_Check(asyncgen->m_yieldfrom)) {
615
- struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)asyncgen->m_yieldfrom);
570
+ if (Nuitka_Generator_Check(asyncgen->m_yield_from)) {
571
+ struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)asyncgen->m_yield_from);
616
572
  // Transferred exception ownership to "_Nuitka_Generator_throw2".
617
573
  Nuitka_MarkAsyncgenAsRunning(asyncgen);
618
- ret = _Nuitka_Generator_throw2(tstate, gen, exception_type, exception_value, exception_tb);
574
+ ret = _Nuitka_Generator_throw2(tstate, gen, exception_state);
619
575
  Nuitka_MarkAsyncgenAsNotRunning(asyncgen);
620
- } else if (Nuitka_Coroutine_Check(asyncgen->m_yieldfrom)) {
621
- struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)asyncgen->m_yieldfrom);
576
+ } else if (Nuitka_Coroutine_Check(asyncgen->m_yield_from)) {
577
+ struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)asyncgen->m_yield_from);
622
578
  // Transferred exception ownership to "_Nuitka_Coroutine_throw2".
623
579
  Nuitka_MarkAsyncgenAsRunning(asyncgen);
624
- ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_type, exception_value, exception_tb);
580
+ ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_state);
625
581
  Nuitka_MarkAsyncgenAsNotRunning(asyncgen);
626
- } else if (Nuitka_CoroutineWrapper_Check(asyncgen->m_yieldfrom)) {
582
+ } else if (Nuitka_CoroutineWrapper_Check(asyncgen->m_yield_from)) {
627
583
  struct Nuitka_CoroutineObject *coro =
628
- ((struct Nuitka_CoroutineWrapperObject *)asyncgen->m_yieldfrom)->m_coroutine;
584
+ ((struct Nuitka_CoroutineWrapperObject *)asyncgen->m_yield_from)->m_coroutine;
629
585
 
630
586
  // Transferred exception ownership to "_Nuitka_Coroutine_throw2".
631
587
  Nuitka_MarkAsyncgenAsRunning(asyncgen);
632
- ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_type, exception_value, exception_tb);
588
+ ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_state);
633
589
  Nuitka_MarkAsyncgenAsNotRunning(asyncgen);
634
- } else if (Nuitka_AsyncgenAsend_Check(asyncgen->m_yieldfrom)) {
590
+ } else if (Nuitka_AsyncgenAsend_Check(asyncgen->m_yield_from)) {
635
591
  struct Nuitka_AsyncgenAsendObject *asyncgen_asend =
636
- ((struct Nuitka_AsyncgenAsendObject *)asyncgen->m_yieldfrom);
592
+ ((struct Nuitka_AsyncgenAsendObject *)asyncgen->m_yield_from);
637
593
 
638
594
  // Transferred exception ownership to "_Nuitka_AsyncgenAsend_throw2".
639
595
  Nuitka_MarkAsyncgenAsRunning(asyncgen);
640
- ret = _Nuitka_AsyncgenAsend_throw2(tstate, asyncgen_asend, exception_type, exception_value, exception_tb);
596
+ ret = _Nuitka_AsyncgenAsend_throw2(tstate, asyncgen_asend, exception_state);
641
597
  Nuitka_MarkAsyncgenAsNotRunning(asyncgen);
642
598
  } else {
643
- PyObject *meth = PyObject_GetAttr(asyncgen->m_yieldfrom, const_str_plain_throw);
599
+ PyObject *meth = PyObject_GetAttr(asyncgen->m_yield_from, const_str_plain_throw);
600
+
644
601
  if (unlikely(meth == NULL)) {
645
602
  if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
646
603
  // Release exception, we are done with it now.
647
- Py_DECREF(exception_type);
648
- Py_XDECREF(exception_value);
649
- Py_XDECREF(exception_tb);
604
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
650
605
 
651
606
  return NULL;
652
607
  }
@@ -657,43 +612,41 @@ static PyObject *_Nuitka_Asyncgen_throw2(PyThreadState *tstate, struct Nuitka_As
657
612
  goto throw_here;
658
613
  }
659
614
 
660
- CHECK_OBJECT(exception_type);
615
+ CHECK_EXCEPTION_STATE(exception_state);
661
616
 
662
617
  #if 0
663
618
  // TODO: Add slow mode traces.
664
- PRINT_ITEM(coroutine->m_yieldfrom);
619
+ PRINT_ITEM(coroutine->m_yield_from);
665
620
  PRINT_NEW_LINE();
666
621
  #endif
667
622
 
668
623
  Nuitka_MarkAsyncgenAsRunning(asyncgen);
669
- ret = PyObject_CallFunctionObjArgs(meth, exception_type, exception_value, exception_tb, NULL);
624
+ ret = Nuitka_CallGeneratorThrowMethod(meth, exception_state);
670
625
  Nuitka_MarkAsyncgenAsNotRunning(asyncgen);
671
626
 
672
627
  Py_DECREF(meth);
673
628
 
674
629
  // Release exception, we are done with it now.
675
- Py_DECREF(exception_type);
676
- Py_XDECREF(exception_value);
677
- Py_XDECREF(exception_tb);
630
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
678
631
  }
679
632
 
680
633
  if (unlikely(ret == NULL)) {
681
634
  PyObject *val;
682
635
 
683
- if (_PyGen_FetchStopIterationValue(&val) == 0) {
636
+ if (Nuitka_PyGen_FetchStopIterationValue(tstate, &val)) {
684
637
  CHECK_OBJECT(val);
685
638
 
686
- asyncgen->m_yieldfrom = NULL;
639
+ asyncgen->m_yield_from = NULL;
687
640
 
688
641
  // Return value, not to continue with yielding from.
689
- if (asyncgen->m_yieldfrom != NULL) {
690
- CHECK_OBJECT(asyncgen->m_yieldfrom);
642
+ if (asyncgen->m_yield_from != NULL) {
643
+ CHECK_OBJECT(asyncgen->m_yield_from);
691
644
  #if _DEBUG_ASYNCGEN
692
645
  PRINT_ASYNCGEN_STATUS("Yield from removal:", asyncgen);
693
- PRINT_COROUTINE_VALUE("yieldfrom", asyncgen->m_yieldfrom);
646
+ PRINT_COROUTINE_VALUE("yield_from", asyncgen->m_yield_from);
694
647
  #endif
695
- Py_DECREF(asyncgen->m_yieldfrom);
696
- asyncgen->m_yieldfrom = NULL;
648
+ Py_DECREF(asyncgen->m_yield_from);
649
+ asyncgen->m_yield_from = NULL;
697
650
  }
698
651
 
699
652
  #if _DEBUG_ASYNCGEN
@@ -702,15 +655,22 @@ static PyObject *_Nuitka_Asyncgen_throw2(PyThreadState *tstate, struct Nuitka_As
702
655
  PRINT_NEW_LINE();
703
656
  #endif
704
657
 
705
- ret = _Nuitka_Asyncgen_send(tstate, asyncgen, val, false, NULL, NULL, NULL);
658
+ struct Nuitka_ExceptionPreservationItem no_exception_state;
659
+ INIT_ERROR_OCCURRED_STATE(&no_exception_state);
660
+
661
+ ret = _Nuitka_Asyncgen_send(tstate, asyncgen, val, false, &no_exception_state);
706
662
  } else {
707
663
  #if _DEBUG_ASYNCGEN
708
664
  PRINT_ASYNCGEN_STATUS("Sending exception value into ourselves", asyncgen);
709
- PRINT_COROUTINE_VALUE("yieldfrom", asyncgen->m_yieldfrom);
665
+ PRINT_COROUTINE_VALUE("yield_from", asyncgen->m_yield_from);
710
666
  PRINT_CURRENT_EXCEPTION();
711
667
  PRINT_NEW_LINE();
712
668
  #endif
713
- ret = _Nuitka_Asyncgen_send(tstate, asyncgen, NULL, false, NULL, NULL, NULL);
669
+
670
+ struct Nuitka_ExceptionPreservationItem no_exception_state;
671
+ INIT_ERROR_OCCURRED_STATE(&no_exception_state);
672
+
673
+ ret = _Nuitka_Asyncgen_send(tstate, asyncgen, NULL, false, &no_exception_state);
714
674
  }
715
675
 
716
676
  #if _DEBUG_ASYNCGEN
@@ -737,30 +697,33 @@ throw_here:
737
697
  PRINT_ASYNCGEN_STATUS("Need to throw into itself", asyncgen);
738
698
  #endif
739
699
 
740
- if (unlikely(_Nuitka_Generator_check_throw2(tstate, &exception_type, &exception_value, &exception_tb) == false)) {
741
- // Exception was released by _Nuitka_Generator_check_throw2 already.
700
+ if (unlikely(_Nuitka_Generator_check_throw(tstate, exception_state) == false)) {
701
+ // Exception was released by _Nuitka_Generator_check_throw already.
742
702
  return NULL;
743
703
  }
744
704
 
745
705
  PyObject *result;
746
706
 
747
707
  if (asyncgen->m_status == status_Running) {
748
- result = _Nuitka_Asyncgen_send(tstate, asyncgen, NULL, false, exception_type, exception_value, exception_tb);
708
+ result = _Nuitka_Asyncgen_send(tstate, asyncgen, NULL, false, exception_state);
749
709
  } else if (asyncgen->m_status == status_Finished) {
750
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
710
+ RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
751
711
  result = NULL;
752
712
  } else {
713
+ PyTracebackObject *exception_tb = GET_EXCEPTION_STATE_TRACEBACK(exception_state);
714
+
753
715
  if (exception_tb == NULL) {
754
716
  // TODO: Our compiled objects really need a way to store common
755
717
  // stuff in a "shared" part across all instances, and outside of
756
718
  // run time, so we could reuse this.
757
719
  struct Nuitka_FrameObject *frame =
758
720
  MAKE_FUNCTION_FRAME(tstate, asyncgen->m_code_object, asyncgen->m_module, 0);
759
- exception_tb = MAKE_TRACEBACK(frame, asyncgen->m_code_object->co_firstlineno);
721
+ SET_EXCEPTION_STATE_TRACEBACK(exception_state,
722
+ MAKE_TRACEBACK(frame, asyncgen->m_code_object->co_firstlineno));
760
723
  Py_DECREF(frame);
761
724
  }
762
725
 
763
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
726
+ RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
764
727
 
765
728
  #if _DEBUG_ASYNCGEN
766
729
  PRINT_ASYNCGEN_STATUS("Finishing from exception", asyncgen);
@@ -774,7 +737,7 @@ throw_here:
774
737
 
775
738
  #if _DEBUG_ASYNCGEN
776
739
  PRINT_ASYNCGEN_STATUS("Leave", asyncgen);
777
- PRINT_COROUTINE_VALUE("yieldfrom", asyncgen->m_yieldfrom);
740
+ PRINT_COROUTINE_VALUE("yield_from", asyncgen->m_yield_from);
778
741
  PRINT_CURRENT_EXCEPTION();
779
742
  PRINT_NEW_LINE();
780
743
  #endif
@@ -804,15 +767,17 @@ static PyObject *Nuitka_Asyncgen_throw(PyThreadState *tstate, struct Nuitka_Asyn
804
767
  #endif
805
768
 
806
769
  // Handing ownership of exception over, we need not release it ourselves
807
- Py_INCREF(exception_type);
808
- Py_XINCREF(exception_value);
809
- Py_XINCREF(exception_tb);
770
+ struct Nuitka_ExceptionPreservationItem exception_state;
771
+ if (_Nuitka_Generator_make_throw_exception_state(tstate, &exception_state, exception_type, exception_value,
772
+ exception_tb) == false) {
773
+ return NULL;
774
+ }
810
775
 
811
- PyObject *result = _Nuitka_Asyncgen_throw2(tstate, asyncgen, false, exception_type, exception_value, exception_tb);
776
+ PyObject *result = _Nuitka_Asyncgen_throw2(tstate, asyncgen, false, &exception_state);
812
777
 
813
778
  if (result == NULL) {
814
779
  if (HAS_ERROR_OCCURRED(tstate) == false) {
815
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopAsyncIteration);
780
+ SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
816
781
  }
817
782
  }
818
783
 
@@ -822,9 +787,7 @@ static PyObject *Nuitka_Asyncgen_throw(PyThreadState *tstate, struct Nuitka_Asyn
822
787
  PRINT_CURRENT_EXCEPTION();
823
788
  #endif
824
789
 
825
- CHECK_OBJECT(exception_type);
826
- CHECK_OBJECT_X(exception_value);
827
- CHECK_OBJECT_X(exception_tb);
790
+ CHECK_EXCEPTION_STATE(&exception_state);
828
791
 
829
792
  return result;
830
793
  }
@@ -937,7 +900,10 @@ static PySendResult _Nuitka_Asyncgen_am_send(struct Nuitka_AsyncgenObject *async
937
900
 
938
901
  PyThreadState *tstate = PyThreadState_GET();
939
902
 
940
- PySendResult res = _Nuitka_Asyncgen_sendR(tstate, asyncgen, arg, false, NULL, NULL, NULL, result);
903
+ struct Nuitka_ExceptionPreservationItem exception_state;
904
+ INIT_ERROR_OCCURRED_STATE(&exception_state);
905
+
906
+ PySendResult res = _Nuitka_Asyncgen_sendR(tstate, asyncgen, arg, false, &exception_state, result);
941
907
 
942
908
  #if _DEBUG_ASYNCGEN
943
909
  PRINT_ASYNCGEN_STATUS("Leave", asyncgen);
@@ -955,9 +921,8 @@ static void Nuitka_Asyncgen_tp_finalize(struct Nuitka_AsyncgenObject *asyncgen)
955
921
 
956
922
  PyThreadState *tstate = PyThreadState_GET();
957
923
 
958
- PyObject *save_exception_type, *save_exception_value;
959
- PyTracebackObject *save_exception_tb;
960
- FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
924
+ struct Nuitka_ExceptionPreservationItem saved_exception_state;
925
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
961
926
 
962
927
  bool close_result = _Nuitka_Asyncgen_close(tstate, asyncgen);
963
928
 
@@ -966,7 +931,7 @@ static void Nuitka_Asyncgen_tp_finalize(struct Nuitka_AsyncgenObject *asyncgen)
966
931
  }
967
932
 
968
933
  /* Restore the saved exception if any. */
969
- RESTORE_ERROR_OCCURRED(tstate, save_exception_type, save_exception_value, save_exception_tb);
934
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
970
935
  }
971
936
 
972
937
  #define MAX_ASYNCGEN_FREE_LIST_COUNT 100
@@ -987,13 +952,12 @@ static void Nuitka_Asyncgen_tp_dealloc(struct Nuitka_AsyncgenObject *asyncgen) {
987
952
  PyThreadState *tstate = PyThreadState_GET();
988
953
 
989
954
  // Save the current exception, if any, we must preserve it.
990
- PyObject *save_exception_type, *save_exception_value;
991
- PyTracebackObject *save_exception_tb;
955
+ struct Nuitka_ExceptionPreservationItem saved_exception_state;
992
956
 
993
957
  PyObject *finalizer = asyncgen->m_finalizer;
994
958
  if (finalizer != NULL && asyncgen->m_closed == false) {
995
- /* Save the current exception, if any. */
996
- FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
959
+ // Save the current exception, if any.
960
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
997
961
 
998
962
  PyObject *res = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, finalizer, (PyObject *)asyncgen);
999
963
 
@@ -1003,11 +967,11 @@ static void Nuitka_Asyncgen_tp_dealloc(struct Nuitka_AsyncgenObject *asyncgen) {
1003
967
  Py_DECREF(res);
1004
968
  }
1005
969
 
1006
- RESTORE_ERROR_OCCURRED(tstate, save_exception_type, save_exception_value, save_exception_tb);
970
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1007
971
  return;
1008
972
  }
1009
973
 
1010
- FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
974
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1011
975
 
1012
976
  bool close_result = _Nuitka_Asyncgen_close(tstate, asyncgen);
1013
977
 
@@ -1046,7 +1010,7 @@ static void Nuitka_Asyncgen_tp_dealloc(struct Nuitka_AsyncgenObject *asyncgen) {
1046
1010
  /* Put the object into free list or release to GC */
1047
1011
  releaseToFreeList(free_list_asyncgens, asyncgen, MAX_ASYNCGEN_FREE_LIST_COUNT);
1048
1012
 
1049
- RESTORE_ERROR_OCCURRED(tstate, save_exception_type, save_exception_value, save_exception_tb);
1013
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1050
1014
  }
1051
1015
 
1052
1016
  static PyObject *Nuitka_Asyncgen_tp_repr(struct Nuitka_AsyncgenObject *asyncgen) {
@@ -1059,7 +1023,7 @@ static PyObject *Nuitka_Asyncgen_tp_repr(struct Nuitka_AsyncgenObject *asyncgen)
1059
1023
  static int Nuitka_Asyncgen_tp_traverse(struct Nuitka_AsyncgenObject *asyncgen, visitproc visit, void *arg) {
1060
1024
  CHECK_OBJECT(asyncgen);
1061
1025
 
1062
- Py_VISIT(asyncgen->m_yieldfrom);
1026
+ Py_VISIT(asyncgen->m_yield_from);
1063
1027
 
1064
1028
  for (Py_ssize_t i = 0; i < asyncgen->m_closure_given; i++) {
1065
1029
  Py_VISIT(asyncgen->m_closure[i]);
@@ -1091,12 +1055,12 @@ static PyAsyncMethods Nuitka_Asyncgen_as_async = {
1091
1055
 
1092
1056
  // TODO: Set "__doc__" automatically for method clones of compiled types from
1093
1057
  // the documentation of built-in original type.
1094
- static PyGetSetDef Nuitka_Asyncgen_getsetlist[] = {
1095
- {(char *)"__name__", (getter)Nuitka_Asyncgen_get_name, (setter)Nuitka_Asyncgen_set_name, NULL},
1096
- {(char *)"__qualname__", (getter)Nuitka_Asyncgen_get_qualname, (setter)Nuitka_Asyncgen_set_qualname, NULL},
1097
- {(char *)"ag_await", (getter)Nuitka_Asyncgen_get_ag_await, (setter)NULL, NULL},
1098
- {(char *)"ag_code", (getter)Nuitka_Asyncgen_get_code, (setter)Nuitka_Asyncgen_set_code, NULL},
1099
- {(char *)"ag_frame", (getter)Nuitka_Asyncgen_get_frame, (setter)Nuitka_Asyncgen_set_frame, NULL},
1058
+ static PyGetSetDef Nuitka_Asyncgen_tp_getset[] = {
1059
+ {(char *)"__name__", Nuitka_Asyncgen_get_name, Nuitka_Asyncgen_set_name, NULL},
1060
+ {(char *)"__qualname__", Nuitka_Asyncgen_get_qualname, Nuitka_Asyncgen_set_qualname, NULL},
1061
+ {(char *)"ag_await", Nuitka_Asyncgen_get_ag_await, NULL, NULL},
1062
+ {(char *)"ag_code", Nuitka_Asyncgen_get_code, Nuitka_Asyncgen_set_code, NULL},
1063
+ {(char *)"ag_frame", Nuitka_Asyncgen_get_frame, Nuitka_Asyncgen_set_frame, NULL},
1100
1064
 
1101
1065
  {NULL}};
1102
1066
 
@@ -1136,7 +1100,7 @@ PyTypeObject Nuitka_Asyncgen_Type = {
1136
1100
  0, // tp_iternext
1137
1101
  Nuitka_Asyncgen_methods, // tp_methods
1138
1102
  Nuitka_Asyncgen_members, // tp_members
1139
- Nuitka_Asyncgen_getsetlist, // tp_getset
1103
+ Nuitka_Asyncgen_tp_getset, // tp_getset
1140
1104
  0, // tp_base
1141
1105
  0, // tp_dict
1142
1106
  0, // tp_descr_get
@@ -1195,7 +1159,7 @@ PyObject *Nuitka_Asyncgen_New(asyncgen_code code, PyObject *module, PyObject *na
1195
1159
  result->m_qualname = qualname;
1196
1160
  Py_INCREF(qualname);
1197
1161
 
1198
- result->m_yieldfrom = NULL;
1162
+ result->m_yield_from = NULL;
1199
1163
 
1200
1164
  memcpy(&result->m_closure[0], closure, closure_given * sizeof(struct Nuitka_CellObject *));
1201
1165
  result->m_closure_given = closure_given;
@@ -1393,7 +1357,13 @@ struct _PyAsyncGenWrappedValue {
1393
1357
  PyObject *agw_val;
1394
1358
  };
1395
1359
 
1360
+ #if PYTHON_VERSION < 0x3d0
1396
1361
  #define _PyAsyncGenWrappedValue_CheckExact(o) (Py_TYPE(o) == &_PyAsyncGenWrappedValue_Type)
1362
+ #else
1363
+ static PyTypeObject *Nuitka_PyAsyncGenWrappedValue_Type = NULL;
1364
+
1365
+ #define _PyAsyncGenWrappedValue_CheckExact(o) (Py_TYPE(o) == Nuitka_PyAsyncGenWrappedValue_Type)
1366
+ #endif
1397
1367
 
1398
1368
  static PyObject *_Nuitka_Asyncgen_unwrap_value(PyThreadState *tstate, struct Nuitka_AsyncgenObject *asyncgen,
1399
1369
  PyObject *result) {
@@ -1404,7 +1374,7 @@ static PyObject *_Nuitka_Asyncgen_unwrap_value(PyThreadState *tstate, struct Nui
1404
1374
  PyObject *error = GET_ERROR_OCCURRED(tstate);
1405
1375
 
1406
1376
  if (error == NULL) {
1407
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopAsyncIteration);
1377
+ SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
1408
1378
  asyncgen->m_closed = true;
1409
1379
  } else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, error, PyExc_StopAsyncIteration) ||
1410
1380
  EXCEPTION_MATCH_BOOL_SINGLE(tstate, error, PyExc_GeneratorExit)) {
@@ -1419,7 +1389,7 @@ static PyObject *_Nuitka_Asyncgen_unwrap_value(PyThreadState *tstate, struct Nui
1419
1389
 
1420
1390
  if (_PyAsyncGenWrappedValue_CheckExact(result)) {
1421
1391
  /* async yield */
1422
- _PyGen_SetStopIterationValue(((struct _PyAsyncGenWrappedValue *)result)->agw_val);
1392
+ Nuitka_SetStopIterationValue(tstate, ((struct _PyAsyncGenWrappedValue *)result)->agw_val);
1423
1393
 
1424
1394
  Py_DECREF(result);
1425
1395
 
@@ -1429,7 +1399,7 @@ static PyObject *_Nuitka_Asyncgen_unwrap_value(PyThreadState *tstate, struct Nui
1429
1399
  return NULL;
1430
1400
  } else if (Nuitka_AsyncgenWrappedValue_CheckExact(result)) {
1431
1401
  /* async yield */
1432
- _PyGen_SetStopIterationValue(((struct Nuitka_AsyncgenWrappedValueObject *)result)->m_value);
1402
+ Nuitka_SetStopIterationValue(tstate, ((struct Nuitka_AsyncgenWrappedValueObject *)result)->m_value);
1433
1403
 
1434
1404
  Py_DECREF(result);
1435
1405
 
@@ -1486,7 +1456,7 @@ static PyObject *Nuitka_AsyncgenAsend_send(struct Nuitka_AsyncgenAsendObject *as
1486
1456
 
1487
1457
  if (asyncgen_asend->m_state == AWAITABLE_STATE_CLOSED) {
1488
1458
  #if PYTHON_VERSION < 0x390
1489
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1459
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
1490
1460
  #else
1491
1461
  SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, "cannot reuse already awaited __anext__()/asend()");
1492
1462
  #endif
@@ -1530,7 +1500,11 @@ static PyObject *Nuitka_AsyncgenAsend_send(struct Nuitka_AsyncgenAsendObject *as
1530
1500
  #endif
1531
1501
 
1532
1502
  Py_INCREF(arg);
1533
- PyObject *result = _Nuitka_Asyncgen_send(tstate, asyncgen_asend->m_gen, arg, false, NULL, NULL, NULL);
1503
+
1504
+ struct Nuitka_ExceptionPreservationItem exception_state;
1505
+ INIT_ERROR_OCCURRED_STATE(&exception_state);
1506
+
1507
+ PyObject *result = _Nuitka_Asyncgen_send(tstate, asyncgen_asend->m_gen, arg, false, &exception_state);
1534
1508
 
1535
1509
  #if _DEBUG_ASYNCGEN
1536
1510
  PRINT_STRING("Returned from _Nuitka_Asyncgen_send\n");
@@ -1590,7 +1564,7 @@ static PyObject *Nuitka_AsyncgenAsend_throw(struct Nuitka_AsyncgenAsendObject *a
1590
1564
  PyThreadState *tstate = PyThreadState_GET();
1591
1565
 
1592
1566
  if (asyncgen_asend->m_state == AWAITABLE_STATE_CLOSED) {
1593
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1567
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
1594
1568
  return NULL;
1595
1569
  }
1596
1570
 
@@ -1625,28 +1599,26 @@ static PyObject *Nuitka_AsyncgenAsend_throw(struct Nuitka_AsyncgenAsendObject *a
1625
1599
  }
1626
1600
 
1627
1601
  static PyObject *_Nuitka_AsyncgenAsend_throw2(PyThreadState *tstate, struct Nuitka_AsyncgenAsendObject *asyncgen_asend,
1628
- PyObject *exception_type, PyObject *exception_value,
1629
- PyTracebackObject *exception_tb) {
1602
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
1630
1603
  #if _DEBUG_ASYNCGEN
1631
1604
  PRINT_ASYNCGENASEND_STATUS("Enter", asyncgen_asend);
1632
- PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
1605
+ PRINT_EXCEPTION_STATE(exception_state);
1633
1606
  PRINT_CURRENT_EXCEPTION();
1634
1607
  PRINT_NEW_LINE();
1635
1608
  #endif
1636
1609
 
1637
1610
  if (asyncgen_asend->m_state == AWAITABLE_STATE_CLOSED) {
1638
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1611
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
1639
1612
  return NULL;
1640
1613
  }
1641
1614
 
1642
- PyObject *result =
1643
- _Nuitka_Asyncgen_throw2(tstate, asyncgen_asend->m_gen, false, exception_type, exception_value, exception_tb);
1615
+ PyObject *result = _Nuitka_Asyncgen_throw2(tstate, asyncgen_asend->m_gen, false, exception_state);
1644
1616
 
1645
1617
  // TODO: This might not be all that necessary as this is not directly outside facing,
1646
1618
  // but there were tests failing when this was not the specific value.
1647
1619
  if (result == NULL) {
1648
- if (GET_ERROR_OCCURRED(tstate) == NULL) {
1649
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopAsyncIteration);
1620
+ if (HAS_ERROR_OCCURRED(tstate) == false) {
1621
+ SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
1650
1622
  }
1651
1623
  }
1652
1624
 
@@ -1679,7 +1651,7 @@ static PyObject *_Nuitka_AsyncgenAsend_throw2(PyThreadState *tstate, struct Nuit
1679
1651
  static PyObject *Nuitka_AsyncgenAsend_close(struct Nuitka_AsyncgenAsendObject *asyncgen_asend, PyObject *args) {
1680
1652
  asyncgen_asend->m_state = AWAITABLE_STATE_CLOSED;
1681
1653
 
1682
- Py_INCREF(Py_None);
1654
+ Py_INCREF_IMMORTAL(Py_None);
1683
1655
  return Py_None;
1684
1656
  }
1685
1657
 
@@ -1857,7 +1829,7 @@ static PyObject *Nuitka_AsyncgenAthrow_send(struct Nuitka_AsyncgenAthrowObject *
1857
1829
  // Closing twice is not allowed with 3.9 or higher.
1858
1830
  if (asyncgen_athrow->m_state == AWAITABLE_STATE_CLOSED) {
1859
1831
  #if PYTHON_VERSION < 0x390
1860
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1832
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
1861
1833
  #else
1862
1834
  SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, "cannot reuse already awaited aclose()/athrow()");
1863
1835
  #endif
@@ -1867,7 +1839,7 @@ static PyObject *Nuitka_AsyncgenAthrow_send(struct Nuitka_AsyncgenAthrowObject *
1867
1839
 
1868
1840
  // If finished, just report StopIteration.
1869
1841
  if (asyncgen->m_status == status_Finished) {
1870
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1842
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
1871
1843
  return NULL;
1872
1844
  }
1873
1845
 
@@ -1891,9 +1863,9 @@ static PyObject *Nuitka_AsyncgenAthrow_send(struct Nuitka_AsyncgenAthrowObject *
1891
1863
  if (asyncgen->m_closed) {
1892
1864
  #if PYTHON_VERSION >= 0x380
1893
1865
  asyncgen_athrow->m_state = AWAITABLE_STATE_CLOSED;
1894
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopAsyncIteration);
1866
+ SET_CURRENT_EXCEPTION_STOP_ASYNC_ITERATION(tstate);
1895
1867
  #else
1896
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1868
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
1897
1869
  #endif
1898
1870
  return NULL;
1899
1871
  }
@@ -1914,10 +1886,12 @@ static PyObject *Nuitka_AsyncgenAthrow_send(struct Nuitka_AsyncgenAthrowObject *
1914
1886
  if (asyncgen_athrow->m_args == NULL) {
1915
1887
  asyncgen->m_closed = true;
1916
1888
 
1917
- Py_INCREF(PyExc_GeneratorExit);
1889
+ struct Nuitka_ExceptionPreservationItem exception_state;
1890
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, &exception_state, PyExc_GeneratorExit, NULL, NULL);
1891
+
1918
1892
  retval = _Nuitka_Asyncgen_throw2(tstate, asyncgen,
1919
1893
  1, /* Do not close generator when PyExc_GeneratorExit is passed */
1920
- PyExc_GeneratorExit, NULL, NULL);
1894
+ &exception_state);
1921
1895
 
1922
1896
  if (retval) {
1923
1897
  if (_PyAsyncGenWrappedValue_CheckExact(retval) || Nuitka_AsyncgenWrappedValue_CheckExact(retval)) {
@@ -1944,13 +1918,15 @@ static PyObject *Nuitka_AsyncgenAthrow_send(struct Nuitka_AsyncgenAthrowObject *
1944
1918
  }
1945
1919
 
1946
1920
  // Handing ownership of exception over, we need not release it ourselves
1947
- Py_INCREF(exception_type);
1948
- Py_XINCREF(exception_value);
1949
- Py_XINCREF(exception_tb);
1921
+ struct Nuitka_ExceptionPreservationItem exception_state;
1922
+ if (_Nuitka_Generator_make_throw_exception_state(tstate, &exception_state, exception_type, exception_value,
1923
+ exception_tb) == false) {
1924
+ return NULL;
1925
+ }
1950
1926
 
1951
1927
  retval = _Nuitka_Asyncgen_throw2(tstate, asyncgen,
1952
1928
  0, /* Do not close generator when PyExc_GeneratorExit is passed */
1953
- exception_type, exception_value, exception_tb);
1929
+ &exception_state);
1954
1930
 
1955
1931
  retval = _Nuitka_Asyncgen_unwrap_value(tstate, asyncgen, retval);
1956
1932
  }
@@ -1964,7 +1940,10 @@ static PyObject *Nuitka_AsyncgenAthrow_send(struct Nuitka_AsyncgenAthrowObject *
1964
1940
 
1965
1941
  assert(asyncgen_athrow->m_state == AWAITABLE_STATE_ITER);
1966
1942
 
1967
- retval = _Nuitka_Asyncgen_send(tstate, asyncgen, arg, false, NULL, NULL, NULL);
1943
+ struct Nuitka_ExceptionPreservationItem exception_state;
1944
+ INIT_ERROR_OCCURRED_STATE(&exception_state);
1945
+
1946
+ retval = _Nuitka_Asyncgen_send(tstate, asyncgen, arg, false, &exception_state);
1968
1947
 
1969
1948
  if (asyncgen_athrow->m_args) {
1970
1949
  return _Nuitka_Asyncgen_unwrap_value(tstate, asyncgen, retval);
@@ -1996,7 +1975,7 @@ check_error:
1996
1975
 
1997
1976
  if (asyncgen_athrow->m_args == NULL) {
1998
1977
  CLEAR_ERROR_OCCURRED(tstate);
1999
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1978
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
2000
1979
  }
2001
1980
  } else if (PyErr_ExceptionMatches(PyExc_GeneratorExit)) {
2002
1981
  asyncgen_athrow->m_state = AWAITABLE_STATE_CLOSED;
@@ -2004,8 +1983,7 @@ check_error:
2004
1983
  #if PYTHON_VERSION >= 0x380
2005
1984
  if (asyncgen_athrow->m_args == NULL) {
2006
1985
  #endif
2007
- CLEAR_ERROR_OCCURRED(tstate);
2008
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1986
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
2009
1987
  #if PYTHON_VERSION >= 0x380
2010
1988
  }
2011
1989
  #endif
@@ -2036,7 +2014,7 @@ static PyObject *Nuitka_AsyncgenAthrow_throw(struct Nuitka_AsyncgenAthrowObject
2036
2014
 
2037
2015
  if (asyncgen_athrow->m_state == AWAITABLE_STATE_CLOSED) {
2038
2016
  #if PYTHON_VERSION < 0x390
2039
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
2017
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
2040
2018
  #else
2041
2019
  SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, "cannot reuse already awaited aclose()/athrow()");
2042
2020
  #endif
@@ -2064,7 +2042,7 @@ static PyObject *Nuitka_AsyncgenAthrow_throw(struct Nuitka_AsyncgenAthrowObject
2064
2042
 
2065
2043
  #if PYTHON_VERSION >= 0x390
2066
2044
  if (PyErr_ExceptionMatches(PyExc_StopAsyncIteration) || PyErr_ExceptionMatches(PyExc_GeneratorExit)) {
2067
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
2045
+ SET_CURRENT_EXCEPTION_STOP_ITERATION_EMPTY(tstate);
2068
2046
  }
2069
2047
  #endif
2070
2048
 
@@ -2079,7 +2057,7 @@ static PyObject *Nuitka_AsyncgenAthrow_tp_iternext(struct Nuitka_AsyncgenAthrowO
2079
2057
  static PyObject *Nuitka_AsyncgenAthrow_close(struct Nuitka_AsyncgenAthrowObject *asyncgen_athrow) {
2080
2058
  asyncgen_athrow->m_state = AWAITABLE_STATE_CLOSED;
2081
2059
 
2082
- Py_INCREF(Py_None);
2060
+ Py_INCREF_IMMORTAL(Py_None);
2083
2061
  return Py_None;
2084
2062
  }
2085
2063
 
@@ -2210,4 +2188,26 @@ static void _initCompiledAsyncgenTypes(void) {
2210
2188
  Nuitka_PyType_Ready(&Nuitka_AsyncgenAsend_Type, NULL, true, false, true, true, false);
2211
2189
  Nuitka_PyType_Ready(&Nuitka_AsyncgenAthrow_Type, NULL, true, false, true, true, false);
2212
2190
  Nuitka_PyType_Ready(&Nuitka_AsyncgenValueWrapper_Type, NULL, false, false, false, false, false);
2191
+
2192
+ #if PYTHON_VERSION >= 0x3d0
2193
+ PyThreadState *tstate = PyThreadState_GET();
2194
+ PyObject *asyncgen_wrapper_object = _PyIntrinsics_UnaryFunctions[INTRINSIC_ASYNC_GEN_WRAP].func(tstate, Py_None);
2195
+ Nuitka_PyAsyncGenWrappedValue_Type = Py_TYPE(asyncgen_wrapper_object);
2196
+ Py_DECREF(asyncgen_wrapper_object);
2197
+ #endif
2213
2198
  }
2199
+
2200
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
2201
+ // integrates with CPython, but also works on its own.
2202
+ //
2203
+ // Licensed under the Apache License, Version 2.0 (the "License");
2204
+ // you may not use this file except in compliance with the License.
2205
+ // You may obtain a copy of the License at
2206
+ //
2207
+ // http://www.apache.org/licenses/LICENSE-2.0
2208
+ //
2209
+ // Unless required by applicable law or agreed to in writing, software
2210
+ // distributed under the License is distributed on an "AS IS" BASIS,
2211
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2212
+ // See the License for the specific language governing permissions and
2213
+ // limitations under the License.