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

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

Potentially problematic release.


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

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