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 Coroutines.
19
4
  *
20
5
  * Unlike in CPython, we have one type for just coroutines, this doesn't do generators
@@ -29,7 +14,7 @@
29
14
  #ifdef __IDE_ONLY__
30
15
  #include "nuitka/freelists.h"
31
16
  #include "nuitka/prelude.h"
32
- #include "structmember.h"
17
+ #include <structmember.h>
33
18
  #endif
34
19
 
35
20
  // For reporting about reference counts per type.
@@ -72,8 +57,8 @@ static void Nuitka_MarkCoroutineAsNotRunning(struct Nuitka_CoroutineObject *coro
72
57
  }
73
58
 
74
59
  static PyObject *_Nuitka_Coroutine_send(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine,
75
- PyObject *value, bool closing, PyObject *exception_type,
76
- PyObject *exception_value, PyTracebackObject *exception_tb);
60
+ PyObject *value, bool closing,
61
+ struct Nuitka_ExceptionPreservationItem *exception_state);
77
62
 
78
63
  static long Nuitka_Coroutine_tp_hash(struct Nuitka_CoroutineObject *coroutine) { return coroutine->m_counter; }
79
64
 
@@ -133,13 +118,13 @@ static int Nuitka_Coroutine_set_qualname(struct Nuitka_CoroutineObject *coroutin
133
118
 
134
119
  static PyObject *Nuitka_Coroutine_get_cr_await(struct Nuitka_CoroutineObject *coroutine) {
135
120
  CHECK_OBJECT(coroutine);
136
- CHECK_OBJECT_X(coroutine->m_yieldfrom);
121
+ CHECK_OBJECT_X(coroutine->m_yield_from);
137
122
 
138
- if (coroutine->m_yieldfrom) {
139
- Py_INCREF(coroutine->m_yieldfrom);
140
- return coroutine->m_yieldfrom;
123
+ if (coroutine->m_yield_from) {
124
+ Py_INCREF(coroutine->m_yield_from);
125
+ return coroutine->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_Coroutine_get_frame(struct Nuitka_CoroutineObject *corou
169
154
  Py_INCREF(coroutine->m_frame);
170
155
  return (PyObject *)coroutine->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
  }
@@ -196,30 +181,29 @@ static void Nuitka_Coroutine_release_closure(struct Nuitka_CoroutineObject *coro
196
181
  }
197
182
 
198
183
  // Note: Shared with asyncgen.
199
- static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yieldfrom, PyObject *send_value,
184
+ static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yield_from, PyObject *send_value,
200
185
  PyObject **returned_value, bool mode) {
201
186
  // Send iteration value to the sub-generator, which may be a CPython
202
187
  // generator object, something with an iterator next, or a send method,
203
188
  // where the later is only required if values other than "None" need to
204
189
  // be passed in.
205
- CHECK_OBJECT(yieldfrom);
190
+ CHECK_OBJECT(yield_from);
206
191
  CHECK_OBJECT_X(send_value);
207
192
 
208
193
  assert(send_value != NULL || HAS_ERROR_OCCURRED(tstate));
209
194
 
210
195
  PyObject *retval;
211
196
 
212
- PyObject *exception_type, *exception_value;
213
- PyTracebackObject *exception_tb;
197
+ struct Nuitka_ExceptionPreservationItem exception_state;
214
198
 
215
- FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
199
+ FETCH_ERROR_OCCURRED_STATE(tstate, &exception_state);
216
200
 
217
- if (exception_type != NULL) {
201
+ if (HAS_EXCEPTION_STATE(&exception_state)) {
218
202
  // Exception, was thrown into us, need to send that to sub-generator.
219
203
  // We acquired ownership of the published exception and need to release it potentially.
220
204
 
221
205
  // Transfer exception owner this.
222
- retval = _Nuitka_YieldFromPassExceptionTo(tstate, yieldfrom, exception_type, exception_value, exception_tb);
206
+ retval = _Nuitka_YieldFromPassExceptionTo(tstate, yield_from, &exception_state);
223
207
 
224
208
  // TODO: This wants to look at retval most definitely, send_value is going to be NULL.
225
209
  if (unlikely(send_value == NULL)) {
@@ -232,24 +216,28 @@ static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yieldfro
232
216
  return NULL;
233
217
  }
234
218
  }
235
- } else if (PyGen_CheckExact(yieldfrom) || PyCoro_CheckExact(yieldfrom)) {
236
- retval = Nuitka_PyGen_Send(tstate, (PyGenObject *)yieldfrom, Py_None);
237
- } else if (send_value == Py_None && Nuitka_CoroutineWrapper_Check(yieldfrom)) {
219
+ } else if (PyGen_CheckExact(yield_from) || PyCoro_CheckExact(yield_from)) {
220
+ retval = Nuitka_PyGen_Send(tstate, (PyGenObject *)yield_from, Py_None);
221
+ } else if (send_value == Py_None && Nuitka_CoroutineWrapper_Check(yield_from)) {
238
222
  struct Nuitka_CoroutineObject *yieldfrom_coroutine =
239
- ((struct Nuitka_CoroutineWrapperObject *)yieldfrom)->m_coroutine;
223
+ ((struct Nuitka_CoroutineWrapperObject *)yield_from)->m_coroutine;
240
224
 
241
- Py_INCREF(Py_None);
242
- retval = _Nuitka_Coroutine_send(tstate, yieldfrom_coroutine, Py_None, mode ? false : true, NULL, NULL, NULL);
243
- } else if (send_value == Py_None && Py_TYPE(yieldfrom)->tp_iternext != NULL) {
244
- retval = Py_TYPE(yieldfrom)->tp_iternext(yieldfrom);
225
+ Py_INCREF_IMMORTAL(Py_None);
226
+
227
+ struct Nuitka_ExceptionPreservationItem no_exception_state;
228
+ INIT_ERROR_OCCURRED_STATE(&no_exception_state);
229
+
230
+ retval = _Nuitka_Coroutine_send(tstate, yieldfrom_coroutine, Py_None, mode ? false : true, &no_exception_state);
231
+ } else if (send_value == Py_None && Py_TYPE(yield_from)->tp_iternext != NULL) {
232
+ retval = Py_TYPE(yield_from)->tp_iternext(yield_from);
245
233
  } else {
246
234
  #if 0
247
235
  // TODO: Add slow mode traces.
248
- PRINT_ITEM(yieldfrom);
236
+ PRINT_ITEM(yield_from);
249
237
  PRINT_NEW_LINE();
250
238
  #endif
251
239
 
252
- retval = PyObject_CallMethodObjArgs(yieldfrom, const_str_plain_send, send_value, NULL);
240
+ retval = PyObject_CallMethodObjArgs(yield_from, const_str_plain_send, send_value, NULL);
253
241
  }
254
242
 
255
243
  // Check the sub-generator result
@@ -257,7 +245,7 @@ static PyObject *_Nuitka_YieldFromCore(PyThreadState *tstate, PyObject *yieldfro
257
245
  PyObject *error = GET_ERROR_OCCURRED(tstate);
258
246
 
259
247
  if (error == NULL) {
260
- Py_INCREF(Py_None);
248
+ Py_INCREF_IMMORTAL(Py_None);
261
249
  *returned_value = Py_None;
262
250
  } else if (likely(EXCEPTION_MATCH_BOOL_SINGLE(tstate, error, PyExc_StopIteration))) {
263
251
  // The sub-generator has given an exception. In case of
@@ -284,23 +272,23 @@ static PyObject *_Nuitka_YieldFromCoroutineCore(PyThreadState *tstate, struct Nu
284
272
  CHECK_OBJECT(coroutine);
285
273
  CHECK_OBJECT_X(send_value);
286
274
 
287
- PyObject *yieldfrom = coroutine->m_yieldfrom;
288
- CHECK_OBJECT(yieldfrom);
275
+ PyObject *yield_from = coroutine->m_yield_from;
276
+ CHECK_OBJECT(yield_from);
289
277
 
290
278
  // Need to make it unaccessible while using it.
291
- coroutine->m_yieldfrom = NULL;
279
+ coroutine->m_yield_from = NULL;
292
280
 
293
281
  PyObject *returned_value;
294
- PyObject *yielded = _Nuitka_YieldFromCore(tstate, yieldfrom, send_value, &returned_value, mode);
282
+ PyObject *yielded = _Nuitka_YieldFromCore(tstate, yield_from, send_value, &returned_value, mode);
295
283
 
296
284
  if (yielded == NULL) {
297
- assert(coroutine->m_yieldfrom == NULL);
298
- Py_DECREF(yieldfrom);
285
+ assert(coroutine->m_yield_from == NULL);
286
+ Py_DECREF(yield_from);
299
287
 
300
288
  yielded = ((coroutine_code)coroutine->m_code)(tstate, coroutine, returned_value);
301
289
  } else {
302
- assert(coroutine->m_yieldfrom == NULL);
303
- coroutine->m_yieldfrom = yieldfrom;
290
+ assert(coroutine->m_yield_from == NULL);
291
+ coroutine->m_yield_from = yield_from;
304
292
  }
305
293
 
306
294
  return yielded;
@@ -384,30 +372,26 @@ static void Nuitka_SetStopIterationValue(PyThreadState *tstate, PyObject *value)
384
372
  // be normalized.
385
373
 
386
374
  static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine,
387
- PyObject *value, bool closing, PyObject *exception_type,
388
- PyObject *exception_value, PyTracebackObject *exception_tb,
375
+ PyObject *value, bool closing,
376
+ struct Nuitka_ExceptionPreservationItem *exception_state,
389
377
  PyObject **result) {
390
378
  CHECK_OBJECT(coroutine);
391
379
  assert(Nuitka_Coroutine_Check((PyObject *)coroutine));
392
- CHECK_OBJECT_X(exception_type);
393
- CHECK_OBJECT_X(exception_value);
394
- CHECK_OBJECT_X(exception_tb);
380
+ CHECK_EXCEPTION_STATE_X(exception_state);
395
381
  CHECK_OBJECT_X(value);
396
382
 
397
383
  #if _DEBUG_COROUTINE
398
384
  PRINT_COROUTINE_STATUS("Enter", coroutine);
399
385
  PRINT_COROUTINE_STRING("closing", closing ? "(closing) " : "(not closing) ");
400
386
  PRINT_COROUTINE_VALUE("value", value);
401
- PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
387
+ PRINT_EXCEPTION_STATE(exception_state);
402
388
  PRINT_CURRENT_EXCEPTION();
403
389
  PRINT_NEW_LINE();
404
390
  #endif
405
391
 
406
392
  // Not both a value and an exception please.
407
393
  if (value != NULL) {
408
- assert(exception_type == NULL);
409
- assert(exception_value == NULL);
410
- assert(exception_tb == NULL);
394
+ ASSERT_EMPTY_EXCEPTION_STATE(exception_state);
411
395
  }
412
396
 
413
397
  if (coroutine->m_status == status_Unused && value != NULL && value != Py_None) {
@@ -449,11 +433,11 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
449
433
  Nuitka_MarkCoroutineAsRunning(coroutine);
450
434
 
451
435
  // Check for thrown exception, publish it to the coroutine code.
452
- if (unlikely(exception_type)) {
436
+ if (unlikely(HAS_EXCEPTION_STATE(exception_state))) {
453
437
  assert(value == NULL);
454
438
 
455
439
  // Transfer exception ownership to published.
456
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
440
+ RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
457
441
  }
458
442
 
459
443
  #if _DEBUG_COROUTINE
@@ -466,7 +450,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
466
450
 
467
451
  PyObject *yielded;
468
452
 
469
- if (coroutine->m_yieldfrom == NULL) {
453
+ if (coroutine->m_yield_from == NULL) {
470
454
  yielded = ((coroutine_code)coroutine->m_code)(tstate, coroutine, value);
471
455
  } else {
472
456
  // This does not release the value if any, so we need to do it afterwards.
@@ -474,16 +458,14 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
474
458
  Py_XDECREF(value);
475
459
  }
476
460
 
477
- // If the coroutine returns with m_yieldfrom set, it wants us to yield
461
+ // If the coroutine returns with m_yield_from set, it wants us to yield
478
462
  // from that value from now on.
479
- while (yielded == NULL && coroutine->m_yieldfrom != NULL) {
463
+ while (yielded == NULL && coroutine->m_yield_from != NULL) {
480
464
  yielded = Nuitka_YieldFromCoroutineNext(tstate, coroutine);
481
465
  }
482
466
 
483
467
  Nuitka_MarkCoroutineAsNotRunning(coroutine);
484
468
 
485
- tstate = PyThreadState_GET();
486
-
487
469
  // Remove the back frame from coroutine if it's there.
488
470
  if (coroutine->m_frame) {
489
471
  // assert(tstate->frame == &coroutine->m_frame->m_frame);
@@ -550,30 +532,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
550
532
 
551
533
  return PYGEN_RETURN;
552
534
  } else if (error == PyExc_StopIteration) {
553
- PyObject *saved_exception_type, *saved_exception_value;
554
- PyTracebackObject *saved_exception_tb;
555
-
556
- // TODO: For Python3.12, this kind of code ought to use tstate methods entirely.
557
- FETCH_ERROR_OCCURRED(tstate, &saved_exception_type, &saved_exception_value, &saved_exception_tb);
558
- NORMALIZE_EXCEPTION(tstate, &saved_exception_type, &saved_exception_value, &saved_exception_tb);
559
-
560
- PyErr_Format(PyExc_RuntimeError, "coroutine raised StopIteration");
561
-
562
- FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
563
-
564
- RAISE_EXCEPTION_WITH_CAUSE(tstate, &exception_type, &exception_value, &exception_tb,
565
- saved_exception_value);
566
-
567
- CHECK_OBJECT(exception_value);
568
- CHECK_OBJECT(saved_exception_value);
569
-
570
- Py_INCREF(saved_exception_value);
571
- PyException_SetContext(exception_value, saved_exception_value);
572
-
573
- Py_DECREF(saved_exception_type);
574
- Py_XDECREF(saved_exception_tb);
575
-
576
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
535
+ RAISE_RUNTIME_ERROR_RAISED_STOP_ITERATION(tstate, "coroutine raised StopIteration");
577
536
 
578
537
  #if _DEBUG_COROUTINE
579
538
  PRINT_COROUTINE_STATUS("Leave with exception set", coroutine);
@@ -592,9 +551,7 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
592
551
  Py_XDECREF(value);
593
552
 
594
553
  // Release exception if any, we are finished with it and will raise another.
595
- Py_XDECREF(exception_type);
596
- Py_XDECREF(exception_value);
597
- Py_XDECREF(exception_tb);
554
+ RELEASE_ERROR_OCCURRED_STATE_X(exception_state);
598
555
 
599
556
  /* This is for status_Finished */
600
557
  assert(coroutine->m_status == status_Finished);
@@ -626,18 +583,15 @@ static PySendResult _Nuitka_Coroutine_sendR(PyThreadState *tstate, struct Nuitka
626
583
  }
627
584
 
628
585
  static PyObject *_Nuitka_Coroutine_send(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine,
629
- PyObject *value, bool closing, PyObject *exception_type,
630
- PyObject *exception_value, PyTracebackObject *exception_tb) {
586
+ PyObject *value, bool closing,
587
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
631
588
 
632
589
  PyObject *result;
633
- PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, value, closing, exception_type, exception_value,
634
- exception_tb, &result);
590
+ PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, value, closing, exception_state, &result);
635
591
 
636
592
  switch (res) {
637
593
  case PYGEN_RETURN:
638
- if (result == NULL) {
639
- SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
640
- } else {
594
+ if (result != NULL) {
641
595
  if (result != Py_None) {
642
596
  Nuitka_SetStopIterationValue(tstate, result);
643
597
  }
@@ -663,7 +617,11 @@ static PyObject *Nuitka_Coroutine_send(struct Nuitka_CoroutineObject *coroutine,
663
617
  Py_INCREF(value);
664
618
 
665
619
  PyThreadState *tstate = PyThreadState_GET();
666
- PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, value, false, NULL, NULL, NULL);
620
+
621
+ struct Nuitka_ExceptionPreservationItem exception_state;
622
+ INIT_ERROR_OCCURRED_STATE(&exception_state);
623
+
624
+ PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, value, false, &exception_state);
667
625
 
668
626
  if (result == NULL) {
669
627
  if (HAS_ERROR_OCCURRED(tstate) == false) {
@@ -682,9 +640,10 @@ static bool _Nuitka_Coroutine_close(PyThreadState *tstate, struct Nuitka_Corouti
682
640
  CHECK_OBJECT(coroutine);
683
641
 
684
642
  if (coroutine->m_status == status_Running) {
685
- Py_INCREF(PyExc_GeneratorExit);
643
+ struct Nuitka_ExceptionPreservationItem exception_state;
644
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, &exception_state, PyExc_GeneratorExit, NULL, NULL);
686
645
 
687
- PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, true, PyExc_GeneratorExit, NULL, NULL);
646
+ PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, true, &exception_state);
688
647
 
689
648
  if (unlikely(result)) {
690
649
  Py_DECREF(result);
@@ -707,7 +666,7 @@ static PyObject *Nuitka_Coroutine_close(struct Nuitka_CoroutineObject *coroutine
707
666
  if (unlikely(r == false)) {
708
667
  return NULL;
709
668
  } else {
710
- Py_INCREF(Py_None);
669
+ Py_INCREF_IMMORTAL(Py_None);
711
670
  return Py_None;
712
671
  }
713
672
  }
@@ -716,12 +675,11 @@ static PyObject *Nuitka_Coroutine_close(struct Nuitka_CoroutineObject *coroutine
716
675
  static bool Nuitka_AsyncgenAsend_Check(PyObject *object);
717
676
  struct Nuitka_AsyncgenAsendObject;
718
677
  static PyObject *_Nuitka_AsyncgenAsend_throw2(PyThreadState *tstate, struct Nuitka_AsyncgenAsendObject *asyncgen_asend,
719
- PyObject *exception_type, PyObject *exception_value,
720
- PyTracebackObject *exception_tb);
678
+ struct Nuitka_ExceptionPreservationItem *exception_state);
721
679
  #endif
722
680
 
723
- static bool _Nuitka_Generator_check_throw2(PyThreadState *tstate, PyObject **exception_type, PyObject **exception_value,
724
- PyTracebackObject **exception_tb);
681
+ static bool _Nuitka_Generator_check_throw(PyThreadState *tstate,
682
+ struct Nuitka_ExceptionPreservationItem *exception_state);
725
683
 
726
684
  // This function is called when yielding to a coroutine through "_Nuitka_YieldFromPassExceptionTo"
727
685
  // and potentially wrapper objects used by generators, or by the throw method itself.
@@ -730,98 +688,90 @@ static bool _Nuitka_Generator_check_throw2(PyThreadState *tstate, PyObject **exc
730
688
  // value of exception_type will not be NULL, but the actual exception will not necessarily
731
689
  // be normalized.
732
690
  static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_CoroutineObject *coroutine, bool closing,
733
- PyObject *exception_type, PyObject *exception_value,
734
- PyTracebackObject *exception_tb) {
691
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
735
692
  CHECK_OBJECT(coroutine);
736
693
  assert(Nuitka_Coroutine_Check((PyObject *)coroutine));
737
- CHECK_OBJECT(exception_type);
738
- CHECK_OBJECT_X(exception_value);
739
- CHECK_OBJECT_X(exception_tb);
694
+ CHECK_EXCEPTION_STATE(exception_state);
740
695
 
741
696
  #if _DEBUG_COROUTINE
742
697
  PRINT_COROUTINE_STATUS("Enter", coroutine);
743
698
  PRINT_COROUTINE_STRING("closing", closing ? "(closing) " : "(not closing) ");
744
- PRINT_COROUTINE_VALUE("yieldfrom", coroutine->m_yieldfrom);
745
- PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
699
+ PRINT_COROUTINE_VALUE("yield_from", coroutine->m_yield_from);
700
+ PRINT_EXCEPTION_STATE(exception_state);
746
701
  PRINT_NEW_LINE();
747
702
  #endif
748
703
 
749
- if (coroutine->m_yieldfrom != NULL) {
750
- if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_type, PyExc_GeneratorExit)) {
704
+ if (coroutine->m_yield_from != NULL) {
705
+ if (EXCEPTION_STATE_MATCH_BOOL_SINGLE(tstate, exception_state, PyExc_GeneratorExit)) {
751
706
  // Coroutines need to close the yield_from.
752
707
  Nuitka_MarkCoroutineAsRunning(coroutine);
753
- bool res = Nuitka_gen_close_iter(tstate, coroutine->m_yieldfrom);
708
+ bool res = Nuitka_gen_close_iter(tstate, coroutine->m_yield_from);
754
709
  Nuitka_MarkCoroutineAsNotRunning(coroutine);
755
710
 
756
711
  if (res == false) {
757
712
  // Release exception, we are done with it now and pick up the new one.
758
- Py_DECREF(exception_type);
759
- Py_XDECREF(exception_value);
760
- Py_XDECREF(exception_tb);
713
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
761
714
 
762
- FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
715
+ FETCH_ERROR_OCCURRED_STATE(tstate, exception_state);
763
716
  }
764
717
 
765
718
  // Transferred exception ownership to "_Nuitka_Coroutine_send".
766
- return _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_type, exception_value,
767
- exception_tb);
719
+ return _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_state);
768
720
  }
769
721
 
770
722
  PyObject *ret;
771
723
 
772
724
  #if _DEBUG_COROUTINE
773
725
  PRINT_COROUTINE_STATUS("Passing to yielded from", coroutine);
774
- PRINT_COROUTINE_VALUE("m_yieldfrom", coroutine->m_yieldfrom);
726
+ PRINT_COROUTINE_VALUE("m_yield_from", coroutine->m_yield_from);
775
727
  PRINT_NEW_LINE();
776
728
  #endif
777
729
 
778
- if (Nuitka_Generator_Check(coroutine->m_yieldfrom)) {
779
- struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)coroutine->m_yieldfrom);
730
+ if (Nuitka_Generator_Check(coroutine->m_yield_from)) {
731
+ struct Nuitka_GeneratorObject *gen = ((struct Nuitka_GeneratorObject *)coroutine->m_yield_from);
780
732
  // Transferred exception ownership to "_Nuitka_Generator_throw2".
781
733
  Nuitka_MarkCoroutineAsRunning(coroutine);
782
- ret = _Nuitka_Generator_throw2(tstate, gen, exception_type, exception_value, exception_tb);
734
+ ret = _Nuitka_Generator_throw2(tstate, gen, exception_state);
783
735
  Nuitka_MarkCoroutineAsNotRunning(coroutine);
784
- } else if (Nuitka_Coroutine_Check(coroutine->m_yieldfrom)) {
785
- struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)coroutine->m_yieldfrom);
736
+ } else if (Nuitka_Coroutine_Check(coroutine->m_yield_from)) {
737
+ struct Nuitka_CoroutineObject *coro = ((struct Nuitka_CoroutineObject *)coroutine->m_yield_from);
786
738
  // Transferred exception ownership to "_Nuitka_Coroutine_throw2".
787
739
  Nuitka_MarkCoroutineAsRunning(coroutine);
788
- ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_type, exception_value, exception_tb);
740
+ ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_state);
789
741
  Nuitka_MarkCoroutineAsNotRunning(coroutine);
790
742
  #if NUITKA_UNCOMPILED_THROW_INTEGRATION
791
- } else if (PyGen_CheckExact(coroutine->m_yieldfrom) || PyCoro_CheckExact(coroutine->m_yieldfrom)) {
792
- PyGenObject *gen = (PyGenObject *)coroutine->m_yieldfrom;
743
+ } else if (PyGen_CheckExact(coroutine->m_yield_from) || PyCoro_CheckExact(coroutine->m_yield_from)) {
744
+ PyGenObject *gen = (PyGenObject *)coroutine->m_yield_from;
793
745
 
794
746
  // Transferred exception ownership to "Nuitka_UncompiledGenerator_throw".
795
747
  Nuitka_MarkCoroutineAsRunning(coroutine);
796
- ret = Nuitka_UncompiledGenerator_throw(tstate, gen, 1, exception_type, exception_value, exception_tb);
748
+ ret = Nuitka_UncompiledGenerator_throw(tstate, gen, 1, exception_state);
797
749
  Nuitka_MarkCoroutineAsNotRunning(coroutine);
798
750
  #endif
799
- } else if (Nuitka_CoroutineWrapper_Check(coroutine->m_yieldfrom)) {
751
+ } else if (Nuitka_CoroutineWrapper_Check(coroutine->m_yield_from)) {
800
752
  struct Nuitka_CoroutineObject *coro =
801
- ((struct Nuitka_CoroutineWrapperObject *)coroutine->m_yieldfrom)->m_coroutine;
753
+ ((struct Nuitka_CoroutineWrapperObject *)coroutine->m_yield_from)->m_coroutine;
802
754
 
803
755
  // Transferred exception ownership to "_Nuitka_Coroutine_throw2".
804
756
  Nuitka_MarkCoroutineAsRunning(coroutine);
805
- ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_type, exception_value, exception_tb);
757
+ ret = _Nuitka_Coroutine_throw2(tstate, coro, true, exception_state);
806
758
  Nuitka_MarkCoroutineAsNotRunning(coroutine);
807
759
  #if PYTHON_VERSION >= 0x360
808
- } else if (Nuitka_AsyncgenAsend_Check(coroutine->m_yieldfrom)) {
760
+ } else if (Nuitka_AsyncgenAsend_Check(coroutine->m_yield_from)) {
809
761
  struct Nuitka_AsyncgenAsendObject *asyncgen_asend =
810
- ((struct Nuitka_AsyncgenAsendObject *)coroutine->m_yieldfrom);
762
+ ((struct Nuitka_AsyncgenAsendObject *)coroutine->m_yield_from);
811
763
 
812
764
  // Transferred exception ownership to "_Nuitka_AsyncgenAsend_throw2".
813
765
  Nuitka_MarkCoroutineAsRunning(coroutine);
814
- ret = _Nuitka_AsyncgenAsend_throw2(tstate, asyncgen_asend, exception_type, exception_value, exception_tb);
766
+ ret = _Nuitka_AsyncgenAsend_throw2(tstate, asyncgen_asend, exception_state);
815
767
  Nuitka_MarkCoroutineAsNotRunning(coroutine);
816
768
  #endif
817
769
  } else {
818
- PyObject *meth = PyObject_GetAttr(coroutine->m_yieldfrom, const_str_plain_throw);
770
+ PyObject *meth = PyObject_GetAttr(coroutine->m_yield_from, const_str_plain_throw);
819
771
  if (unlikely(meth == NULL)) {
820
772
  if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
821
773
  // Release exception, we are done with it now.
822
- Py_DECREF(exception_type);
823
- Py_XDECREF(exception_value);
824
- Py_XDECREF(exception_tb);
774
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
825
775
 
826
776
  return NULL;
827
777
  }
@@ -832,35 +782,33 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
832
782
  goto throw_here;
833
783
  }
834
784
 
835
- CHECK_OBJECT(exception_type);
785
+ CHECK_EXCEPTION_STATE(exception_state);
836
786
 
837
787
  #if 0
838
788
  // TODO: Add slow mode traces.
839
- PRINT_ITEM(coroutine->m_yieldfrom);
789
+ PRINT_ITEM(coroutine->m_yield_from);
840
790
  PRINT_NEW_LINE();
841
791
  #endif
842
792
  Nuitka_MarkCoroutineAsRunning(coroutine);
843
- ret = PyObject_CallFunctionObjArgs(meth, exception_type, exception_value, exception_tb, NULL);
793
+ ret = Nuitka_CallGeneratorThrowMethod(meth, exception_state);
844
794
  Nuitka_MarkCoroutineAsNotRunning(coroutine);
845
795
 
846
796
  Py_DECREF(meth);
847
797
 
848
798
  // Release exception, we are done with it now.
849
- Py_DECREF(exception_type);
850
- Py_XDECREF(exception_value);
851
- Py_XDECREF(exception_tb);
799
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
852
800
  }
853
801
 
854
802
  if (unlikely(ret == NULL)) {
855
803
  // Return value or exception, not to continue with yielding from.
856
- if (coroutine->m_yieldfrom != NULL) {
857
- CHECK_OBJECT(coroutine->m_yieldfrom);
804
+ if (coroutine->m_yield_from != NULL) {
805
+ CHECK_OBJECT(coroutine->m_yield_from);
858
806
  #if _DEBUG_COROUTINE
859
807
  PRINT_COROUTINE_STATUS("Null return, yield from removal:", coroutine);
860
- PRINT_COROUTINE_VALUE("yieldfrom", coroutine->m_yieldfrom);
808
+ PRINT_COROUTINE_VALUE("yield_from", coroutine->m_yield_from);
861
809
  #endif
862
- Py_DECREF(coroutine->m_yieldfrom);
863
- coroutine->m_yieldfrom = NULL;
810
+ Py_DECREF(coroutine->m_yield_from);
811
+ coroutine->m_yield_from = NULL;
864
812
  }
865
813
 
866
814
  PyObject *val;
@@ -873,15 +821,22 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
873
821
  PRINT_NEW_LINE();
874
822
  #endif
875
823
 
824
+ struct Nuitka_ExceptionPreservationItem no_exception_state;
825
+ INIT_ERROR_OCCURRED_STATE(&no_exception_state);
826
+
876
827
  // The ownership of val is transferred.
877
- ret = _Nuitka_Coroutine_send(tstate, coroutine, val, false, NULL, NULL, NULL);
828
+ ret = _Nuitka_Coroutine_send(tstate, coroutine, val, false, &no_exception_state);
878
829
  } else {
879
830
  #if _DEBUG_COROUTINE
880
831
  PRINT_COROUTINE_STATUS("Sending exception value into ourselves", coroutine);
881
832
  PRINT_CURRENT_EXCEPTION();
882
833
  PRINT_NEW_LINE();
883
834
  #endif
884
- ret = _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, NULL, NULL, NULL);
835
+
836
+ struct Nuitka_ExceptionPreservationItem no_exception_state;
837
+ INIT_ERROR_OCCURRED_STATE(&no_exception_state);
838
+
839
+ ret = _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, &no_exception_state);
885
840
  }
886
841
 
887
842
  #if _DEBUG_COROUTINE
@@ -907,15 +862,14 @@ static PyObject *_Nuitka_Coroutine_throw2(PyThreadState *tstate, struct Nuitka_C
907
862
  throw_here:
908
863
  // We continue to have exception ownership here.
909
864
 
910
- if (unlikely(_Nuitka_Generator_check_throw2(tstate, &exception_type, &exception_value, &exception_tb) == false)) {
911
- // Exception was released by _Nuitka_Generator_check_throw2 already.
865
+ if (unlikely(_Nuitka_Generator_check_throw(tstate, exception_state) == false)) {
866
+ // Exception was released by _Nuitka_Generator_check_throw already.
912
867
  return NULL;
913
868
  }
914
869
 
915
870
  if (coroutine->m_status == status_Running) {
916
871
  // Transferred exception ownership to "_Nuitka_Coroutine_send".
917
- PyObject *result =
918
- _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_type, exception_value, exception_tb);
872
+ PyObject *result = _Nuitka_Coroutine_send(tstate, coroutine, NULL, false, exception_state);
919
873
  return result;
920
874
  } else if (coroutine->m_status == status_Finished) {
921
875
 
@@ -937,30 +891,31 @@ throw_here:
937
891
  #endif
938
892
  );
939
893
 
940
- Py_DECREF(exception_type);
941
- Py_XDECREF(exception_value);
942
- Py_XDECREF(exception_tb);
894
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
943
895
 
944
896
  return NULL;
945
897
  }
946
898
  #endif
947
899
  // Passing exception to publication.
948
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
900
+ RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
949
901
 
950
902
  return NULL;
951
903
  } else {
904
+ PyTracebackObject *exception_tb = GET_EXCEPTION_STATE_TRACEBACK(exception_state);
905
+
952
906
  if (exception_tb == NULL) {
953
907
  // TODO: Our compiled objects really need a way to store common
954
908
  // stuff in a "shared" part across all instances, and outside of
955
909
  // run time, so we could reuse this.
956
910
  struct Nuitka_FrameObject *frame =
957
911
  MAKE_FUNCTION_FRAME(tstate, coroutine->m_code_object, coroutine->m_module, 0);
958
- exception_tb = MAKE_TRACEBACK(frame, coroutine->m_code_object->co_firstlineno);
912
+ SET_EXCEPTION_STATE_TRACEBACK(exception_state,
913
+ MAKE_TRACEBACK(frame, coroutine->m_code_object->co_firstlineno));
959
914
  Py_DECREF(frame);
960
915
  }
961
916
 
962
917
  // Passing exception to publication.
963
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
918
+ RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
964
919
 
965
920
  #if _DEBUG_COROUTINE
966
921
  PRINT_COROUTINE_STATUS("Finishing from exception", coroutine);
@@ -994,14 +949,16 @@ static PyObject *Nuitka_Coroutine_throw(struct Nuitka_CoroutineObject *coroutine
994
949
  PRINT_NEW_LINE();
995
950
  #endif
996
951
 
952
+ PyThreadState *tstate = PyThreadState_GET();
953
+
997
954
  // Handing ownership of exception over, we need not release it ourselves
998
- Py_INCREF(exception_type);
999
- Py_XINCREF(exception_value);
1000
- Py_XINCREF(exception_tb);
955
+ struct Nuitka_ExceptionPreservationItem exception_state;
956
+ if (_Nuitka_Generator_make_throw_exception_state(tstate, &exception_state, exception_type, exception_value,
957
+ exception_tb) == false) {
958
+ return NULL;
959
+ }
1001
960
 
1002
- PyThreadState *tstate = PyThreadState_GET();
1003
- PyObject *result =
1004
- _Nuitka_Coroutine_throw2(tstate, coroutine, false, exception_type, exception_value, exception_tb);
961
+ PyObject *result = _Nuitka_Coroutine_throw2(tstate, coroutine, false, &exception_state);
1005
962
 
1006
963
  if (result == NULL) {
1007
964
  if (HAS_ERROR_OCCURRED(tstate) == false) {
@@ -1031,7 +988,7 @@ static long Nuitka_Coroutine_tp_traverse(struct Nuitka_CoroutineObject *coroutin
1031
988
  CHECK_OBJECT(coroutine);
1032
989
 
1033
990
  // TODO: Identify the impact of not visiting owned objects like module
1034
- Py_VISIT(coroutine->m_yieldfrom);
991
+ Py_VISIT(coroutine->m_yield_from);
1035
992
 
1036
993
  for (Py_ssize_t i = 0; i < coroutine->m_closure_given; i++) {
1037
994
  Py_VISIT(coroutine->m_closure[i]);
@@ -1085,7 +1042,11 @@ static PySendResult _Nuitka_Coroutine_am_send(struct Nuitka_CoroutineObject *cor
1085
1042
 
1086
1043
  // We need to transfer ownership of the sent value.
1087
1044
  Py_INCREF(arg);
1088
- PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, arg, false, NULL, NULL, NULL, result);
1045
+
1046
+ struct Nuitka_ExceptionPreservationItem exception_state;
1047
+ INIT_ERROR_OCCURRED_STATE(&exception_state);
1048
+
1049
+ PySendResult res = _Nuitka_Coroutine_sendR(tstate, coroutine, arg, false, &exception_state, result);
1089
1050
 
1090
1051
  #if _DEBUG_COROUTINE
1091
1052
  PRINT_COROUTINE_STATUS("Leave", coroutine);
@@ -1103,9 +1064,8 @@ static void Nuitka_Coroutine_tp_finalize(struct Nuitka_CoroutineObject *coroutin
1103
1064
 
1104
1065
  PyThreadState *tstate = PyThreadState_GET();
1105
1066
 
1106
- PyObject *save_exception_type, *save_exception_value;
1107
- PyTracebackObject *save_exception_tb;
1108
- FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
1067
+ struct Nuitka_ExceptionPreservationItem saved_exception_state;
1068
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1109
1069
 
1110
1070
  bool close_result = _Nuitka_Coroutine_close(tstate, coroutine);
1111
1071
 
@@ -1114,7 +1074,7 @@ static void Nuitka_Coroutine_tp_finalize(struct Nuitka_CoroutineObject *coroutin
1114
1074
  }
1115
1075
 
1116
1076
  /* Restore the saved exception if any. */
1117
- RESTORE_ERROR_OCCURRED(tstate, save_exception_type, save_exception_value, save_exception_tb);
1077
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1118
1078
  }
1119
1079
 
1120
1080
  #define MAX_COROUTINE_FREE_LIST_COUNT 100
@@ -1134,9 +1094,8 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
1134
1094
  PyThreadState *tstate = PyThreadState_GET();
1135
1095
 
1136
1096
  // Save the current exception, if any, we must preserve it.
1137
- PyObject *save_exception_type, *save_exception_value;
1138
- PyTracebackObject *save_exception_tb;
1139
- FETCH_ERROR_OCCURRED(tstate, &save_exception_type, &save_exception_value, &save_exception_tb);
1097
+ struct Nuitka_ExceptionPreservationItem saved_exception_state;
1098
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1140
1099
 
1141
1100
  #if _DEBUG_COROUTINE
1142
1101
  PRINT_COROUTINE_STATUS("Enter", coroutine);
@@ -1154,7 +1113,7 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
1154
1113
  // Allow for above code to resurrect the coroutine.
1155
1114
  Py_SET_REFCNT(coroutine, Py_REFCNT(coroutine) - 1);
1156
1115
  if (Py_REFCNT(coroutine) >= 1) {
1157
- RESTORE_ERROR_OCCURRED(tstate, save_exception_type, save_exception_value, save_exception_tb);
1116
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1158
1117
  return;
1159
1118
  }
1160
1119
 
@@ -1182,7 +1141,7 @@ static void Nuitka_Coroutine_tp_dealloc(struct Nuitka_CoroutineObject *coroutine
1182
1141
  /* Put the object into free list or release to GC */
1183
1142
  releaseToFreeList(free_list_coros, coroutine, MAX_COROUTINE_FREE_LIST_COUNT);
1184
1143
 
1185
- RESTORE_ERROR_OCCURRED(tstate, save_exception_type, save_exception_value, save_exception_tb);
1144
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1186
1145
  }
1187
1146
 
1188
1147
  // TODO: Set "__doc__" automatically for method clones of compiled types from
@@ -1194,7 +1153,7 @@ static PyMethodDef Nuitka_Coroutine_methods[] = {{"send", (PyCFunction)Nuitka_Co
1194
1153
 
1195
1154
  // TODO: Set "__doc__" automatically for method clones of compiled types from
1196
1155
  // the documentation of built-in original type.
1197
- static PyGetSetDef Nuitka_Coroutine_getsetlist[] = {
1156
+ static PyGetSetDef Nuitka_Coroutine_tp_getset[] = {
1198
1157
  {(char *)"__name__", (getter)Nuitka_Coroutine_get_name, (setter)Nuitka_Coroutine_set_name, NULL},
1199
1158
  {(char *)"__qualname__", (getter)Nuitka_Coroutine_get_qualname, (setter)Nuitka_Coroutine_set_qualname, NULL},
1200
1159
  {(char *)"cr_await", (getter)Nuitka_Coroutine_get_cr_await, (setter)NULL, NULL},
@@ -1251,7 +1210,7 @@ PyTypeObject Nuitka_Coroutine_Type = {
1251
1210
  0, // tp_iternext
1252
1211
  Nuitka_Coroutine_methods, // tp_methods
1253
1212
  Nuitka_Coroutine_members, // tp_members
1254
- Nuitka_Coroutine_getsetlist, // tp_getset
1213
+ Nuitka_Coroutine_tp_getset, // tp_getset
1255
1214
  0, // tp_base
1256
1215
  0, // tp_dict
1257
1216
  0, // tp_descr_get
@@ -1390,12 +1349,15 @@ static int Nuitka_PyInterpreterFrame_GetLine(_PyInterpreterFrame *frame) {
1390
1349
  // we have the line number stored.
1391
1350
 
1392
1351
  int addr = _PyInterpreterFrame_LASTI(frame) * sizeof(_Py_CODEUNIT);
1352
+ #if PYTHON_VERSION < 0x3d0
1393
1353
  return PyCode_Addr2Line(frame->f_code, addr);
1354
+ #else
1355
+ return PyCode_Addr2Line((PyCodeObject *)frame->f_executable, addr);
1356
+ #endif
1394
1357
  }
1395
1358
 
1396
- static PyObject *computeCoroutineOrigin(int origin_depth) {
1397
- PyThreadState *tstate = _PyThreadState_GET();
1398
- _PyInterpreterFrame *current_frame = tstate->cframe->current_frame;
1359
+ static PyObject *computeCoroutineOrigin(PyThreadState *tstate, int origin_depth) {
1360
+ _PyInterpreterFrame *current_frame = CURRENT_TSTATE_INTERPRETER_FRAME(tstate);
1399
1361
 
1400
1362
  // Create result tuple with correct size.
1401
1363
  int frame_count = 0;
@@ -1404,11 +1366,11 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
1404
1366
  frame = frame->previous;
1405
1367
  frame_count += 1;
1406
1368
  }
1407
- PyObject *cr_origin = MAKE_TUPLE_EMPTY_VAR(frame_count);
1369
+ PyObject *cr_origin = MAKE_TUPLE_EMPTY_VAR(tstate, frame_count);
1408
1370
 
1409
1371
  frame = current_frame;
1410
1372
  for (int i = 0; i < frame_count; i++) {
1411
- PyCodeObject *code = frame->f_code;
1373
+ PyCodeObject *code = Nuitka_InterpreterFrame_GetCodeObject(frame);
1412
1374
 
1413
1375
  int line = Nuitka_PyInterpreterFrame_GetLine(frame);
1414
1376
 
@@ -1423,7 +1385,7 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
1423
1385
  }
1424
1386
 
1425
1387
  #elif PYTHON_VERSION >= 0x370
1426
- static PyObject *computeCoroutineOrigin(int origin_depth) {
1388
+ static PyObject *computeCoroutineOrigin(PyThreadState *tstate, int origin_depth) {
1427
1389
  PyFrameObject *frame = PyEval_GetFrame();
1428
1390
 
1429
1391
  int frame_count = 0;
@@ -1433,13 +1395,13 @@ static PyObject *computeCoroutineOrigin(int origin_depth) {
1433
1395
  frame_count += 1;
1434
1396
  }
1435
1397
 
1436
- PyObject *cr_origin = MAKE_TUPLE_EMPTY(frame_count);
1398
+ PyObject *cr_origin = MAKE_TUPLE_EMPTY(tstate, frame_count);
1437
1399
 
1438
1400
  frame = PyEval_GetFrame();
1439
1401
 
1440
1402
  for (int i = 0; i < frame_count; i++) {
1441
- PyObject *frame_info =
1442
- Py_BuildValue("OiO", frame->f_code->co_filename, PyFrame_GetLineNumber(frame), frame->f_code->co_name);
1403
+ PyObject *frame_info = Py_BuildValue("OiO", Nuitka_Frame_GetCodeObject(frame)->co_filename,
1404
+ PyFrame_GetLineNumber(frame), frame->f_code->co_name);
1443
1405
 
1444
1406
  assert(frame_info);
1445
1407
 
@@ -1489,7 +1451,7 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
1489
1451
  result->m_qualname = qualname;
1490
1452
  Py_INCREF(qualname);
1491
1453
 
1492
- result->m_yieldfrom = NULL;
1454
+ result->m_yield_from = NULL;
1493
1455
 
1494
1456
  memcpy(&result->m_closure[0], closure, closure_given * sizeof(struct Nuitka_CellObject *));
1495
1457
  result->m_closure_given = closure_given;
@@ -1515,7 +1477,7 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
1515
1477
  if (origin_depth == 0) {
1516
1478
  result->m_origin = NULL;
1517
1479
  } else {
1518
- result->m_origin = computeCoroutineOrigin(origin_depth);
1480
+ result->m_origin = computeCoroutineOrigin(tstate, origin_depth);
1519
1481
  }
1520
1482
  #endif
1521
1483
 
@@ -1530,9 +1492,21 @@ PyObject *Nuitka_Coroutine_New(PyThreadState *tstate, coroutine_code code, PyObj
1530
1492
  return (PyObject *)result;
1531
1493
  }
1532
1494
 
1495
+ static inline PyCodeObject *_Nuitka_PyGen_GetCode(PyGenObject *gen) {
1496
+ #if PYTHON_VERSION < 0x3c0
1497
+ return (PyCodeObject *)gen->gi_code;
1498
+ #elif PYTHON_VERSION < 0x3d0
1499
+ _PyInterpreterFrame *frame = (_PyInterpreterFrame *)(gen->gi_iframe);
1500
+ return frame->f_code;
1501
+ #else
1502
+ _PyInterpreterFrame *frame = (_PyInterpreterFrame *)(gen->gi_iframe);
1503
+ return (PyCodeObject *)frame->f_executable;
1504
+ #endif
1505
+ }
1506
+
1533
1507
  static int gen_is_coroutine(PyObject *object) {
1534
1508
  if (PyGen_CheckExact(object)) {
1535
- PyCodeObject *code = (PyCodeObject *)((PyGenObject *)object)->gi_code;
1509
+ PyCodeObject *code = _Nuitka_PyGen_GetCode((PyGenObject *)object);
1536
1510
 
1537
1511
  if (code->co_flags & CO_ITERABLE_COROUTINE) {
1538
1512
  return 1;
@@ -1679,14 +1653,18 @@ static PyObject *Nuitka_AIterWrapper_iternext(struct Nuitka_AIterWrapper *aw) {
1679
1653
  SET_CURRENT_EXCEPTION_TYPE0_VALUE0(tstate, PyExc_StopIteration, aw->aw_aiter);
1680
1654
  #else
1681
1655
  if (!PyTuple_Check(aw->aw_aiter) && !PyExceptionInstance_Check(aw->aw_aiter)) {
1682
- SET_CURRENT_EXCEPTION_TYPE0_VALUE0(tstate, PyExc_StopIteration, aw->aw_aiter);
1656
+ Py_INCREF(PyExc_StopIteration);
1657
+ Py_INCREF(aw->aw_aiter);
1658
+
1659
+ RESTORE_ERROR_OCCURRED(tstate, PyExc_StopIteration, aw->aw_aiter, NULL);
1683
1660
  } else {
1684
- PyObject *result = PyObject_CallFunctionObjArgs(PyExc_StopIteration, aw->aw_aiter, NULL);
1661
+ PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, PyExc_StopIteration, aw->aw_aiter);
1685
1662
  if (unlikely(result == NULL)) {
1686
1663
  return NULL;
1687
1664
  }
1688
1665
 
1689
- SET_CURRENT_EXCEPTION_TYPE0_VALUE1(tstate, PyExc_StopIteration, result);
1666
+ Py_INCREF(PyExc_StopIteration);
1667
+ RESTORE_ERROR_OCCURRED(tstate, PyExc_StopIteration, result, NULL);
1690
1668
  }
1691
1669
  #endif
1692
1670
 
@@ -1953,3 +1931,18 @@ static void _initCompiledCoroutineTypes(void) {
1953
1931
  #if PYTHON_VERSION >= 0x360
1954
1932
  #include "CompiledAsyncgenType.c"
1955
1933
  #endif
1934
+
1935
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1936
+ // integrates with CPython, but also works on its own.
1937
+ //
1938
+ // Licensed under the Apache License, Version 2.0 (the "License");
1939
+ // you may not use this file except in compliance with the License.
1940
+ // You may obtain a copy of the License at
1941
+ //
1942
+ // http://www.apache.org/licenses/LICENSE-2.0
1943
+ //
1944
+ // Unless required by applicable law or agreed to in writing, software
1945
+ // distributed under the License is distributed on an "AS IS" BASIS,
1946
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1947
+ // See the License for the specific language governing permissions and
1948
+ // limitations under the License.