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
  /** Uncompiled generator integration
19
4
  *
20
5
  * This is for use in compiled generator, coroutine, async types. The file in
@@ -34,9 +19,39 @@
34
19
  #undef Py_BUILD_CORE
35
20
  #endif
36
21
 
22
+ #if PYTHON_VERSION >= 0x300
23
+ static PyObject *Nuitka_CallGeneratorThrowMethod(PyObject *throw_method,
24
+ struct Nuitka_ExceptionPreservationItem *exception_state);
25
+ #endif
26
+
27
+ #if PYTHON_VERSION >= 0x300
28
+ static PyBaseExceptionObject *Nuitka_BaseExceptionSingleArg_new(PyThreadState *tstate, PyTypeObject *type,
29
+ PyObject *arg) {
30
+ PyBaseExceptionObject *result = (PyBaseExceptionObject *)type->tp_alloc(type, 0);
31
+
32
+ result->dict = NULL;
33
+ result->traceback = NULL;
34
+ result->cause = NULL;
35
+ result->context = NULL;
36
+ result->suppress_context = 0;
37
+
38
+ result->args = MAKE_TUPLE1(tstate, arg);
39
+
40
+ return result;
41
+ }
42
+
43
+ static PyObject *Nuitka_CreateStopIteration(PyThreadState *tstate, PyObject *value) {
44
+ PyStopIterationObject *result =
45
+ (PyStopIterationObject *)Nuitka_BaseExceptionSingleArg_new(tstate, (PyTypeObject *)PyExc_StopIteration, value);
46
+
47
+ result->value = value;
48
+ Py_INCREF(value);
49
+
50
+ return (PyObject *)result;
51
+ }
52
+
37
53
  // This function takes no reference to value, and publishes a StopIteration
38
54
  // exception with it.
39
- #if PYTHON_VERSION >= 0x300
40
55
  static void Nuitka_SetStopIterationValue(PyThreadState *tstate, PyObject *value) {
41
56
  CHECK_OBJECT(value);
42
57
 
@@ -47,8 +62,11 @@ static void Nuitka_SetStopIterationValue(PyThreadState *tstate, PyObject *value)
47
62
  return;
48
63
  }
49
64
 
50
- Py_INCREF(PyExc_StopIteration);
51
- RESTORE_ERROR_OCCURRED(tstate, PyExc_StopIteration, stop_value, NULL);
65
+ SET_CURRENT_EXCEPTION_TYPE0_VALUE1(tstate, PyExc_StopIteration, stop_value);
66
+ #elif PYTHON_VERSION >= 0x3c0
67
+ struct Nuitka_ExceptionPreservationItem exception_state = {Nuitka_CreateStopIteration(tstate, value)};
68
+
69
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
52
70
  #else
53
71
  if (likely(!PyTuple_Check(value) && !PyExceptionInstance_Check(value))) {
54
72
  Py_INCREF(PyExc_StopIteration);
@@ -56,15 +74,10 @@ static void Nuitka_SetStopIterationValue(PyThreadState *tstate, PyObject *value)
56
74
 
57
75
  RESTORE_ERROR_OCCURRED(tstate, PyExc_StopIteration, value, NULL);
58
76
  } else {
59
- PyObject *stop_value = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, PyExc_StopIteration, value);
77
+ struct Nuitka_ExceptionPreservationItem exception_state = {Py_NewRef(PyExc_StopIteration),
78
+ Nuitka_CreateStopIteration(tstate, value)};
60
79
 
61
- if (unlikely(stop_value == NULL)) {
62
- return;
63
- }
64
-
65
- Py_INCREF(PyExc_StopIteration);
66
-
67
- RESTORE_ERROR_OCCURRED(tstate, PyExc_StopIteration, stop_value, NULL);
80
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
68
81
  }
69
82
  #endif
70
83
  }
@@ -115,45 +128,10 @@ static inline bool Nuitka_PyFrameHasCompleted(PyFrameObject *const frame) {
115
128
  // what it does. It's unrelated to compiled generators, and used from coroutines
116
129
  // and asyncgen to interact with them.
117
130
  static PyObject *Nuitka_PyGen_Send(PyThreadState *tstate, PyGenObject *gen, PyObject *arg) {
118
- #if defined(PY_NOGIL)
119
- PyObject *res;
120
-
121
- if (gen->status == GEN_CREATED) {
122
- if (unlikely(arg != Py_None)) {
123
- char const *msg = "generator raised StopIteration";
124
- if (PyCoro_CheckExact(gen)) {
125
- msg = "coroutine raised StopIteration";
126
- } else if (PyAsyncGen_CheckExact(gen)) {
127
- msg = "async generator raised StopIteration";
128
- }
129
-
130
- _PyErr_FormatFromCause(PyExc_RuntimeError, "%s", msg);
131
- return NULL;
132
- }
133
- arg = NULL;
134
- }
135
-
136
- res = PyEval2_EvalGen(gen, arg);
137
-
138
- if (likely(res != NULL)) {
139
- assert(gen->status == GEN_SUSPENDED);
140
- return res;
141
- }
142
-
143
- if (likely(gen->return_value == Py_None)) {
144
- gen->return_value = NULL;
145
- SET_CURRENT_EXCEPTION_TYPE0(tstate,
146
- PyAsyncGen_CheckExact(gen) ? PyExc_StopAsyncIteration : PyExc_StopIteration);
147
- return NULL;
148
- } else if (gen->return_value != NULL) {
149
- Nuitka_SetStopIterationValue(tstate, gen->return_value);
150
- return NULL;
151
- } else {
152
- return gen_wrap_exception(gen);
153
- }
154
- #elif PYTHON_VERSION >= 0x3a0
131
+ #if PYTHON_VERSION >= 0x3a0
155
132
  PyObject *result;
156
133
 
134
+ // TODO: Avoid API call for performance.
157
135
  PySendResult res = PyIter_Send((PyObject *)gen, arg, &result);
158
136
 
159
137
  switch (res) {
@@ -271,10 +249,11 @@ static PyObject *Nuitka_PyGen_Send(PyThreadState *tstate, PyGenObject *gen, PyOb
271
249
  if (result == Py_None) {
272
250
  SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
273
251
  } else {
274
- PyObject *e = PyObject_CallFunctionObjArgs(PyExc_StopIteration, result, NULL);
252
+ PyObject *e = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, (PyObject *)PyExc_StopIteration, result);
275
253
 
276
- if (e != NULL) {
277
- SET_CURRENT_EXCEPTION_TYPE0_VALUE1(tstate, PyExc_StopIteration, e);
254
+ if (likely(e != NULL)) {
255
+ Py_INCREF(PyExc_StopIteration);
256
+ RESTORE_ERROR_OCCURRED(tstate, PyExc_StopIteration, e, NULL);
278
257
  }
279
258
  }
280
259
 
@@ -299,7 +278,7 @@ static PyObject *Nuitka_PyGen_Send(PyThreadState *tstate, PyGenObject *gen, PyOb
299
278
  #endif
300
279
 
301
280
  // Now release frame.
302
- #if PYTHON_VERSION >= 0x340
281
+ #if PYTHON_VERSION >= 0x300
303
282
  gen->gi_frame->f_gen = NULL;
304
283
  #endif
305
284
  gen->gi_frame = NULL;
@@ -313,7 +292,7 @@ static PyObject *Nuitka_PyGen_Send(PyThreadState *tstate, PyGenObject *gen, PyOb
313
292
  assert(result == Py_None || !PyAsyncGen_CheckExact(gen));
314
293
 
315
294
  if (result == Py_None && !PyAsyncGen_CheckExact(gen)) {
316
- Py_DECREF(result);
295
+ Py_DECREF_IMMORTAL(result);
317
296
  result = NULL;
318
297
  }
319
298
  } else {
@@ -348,26 +327,20 @@ static PyObject *Nuitka_PyGen_Send(PyThreadState *tstate, PyGenObject *gen, PyOb
348
327
 
349
328
  #endif
350
329
 
351
- // TODO: Disabled for NOGIL until it becomes more ready.
330
+ // TODO: Disabled for Python 3.13 until it becomes more ready.
352
331
  // Not done for earlier versions yet, indicate usability for compiled
353
332
  // generators, but it seems that mostly coroutines need it anyway, so the
354
333
  // benefit would be only for performance and not by a lot.
355
- #if PYTHON_VERSION >= 0x340 && !defined(PY_NOGIL)
334
+ #if PYTHON_VERSION >= 0x300 && PYTHON_VERSION < 0x3d0
356
335
  #define NUITKA_UNCOMPILED_THROW_INTEGRATION 1
357
336
  #endif
358
337
 
359
- // TODO: Disabled for Python3.12 until release of it
360
- #if PYTHON_VERSION >= 0x3c0
361
- #undef NUITKA_UNCOMPILED_THROW_INTEGRATION
362
- #define NUITKA_UNCOMPILED_THROW_INTEGRATION 0
363
- #endif
364
-
365
338
  #if NUITKA_UNCOMPILED_THROW_INTEGRATION
366
339
 
367
- static bool _Nuitka_Generator_check_throw2(PyThreadState *tstate, PyObject **exception_type, PyObject **exception_value,
368
- PyTracebackObject **exception_tb);
340
+ static bool _Nuitka_Generator_check_throw(PyThreadState *tstate,
341
+ struct Nuitka_ExceptionPreservationItem *exception_state);
369
342
 
370
- #if PYTHON_VERSION < 0x3B0
343
+ #if PYTHON_VERSION < 0x3b0
371
344
  #include <opcode.h>
372
345
  // Clashes with our helper names.
373
346
  #undef CALL_FUNCTION
@@ -386,11 +359,9 @@ static int Nuitka_PyGen_gen_close_iter(PyThreadState *tstate, PyObject *yf);
386
359
  // spell-checker: ignore classderef,getattribute,precall
387
360
  const uint8_t Nuitka_PyOpcode_Deopt[256] = {
388
361
  #if PYTHON_VERSION >= 0x3c0
389
- [ASYNC_GEN_WRAP] = ASYNC_GEN_WRAP,
390
362
  [BEFORE_ASYNC_WITH] = BEFORE_ASYNC_WITH,
391
363
  [BEFORE_WITH] = BEFORE_WITH,
392
364
  [BINARY_OP] = BINARY_OP,
393
- [BINARY_OP_ADAPTIVE] = BINARY_OP,
394
365
  [BINARY_OP_ADD_FLOAT] = BINARY_OP,
395
366
  [BINARY_OP_ADD_INT] = BINARY_OP,
396
367
  [BINARY_OP_ADD_UNICODE] = BINARY_OP,
@@ -401,7 +372,6 @@ const uint8_t Nuitka_PyOpcode_Deopt[256] = {
401
372
  [BINARY_OP_SUBTRACT_INT] = BINARY_OP,
402
373
  [BINARY_SLICE] = BINARY_SLICE,
403
374
  [BINARY_SUBSCR] = BINARY_SUBSCR,
404
- [BINARY_SUBSCR_ADAPTIVE] = BINARY_SUBSCR,
405
375
  [BINARY_SUBSCR_DICT] = BINARY_SUBSCR,
406
376
  [BINARY_SUBSCR_GETITEM] = BINARY_SUBSCR,
407
377
  [BINARY_SUBSCR_LIST_INT] = BINARY_SUBSCR,
@@ -415,11 +385,12 @@ const uint8_t Nuitka_PyOpcode_Deopt[256] = {
415
385
  [BUILD_TUPLE] = BUILD_TUPLE,
416
386
  [CACHE] = CACHE,
417
387
  [CALL] = CALL,
418
- [CALL_ADAPTIVE] = CALL,
419
388
  [CALL_BOUND_METHOD_EXACT_ARGS] = CALL,
420
389
  [CALL_BUILTIN_CLASS] = CALL,
421
390
  [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL,
422
391
  [CALL_FUNCTION_EX] = CALL_FUNCTION_EX,
392
+ [CALL_INTRINSIC_1] = CALL_INTRINSIC_1,
393
+ [CALL_INTRINSIC_2] = CALL_INTRINSIC_2,
423
394
  [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL,
424
395
  [CALL_NO_KW_BUILTIN_FAST] = CALL,
425
396
  [CALL_NO_KW_BUILTIN_O] = CALL,
@@ -438,10 +409,9 @@ const uint8_t Nuitka_PyOpcode_Deopt[256] = {
438
409
  [CHECK_EXC_MATCH] = CHECK_EXC_MATCH,
439
410
  [CLEANUP_THROW] = CLEANUP_THROW,
440
411
  [COMPARE_OP] = COMPARE_OP,
441
- [COMPARE_OP_ADAPTIVE] = COMPARE_OP,
442
- [COMPARE_OP_FLOAT_JUMP] = COMPARE_OP,
443
- [COMPARE_OP_INT_JUMP] = COMPARE_OP,
444
- [COMPARE_OP_STR_JUMP] = COMPARE_OP,
412
+ [COMPARE_OP_FLOAT] = COMPARE_OP,
413
+ [COMPARE_OP_INT] = COMPARE_OP,
414
+ [COMPARE_OP_STR] = COMPARE_OP,
445
415
  [CONTAINS_OP] = CONTAINS_OP,
446
416
  [COPY] = COPY,
447
417
  [COPY_FREE_VARS] = COPY_FREE_VARS,
@@ -454,13 +424,15 @@ const uint8_t Nuitka_PyOpcode_Deopt[256] = {
454
424
  [DICT_MERGE] = DICT_MERGE,
455
425
  [DICT_UPDATE] = DICT_UPDATE,
456
426
  [END_ASYNC_FOR] = END_ASYNC_FOR,
427
+ [END_FOR] = END_FOR,
428
+ [END_SEND] = END_SEND,
457
429
  [EXTENDED_ARG] = EXTENDED_ARG,
458
- [EXTENDED_ARG_QUICK] = EXTENDED_ARG,
459
430
  [FORMAT_VALUE] = FORMAT_VALUE,
460
431
  [FOR_ITER] = FOR_ITER,
461
- [FOR_ITER_ADAPTIVE] = FOR_ITER,
432
+ [FOR_ITER_GEN] = FOR_ITER,
462
433
  [FOR_ITER_LIST] = FOR_ITER,
463
434
  [FOR_ITER_RANGE] = FOR_ITER,
435
+ [FOR_ITER_TUPLE] = FOR_ITER,
464
436
  [GET_AITER] = GET_AITER,
465
437
  [GET_ANEXT] = GET_ANEXT,
466
438
  [GET_AWAITABLE] = GET_AWAITABLE,
@@ -469,47 +441,64 @@ const uint8_t Nuitka_PyOpcode_Deopt[256] = {
469
441
  [GET_YIELD_FROM_ITER] = GET_YIELD_FROM_ITER,
470
442
  [IMPORT_FROM] = IMPORT_FROM,
471
443
  [IMPORT_NAME] = IMPORT_NAME,
472
- [IMPORT_STAR] = IMPORT_STAR,
444
+ [INSTRUMENTED_CALL] = INSTRUMENTED_CALL,
445
+ [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX,
446
+ [INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR,
447
+ [INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND,
448
+ [INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER,
449
+ [INSTRUMENTED_INSTRUCTION] = INSTRUMENTED_INSTRUCTION,
450
+ [INSTRUMENTED_JUMP_BACKWARD] = INSTRUMENTED_JUMP_BACKWARD,
451
+ [INSTRUMENTED_JUMP_FORWARD] = INSTRUMENTED_JUMP_FORWARD,
452
+ [INSTRUMENTED_LINE] = INSTRUMENTED_LINE,
453
+ [INSTRUMENTED_LOAD_SUPER_ATTR] = INSTRUMENTED_LOAD_SUPER_ATTR,
454
+ [INSTRUMENTED_POP_JUMP_IF_FALSE] = INSTRUMENTED_POP_JUMP_IF_FALSE,
455
+ [INSTRUMENTED_POP_JUMP_IF_NONE] = INSTRUMENTED_POP_JUMP_IF_NONE,
456
+ [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
457
+ [INSTRUMENTED_POP_JUMP_IF_TRUE] = INSTRUMENTED_POP_JUMP_IF_TRUE,
458
+ [INSTRUMENTED_RESUME] = INSTRUMENTED_RESUME,
459
+ [INSTRUMENTED_RETURN_CONST] = INSTRUMENTED_RETURN_CONST,
460
+ [INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE,
461
+ [INSTRUMENTED_YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE,
462
+ [INTERPRETER_EXIT] = INTERPRETER_EXIT,
473
463
  [IS_OP] = IS_OP,
474
464
  [JUMP_BACKWARD] = JUMP_BACKWARD,
475
465
  [JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT,
476
- [JUMP_BACKWARD_QUICK] = JUMP_BACKWARD,
477
466
  [JUMP_FORWARD] = JUMP_FORWARD,
478
- [JUMP_IF_FALSE_OR_POP] = JUMP_IF_FALSE_OR_POP,
479
- [JUMP_IF_TRUE_OR_POP] = JUMP_IF_TRUE_OR_POP,
480
467
  [KW_NAMES] = KW_NAMES,
481
468
  [LIST_APPEND] = LIST_APPEND,
482
469
  [LIST_EXTEND] = LIST_EXTEND,
483
- [LIST_TO_TUPLE] = LIST_TO_TUPLE,
484
470
  [LOAD_ASSERTION_ERROR] = LOAD_ASSERTION_ERROR,
485
471
  [LOAD_ATTR] = LOAD_ATTR,
486
- [LOAD_ATTR_ADAPTIVE] = LOAD_ATTR,
487
472
  [LOAD_ATTR_CLASS] = LOAD_ATTR,
488
473
  [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = LOAD_ATTR,
489
474
  [LOAD_ATTR_INSTANCE_VALUE] = LOAD_ATTR,
490
475
  [LOAD_ATTR_METHOD_LAZY_DICT] = LOAD_ATTR,
491
476
  [LOAD_ATTR_METHOD_NO_DICT] = LOAD_ATTR,
492
- [LOAD_ATTR_METHOD_WITH_DICT] = LOAD_ATTR,
493
477
  [LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
494
478
  [LOAD_ATTR_MODULE] = LOAD_ATTR,
495
479
  [LOAD_ATTR_PROPERTY] = LOAD_ATTR,
496
480
  [LOAD_ATTR_SLOT] = LOAD_ATTR,
497
481
  [LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
498
482
  [LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
499
- [LOAD_CLASSDEREF] = LOAD_CLASSDEREF,
500
483
  [LOAD_CLOSURE] = LOAD_CLOSURE,
501
484
  [LOAD_CONST] = LOAD_CONST,
502
485
  [LOAD_CONST__LOAD_FAST] = LOAD_CONST,
503
486
  [LOAD_DEREF] = LOAD_DEREF,
504
487
  [LOAD_FAST] = LOAD_FAST,
488
+ [LOAD_FAST_AND_CLEAR] = LOAD_FAST_AND_CLEAR,
505
489
  [LOAD_FAST_CHECK] = LOAD_FAST_CHECK,
506
490
  [LOAD_FAST__LOAD_CONST] = LOAD_FAST,
507
491
  [LOAD_FAST__LOAD_FAST] = LOAD_FAST,
492
+ [LOAD_FROM_DICT_OR_DEREF] = LOAD_FROM_DICT_OR_DEREF,
493
+ [LOAD_FROM_DICT_OR_GLOBALS] = LOAD_FROM_DICT_OR_GLOBALS,
508
494
  [LOAD_GLOBAL] = LOAD_GLOBAL,
509
- [LOAD_GLOBAL_ADAPTIVE] = LOAD_GLOBAL,
510
495
  [LOAD_GLOBAL_BUILTIN] = LOAD_GLOBAL,
511
496
  [LOAD_GLOBAL_MODULE] = LOAD_GLOBAL,
497
+ [LOAD_LOCALS] = LOAD_LOCALS,
512
498
  [LOAD_NAME] = LOAD_NAME,
499
+ [LOAD_SUPER_ATTR] = LOAD_SUPER_ATTR,
500
+ [LOAD_SUPER_ATTR_ATTR] = LOAD_SUPER_ATTR,
501
+ [LOAD_SUPER_ATTR_METHOD] = LOAD_SUPER_ATTR,
513
502
  [MAKE_CELL] = MAKE_CELL,
514
503
  [MAKE_FUNCTION] = MAKE_FUNCTION,
515
504
  [MAP_ADD] = MAP_ADD,
@@ -524,22 +513,21 @@ const uint8_t Nuitka_PyOpcode_Deopt[256] = {
524
513
  [POP_JUMP_IF_NOT_NONE] = POP_JUMP_IF_NOT_NONE,
525
514
  [POP_JUMP_IF_TRUE] = POP_JUMP_IF_TRUE,
526
515
  [POP_TOP] = POP_TOP,
527
- [PREP_RERAISE_STAR] = PREP_RERAISE_STAR,
528
- [PRINT_EXPR] = PRINT_EXPR,
529
516
  [PUSH_EXC_INFO] = PUSH_EXC_INFO,
530
517
  [PUSH_NULL] = PUSH_NULL,
531
518
  [RAISE_VARARGS] = RAISE_VARARGS,
532
519
  [RERAISE] = RERAISE,
520
+ [RESERVED] = RESERVED,
533
521
  [RESUME] = RESUME,
534
- [RESUME_QUICK] = RESUME,
522
+ [RETURN_CONST] = RETURN_CONST,
535
523
  [RETURN_GENERATOR] = RETURN_GENERATOR,
536
524
  [RETURN_VALUE] = RETURN_VALUE,
537
525
  [SEND] = SEND,
526
+ [SEND_GEN] = SEND,
538
527
  [SETUP_ANNOTATIONS] = SETUP_ANNOTATIONS,
539
528
  [SET_ADD] = SET_ADD,
540
529
  [SET_UPDATE] = SET_UPDATE,
541
530
  [STORE_ATTR] = STORE_ATTR,
542
- [STORE_ATTR_ADAPTIVE] = STORE_ATTR,
543
531
  [STORE_ATTR_INSTANCE_VALUE] = STORE_ATTR,
544
532
  [STORE_ATTR_SLOT] = STORE_ATTR,
545
533
  [STORE_ATTR_WITH_HINT] = STORE_ATTR,
@@ -551,17 +539,14 @@ const uint8_t Nuitka_PyOpcode_Deopt[256] = {
551
539
  [STORE_NAME] = STORE_NAME,
552
540
  [STORE_SLICE] = STORE_SLICE,
553
541
  [STORE_SUBSCR] = STORE_SUBSCR,
554
- [STORE_SUBSCR_ADAPTIVE] = STORE_SUBSCR,
555
542
  [STORE_SUBSCR_DICT] = STORE_SUBSCR,
556
543
  [STORE_SUBSCR_LIST_INT] = STORE_SUBSCR,
557
544
  [SWAP] = SWAP,
558
545
  [UNARY_INVERT] = UNARY_INVERT,
559
546
  [UNARY_NEGATIVE] = UNARY_NEGATIVE,
560
547
  [UNARY_NOT] = UNARY_NOT,
561
- [UNARY_POSITIVE] = UNARY_POSITIVE,
562
548
  [UNPACK_EX] = UNPACK_EX,
563
549
  [UNPACK_SEQUENCE] = UNPACK_SEQUENCE,
564
- [UNPACK_SEQUENCE_ADAPTIVE] = UNPACK_SEQUENCE,
565
550
  [UNPACK_SEQUENCE_LIST] = UNPACK_SEQUENCE,
566
551
  [UNPACK_SEQUENCE_TUPLE] = UNPACK_SEQUENCE,
567
552
  [UNPACK_SEQUENCE_TWO_TUPLE] = UNPACK_SEQUENCE,
@@ -776,6 +761,7 @@ PyObject *Nuitka_PyGen_yf(PyGenObject *gen) {
776
761
  return yf;
777
762
  }
778
763
 
764
+ #if PYTHON_VERSION < 0x3c0
779
765
  // Because it is not exported, we need to duplicate this.
780
766
  static PyFrameObject *_Nuitka_PyFrame_New_NoTrack(PyCodeObject *code) {
781
767
  int slots = code->co_nlocalsplus + code->co_stacksize;
@@ -800,17 +786,15 @@ static PyFrameObject *_Nuitka_PyFrame_New_NoTrack(PyCodeObject *code) {
800
786
  static PyFrameObject *_Nuitka_PyFrame_MakeAndSetFrameObject(PyThreadState *tstate, _PyInterpreterFrame *frame) {
801
787
  assert(frame->frame_obj == NULL);
802
788
 
803
- PyObject *error_type, *error_value;
804
- PyTracebackObject *error_traceback;
805
-
806
- FETCH_ERROR_OCCURRED(tstate, &error_type, &error_value, &error_traceback);
789
+ struct Nuitka_ExceptionPreservationItem saved_exception_state;
790
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
807
791
 
808
792
  PyFrameObject *f = _Nuitka_PyFrame_New_NoTrack(frame->f_code);
809
793
 
810
794
  // Out of memory should be rare.
811
795
  assert(f != NULL);
812
796
 
813
- RESTORE_ERROR_OCCURRED(tstate, error_type, error_value, error_traceback);
797
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
814
798
 
815
799
  // Apparently there are situations where there is a race with what code creates the
816
800
  // frame, and this time it's not us.
@@ -846,7 +830,6 @@ static inline PyFrameObject *_Nuitka_PyFrame_GetFrameObject(PyThreadState *tstat
846
830
  }
847
831
 
848
832
  // Also not exported, taking over a frame object.
849
-
850
833
  static void _Nuitka_take_ownership(PyThreadState *tstate, PyFrameObject *f, _PyInterpreterFrame *frame) {
851
834
  assert(frame->owner != FRAME_OWNED_BY_FRAME_OBJECT);
852
835
  assert(frame->owner != FRAME_CLEARED);
@@ -915,9 +898,17 @@ static void _Nuitka_PyFrame_Clear(PyThreadState *tstate, _PyInterpreterFrame *fr
915
898
  #else
916
899
  Py_DECREF(frame->f_funcobj);
917
900
  #endif
918
- Py_DECREF(frame->f_code);
901
+
902
+ #if PYTHON_VERSION < 0x3d0
903
+ Py_XDECREF(frame->f_code);
904
+ #else
905
+ Py_XDECREF(frame->f_executable);
906
+ #endif
919
907
  }
908
+ #endif
920
909
 
910
+ // Needs to be similar to "gen_send_ex2" implementation in CPython. This is the low
911
+ // end of an uncompiled generator receiving a value.
921
912
  static PySendResult Nuitka_PyGen_gen_send_ex2(PyThreadState *tstate, PyGenObject *gen, PyObject *arg,
922
913
  PyObject **presult, int exc, int closing) {
923
914
  _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
@@ -955,7 +946,7 @@ static PySendResult Nuitka_PyGen_gen_send_ex2(PyThreadState *tstate, PyGenObject
955
946
  SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError, "cannot reuse already awaited coroutine");
956
947
  } else if (arg && !exc) {
957
948
  *presult = Py_None;
958
- Py_INCREF(*presult);
949
+ Py_INCREF_IMMORTAL(*presult);
959
950
  return PYGEN_RETURN;
960
951
  }
961
952
  return PYGEN_ERROR;
@@ -968,9 +959,13 @@ static PySendResult Nuitka_PyGen_gen_send_ex2(PyThreadState *tstate, PyGenObject
968
959
  Py_INCREF(result);
969
960
  _PyFrame_StackPush(frame, result);
970
961
 
971
- frame->previous = tstate->cframe->current_frame;
962
+ #if PYTHON_VERSION < 0x3c0
963
+ frame->previous = CURRENT_TSTATE_INTERPRETER_FRAME(tstate);
964
+ #endif
965
+
966
+ _PyErr_StackItem *prev_exc_info = tstate->exc_info;
967
+ gen->gi_exc_state.previous_item = prev_exc_info;
972
968
 
973
- gen->gi_exc_state.previous_item = tstate->exc_info;
974
969
  tstate->exc_info = &gen->gi_exc_state;
975
970
 
976
971
  if (exc) {
@@ -980,15 +975,21 @@ static PySendResult Nuitka_PyGen_gen_send_ex2(PyThreadState *tstate, PyGenObject
980
975
 
981
976
  gen->gi_frame_state = FRAME_EXECUTING;
982
977
  result = _PyEval_EvalFrame(tstate, frame, exc);
978
+ #if PYTHON_VERSION < 0x3c0
983
979
  if (gen->gi_frame_state == FRAME_EXECUTING) {
984
980
  gen->gi_frame_state = FRAME_COMPLETED;
985
981
  }
986
982
  tstate->exc_info = gen->gi_exc_state.previous_item;
987
983
  gen->gi_exc_state.previous_item = NULL;
988
984
 
989
- assert(tstate->cframe->current_frame == frame->previous);
985
+ assert(CURRENT_TSTATE_INTERPRETER_FRAME(tstate) == frame->previous);
990
986
  frame->previous = NULL;
991
-
987
+ #else
988
+ assert(tstate->exc_info == prev_exc_info);
989
+ assert(gen->gi_exc_state.previous_item == NULL);
990
+ assert(gen->gi_frame_state != FRAME_EXECUTING);
991
+ assert(frame->previous == NULL);
992
+ #endif
992
993
  if (result != NULL) {
993
994
  if (gen->gi_frame_state == FRAME_SUSPENDED) {
994
995
  *presult = result;
@@ -998,9 +999,12 @@ static PySendResult Nuitka_PyGen_gen_send_ex2(PyThreadState *tstate, PyGenObject
998
999
  assert(result == Py_None || !PyAsyncGen_CheckExact(gen));
999
1000
 
1000
1001
  if (result == Py_None && !PyAsyncGen_CheckExact(gen) && !arg) {
1002
+ // TODO: Have Py_CLEAR_IMMORTAL maybe
1003
+
1001
1004
  Py_CLEAR(result);
1002
1005
  }
1003
1006
  } else {
1007
+ #if PYTHON_VERSION < 0x3c0
1004
1008
  if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
1005
1009
  const char *msg = "generator raised StopIteration";
1006
1010
  if (PyCoro_CheckExact(gen)) {
@@ -1013,12 +1017,20 @@ static PySendResult Nuitka_PyGen_gen_send_ex2(PyThreadState *tstate, PyGenObject
1013
1017
  const char *msg = "async generator raised StopAsyncIteration";
1014
1018
  _PyErr_FormatFromCause(PyExc_RuntimeError, "%s", msg);
1015
1019
  }
1020
+ #else
1021
+ assert(!PyErr_ExceptionMatches(PyExc_StopIteration));
1022
+ assert(!PyAsyncGen_CheckExact(gen) || !PyErr_ExceptionMatches(PyExc_StopAsyncIteration));
1023
+
1024
+ #endif
1016
1025
  }
1017
1026
 
1018
1027
  _PyErr_ClearExcState(&gen->gi_exc_state);
1019
1028
 
1020
1029
  gen->gi_frame_state = FRAME_CLEARED;
1030
+
1031
+ #if PYTHON_VERSION < 0x3c0
1021
1032
  _Nuitka_PyFrame_Clear(tstate, frame);
1033
+ #endif
1022
1034
 
1023
1035
  *presult = result;
1024
1036
  return result ? PYGEN_RETURN : PYGEN_ERROR;
@@ -1035,7 +1047,7 @@ static PyObject *Nuitka_PyGen_gen_send_ex(PyThreadState *tstate, PyGenObject *ge
1035
1047
  } else if (result == Py_None) {
1036
1048
  SET_CURRENT_EXCEPTION_TYPE0(tstate, PyExc_StopIteration);
1037
1049
  } else {
1038
- _PyGen_SetStopIterationValue(result);
1050
+ Nuitka_SetStopIterationValue(tstate, result);
1039
1051
  }
1040
1052
 
1041
1053
  Py_DECREF(result);
@@ -1052,12 +1064,11 @@ static PyObject *Nuitka_PyGen_gen_send_ex(PyThreadState *tstate, PyGenObject *ge
1052
1064
  // value of exception_type will not be NULL, but the actual exception will not necessarily
1053
1065
  // be normalized.
1054
1066
  static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenObject *gen, int close_on_genexit,
1055
- PyObject *exception_type, PyObject *exception_value,
1056
- PyTracebackObject *exception_tb) {
1067
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
1057
1068
  #if _DEBUG_GENERATOR
1058
1069
  PRINT_STRING("Nuitka_UncompiledGenerator_throw: Enter ");
1059
1070
  PRINT_ITEM((PyObject *)gen);
1060
- PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
1071
+ PRINT_EXCEPTION_STATE(exception_state);
1061
1072
  PRINT_NEW_LINE();
1062
1073
  #endif
1063
1074
 
@@ -1066,7 +1077,7 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1066
1077
  if (yf != NULL) {
1067
1078
  _PyInterpreterFrame *frame = (_PyInterpreterFrame *)gen->gi_iframe;
1068
1079
 
1069
- if (close_on_genexit && EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_type, PyExc_GeneratorExit)) {
1080
+ if (close_on_genexit && EXCEPTION_STATE_MATCH_BOOL_SINGLE(tstate, exception_state, PyExc_GeneratorExit)) {
1070
1081
  PyFrameState state = (PyFrameState)gen->gi_frame_state;
1071
1082
  gen->gi_frame_state = FRAME_EXECUTING;
1072
1083
 
@@ -1079,9 +1090,7 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1079
1090
  if (err < 0) {
1080
1091
  // Releasing exception, we are done with it, raising instead the error just
1081
1092
  // occurred.
1082
- Py_DECREF(exception_type);
1083
- Py_XDECREF(exception_value);
1084
- Py_XDECREF(exception_tb);
1093
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
1085
1094
 
1086
1095
  return Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 0);
1087
1096
  }
@@ -1093,17 +1102,16 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1093
1102
  PyObject *ret;
1094
1103
 
1095
1104
  if (PyGen_CheckExact(yf) || PyCoro_CheckExact(yf)) {
1096
- _PyInterpreterFrame *prev = tstate->cframe->current_frame;
1105
+ _PyInterpreterFrame *prev = CURRENT_TSTATE_INTERPRETER_FRAME(tstate);
1097
1106
  frame->previous = prev;
1098
- tstate->cframe->current_frame = frame;
1107
+ CURRENT_TSTATE_INTERPRETER_FRAME(tstate) = frame;
1099
1108
  PyFrameState state = (PyFrameState)gen->gi_frame_state;
1100
1109
  gen->gi_frame_state = FRAME_EXECUTING;
1101
1110
 
1102
1111
  // Handing exception ownership to "Nuitka_UncompiledGenerator_throw".
1103
- ret = Nuitka_UncompiledGenerator_throw(tstate, (PyGenObject *)yf, close_on_genexit, exception_type,
1104
- exception_value, exception_tb);
1112
+ ret = Nuitka_UncompiledGenerator_throw(tstate, (PyGenObject *)yf, close_on_genexit, exception_state);
1105
1113
  gen->gi_frame_state = state;
1106
- tstate->cframe->current_frame = prev;
1114
+ CURRENT_TSTATE_INTERPRETER_FRAME(tstate) = prev;
1107
1115
  frame->previous = NULL;
1108
1116
  } else {
1109
1117
  #if 0
@@ -1129,21 +1137,19 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1129
1137
  PyFrameState state = (PyFrameState)gen->gi_frame_state;
1130
1138
  gen->gi_frame_state = FRAME_EXECUTING;
1131
1139
 
1132
- // TODO: Faster call code should be used.
1133
- ret = PyObject_CallFunctionObjArgs(meth, exception_type, exception_value, exception_tb, NULL);
1140
+ ret = Nuitka_CallGeneratorThrowMethod(meth, exception_state);
1134
1141
 
1135
1142
  gen->gi_frame_state = state;
1136
1143
 
1137
1144
  // Releasing exception, we are done with it.
1138
- Py_DECREF(exception_type);
1139
- Py_XDECREF(exception_value);
1140
- Py_XDECREF(exception_tb);
1145
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
1141
1146
 
1142
1147
  Py_DECREF(meth);
1143
1148
  }
1144
1149
  Py_DECREF(yf);
1145
1150
 
1146
1151
  if (ret == NULL) {
1152
+ #if PYTHON_VERSION < 0x3c0
1147
1153
  PyObject *val;
1148
1154
  assert(gen->gi_frame_state < FRAME_CLEARED);
1149
1155
  ret = _PyFrame_StackPop((_PyInterpreterFrame *)gen->gi_iframe);
@@ -1156,7 +1162,9 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1156
1162
  if (_PyGen_FetchStopIterationValue(&val) == 0) {
1157
1163
  ret = Nuitka_PyGen_gen_send_ex(tstate, gen, val, 0, 0);
1158
1164
  Py_DECREF(val);
1159
- } else {
1165
+ } else
1166
+ #endif
1167
+ {
1160
1168
  ret = Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 0);
1161
1169
  }
1162
1170
  }
@@ -1165,51 +1173,19 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1165
1173
  }
1166
1174
 
1167
1175
  throw_here:
1168
- if (exception_tb == (PyTracebackObject *)Py_None) {
1169
- exception_tb = NULL;
1170
- Py_DECREF(exception_tb);
1171
- } else if (exception_tb != NULL && !PyTraceBack_Check(exception_tb)) {
1172
- SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError, "throw() third argument must be a traceback object");
1173
- goto failed_throw;
1174
- }
1175
-
1176
1176
  tstate = _PyThreadState_GET();
1177
1177
 
1178
- if (PyExceptionClass_Check(exception_type)) {
1179
- Nuitka_Err_NormalizeException(tstate, &exception_type, &exception_value, &exception_tb);
1180
- } else if (PyExceptionInstance_Check(exception_type)) {
1181
- if (exception_value && exception_value != Py_None) {
1182
- SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
1183
- "instance exception may not have a separate value");
1184
- goto failed_throw;
1185
- } else {
1186
- // Normalize manually here via APIs
1187
- Py_XDECREF(exception_value);
1188
- exception_value = exception_type;
1189
- exception_type = PyExceptionInstance_Class(exception_type);
1190
- Py_INCREF(exception_type);
1191
-
1192
- if (exception_tb == NULL) {
1193
- // Can remain NULL if no traceback is available.
1194
- exception_tb = GET_EXCEPTION_TRACEBACK(exception_value);
1195
- Py_XINCREF(exception_tb);
1196
- }
1197
- }
1198
- } else {
1199
- // Raisable
1200
- SET_CURRENT_EXCEPTION_TYPE_COMPLAINT(
1201
- "exceptions must be classes or instances deriving from BaseException, not %s", exception_type);
1202
- goto failed_throw;
1178
+ if (unlikely(_Nuitka_Generator_check_throw(tstate, exception_state) == false)) {
1179
+ // Exception was released by _Nuitka_Generator_check_throw already.
1180
+ return NULL;
1203
1181
  }
1204
1182
 
1205
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
1183
+ RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
1206
1184
 
1207
1185
  return Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 1);
1208
1186
 
1209
1187
  failed_throw:
1210
- Py_DECREF(exception_type);
1211
- Py_XDECREF(exception_value);
1212
- Py_XDECREF(exception_tb);
1188
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
1213
1189
 
1214
1190
  return NULL;
1215
1191
  }
@@ -1379,6 +1355,7 @@ static PyObject *Nuitka_PyGen_gen_send_ex(PyThreadState *tstate, PyGenObject *ge
1379
1355
  Nuitka_SetStopIterationValue(tstate, result);
1380
1356
  }
1381
1357
 
1358
+ // TODO: Add Py_CLEAR_IMMORTAL maybe
1382
1359
  Py_CLEAR(result);
1383
1360
  }
1384
1361
  #if PYTHON_VERSION >= 0x350
@@ -1446,6 +1423,7 @@ static PyObject *Nuitka_PyGen_gen_send_ex(PyThreadState *tstate, PyGenObject *ge
1446
1423
  }
1447
1424
  assert(result == Py_None || !PyAsyncGen_CheckExact(gen));
1448
1425
  if (result == Py_None && !PyAsyncGen_CheckExact(gen) && !arg) {
1426
+ // TODO: Add Py_CLEAR_IMMORTAL maybe
1449
1427
  Py_CLEAR(result);
1450
1428
  }
1451
1429
  } else {
@@ -1482,19 +1460,19 @@ static PyObject *Nuitka_PyGen_gen_send_ex(PyThreadState *tstate, PyGenObject *ge
1482
1460
  // value of exception_type will not be NULL, but the actual exception will not necessarily
1483
1461
  // be normalized.
1484
1462
  static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenObject *gen, int close_on_genexit,
1485
- PyObject *exception_type, PyObject *exception_value,
1486
- PyTracebackObject *exception_tb) {
1463
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
1487
1464
  #if _DEBUG_GENERATOR
1488
1465
  PRINT_STRING("Nuitka_UncompiledGenerator_throw: Enter ");
1489
1466
  PRINT_ITEM((PyObject *)gen);
1490
- PRINT_EXCEPTION(exception_type, exception_value, exception_tb);
1467
+ PRINT_EXCEPTION_STATE(exception_state);
1491
1468
  PRINT_NEW_LINE();
1492
1469
  #endif
1493
1470
 
1494
1471
  PyObject *yf = Nuitka_PyGen_yf(gen);
1495
1472
 
1496
1473
  if (yf != NULL) {
1497
- if (close_on_genexit && EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_type, PyExc_GeneratorExit)) {
1474
+ if (close_on_genexit &&
1475
+ EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_state->exception_type, PyExc_GeneratorExit)) {
1498
1476
  #if PYTHON_VERSION < 0x3a0
1499
1477
  gen->gi_running = 1;
1500
1478
  #else
@@ -1513,9 +1491,7 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1513
1491
  if (err < 0) {
1514
1492
  // Releasing exception, we are done with it, raising instead the error just
1515
1493
  // occurred.
1516
- Py_DECREF(exception_type);
1517
- Py_XDECREF(exception_value);
1518
- Py_XDECREF(exception_tb);
1494
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
1519
1495
 
1520
1496
  return Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 0);
1521
1497
  }
@@ -1539,8 +1515,7 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1539
1515
  #endif
1540
1516
 
1541
1517
  // Handing exception ownership to "Nuitka_UncompiledGenerator_throw".
1542
- ret = Nuitka_UncompiledGenerator_throw(tstate, (PyGenObject *)yf, close_on_genexit, exception_type,
1543
- exception_value, exception_tb);
1518
+ ret = Nuitka_UncompiledGenerator_throw(tstate, (PyGenObject *)yf, close_on_genexit, exception_state);
1544
1519
 
1545
1520
  #if PYTHON_VERSION < 0x3a0
1546
1521
  gen->gi_running = 0;
@@ -1562,9 +1537,7 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1562
1537
  Py_DECREF(yf);
1563
1538
 
1564
1539
  // Releasing exception, we are done with it.
1565
- Py_DECREF(exception_type);
1566
- Py_XDECREF(exception_value);
1567
- Py_XDECREF(exception_tb);
1540
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
1568
1541
 
1569
1542
  return NULL;
1570
1543
  }
@@ -1583,7 +1556,8 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1583
1556
  gen->gi_frame->f_state = FRAME_EXECUTING;
1584
1557
  #endif
1585
1558
  // TODO: Faster call code should be used.
1586
- ret = PyObject_CallFunctionObjArgs(meth, exception_type, exception_value, exception_tb, NULL);
1559
+ ret = Nuitka_CallGeneratorThrowMethod(meth, exception_state);
1560
+
1587
1561
  #if PYTHON_VERSION < 0x3a0
1588
1562
  gen->gi_running = 0;
1589
1563
  #else
@@ -1591,9 +1565,7 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1591
1565
  #endif
1592
1566
 
1593
1567
  // Releasing exception, we are done with it.
1594
- Py_DECREF(exception_type);
1595
- Py_XDECREF(exception_value);
1596
- Py_XDECREF(exception_tb);
1568
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
1597
1569
 
1598
1570
  Py_DECREF(meth);
1599
1571
  }
@@ -1616,10 +1588,10 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1616
1588
  gen->gi_frame->f_lasti += 1;
1617
1589
  #endif
1618
1590
 
1619
- if (_PyGen_FetchStopIterationValue(&exception_value) == 0) {
1620
- ret = Nuitka_PyGen_gen_send_ex(tstate, gen, exception_value, 0, 0);
1591
+ if (_PyGen_FetchStopIterationValue(&exception_state->exception_value) == 0) {
1592
+ ret = Nuitka_PyGen_gen_send_ex(tstate, gen, exception_state->exception_value, 0, 0);
1621
1593
 
1622
- Py_DECREF(exception_value);
1594
+ Py_DECREF(exception_state->exception_value);
1623
1595
  } else {
1624
1596
  ret = Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 0);
1625
1597
  }
@@ -1629,13 +1601,13 @@ static PyObject *Nuitka_UncompiledGenerator_throw(PyThreadState *tstate, PyGenOb
1629
1601
 
1630
1602
  throw_here:
1631
1603
  // We continue to have exception ownership here.
1632
- if (unlikely(_Nuitka_Generator_check_throw2(tstate, &exception_type, &exception_value, &exception_tb) == false)) {
1633
- // Exception was released by _Nuitka_Generator_check_throw2 already.
1604
+ if (unlikely(_Nuitka_Generator_check_throw(tstate, exception_state) == false)) {
1605
+ // Exception was released by _Nuitka_Generator_check_throw already.
1634
1606
  return NULL;
1635
1607
  }
1636
1608
 
1637
1609
  // Transfer exception ownership to published exception.
1638
- RESTORE_ERROR_OCCURRED(tstate, exception_type, exception_value, (PyTracebackObject *)exception_tb);
1610
+ RESTORE_ERROR_OCCURRED_STATE(tstate, exception_state);
1639
1611
 
1640
1612
  return Nuitka_PyGen_gen_send_ex(tstate, gen, Py_None, 1, 1);
1641
1613
  }
@@ -1734,10 +1706,25 @@ static PyObject *Nuitka_PyGen_gen_close(PyThreadState *tstate, PyGenObject *gen,
1734
1706
  if (PyErr_ExceptionMatches(PyExc_StopIteration) || PyErr_ExceptionMatches(PyExc_GeneratorExit)) {
1735
1707
  CLEAR_ERROR_OCCURRED(tstate);
1736
1708
 
1737
- Py_INCREF(Py_None);
1709
+ Py_INCREF_IMMORTAL(Py_None);
1738
1710
  return Py_None;
1739
1711
  }
1740
1712
  return NULL;
1741
1713
  }
1742
1714
 
1743
1715
  #endif
1716
+
1717
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1718
+ // integrates with CPython, but also works on its own.
1719
+ //
1720
+ // Licensed under the Apache License, Version 2.0 (the "License");
1721
+ // you may not use this file except in compliance with the License.
1722
+ // You may obtain a copy of the License at
1723
+ //
1724
+ // http://www.apache.org/licenses/LICENSE-2.0
1725
+ //
1726
+ // Unless required by applicable law or agreed to in writing, software
1727
+ // distributed under the License is distributed on an "AS IS" BASIS,
1728
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1729
+ // See the License for the specific language governing permissions and
1730
+ // limitations under the License.