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

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

Potentially problematic release.


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

Files changed (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +93 -54
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,5 @@
1
- // Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- //
3
- // Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- // integrates with CPython, but also works on its own.
5
- //
6
- // Licensed under the Apache License, Version 2.0 (the "License");
7
- // you may not use this file except in compliance with the License.
8
- // You may obtain a copy of the License at
9
- //
10
- // http://www.apache.org/licenses/LICENSE-2.0
11
- //
12
- // Unless required by applicable law or agreed to in writing, software
13
- // distributed under the License is distributed on an "AS IS" BASIS,
14
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- // See the License for the specific language governing permissions and
16
- // limitations under the License.
17
- //
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
18
3
  /* This helpers is used to work with lists.
19
4
 
20
5
  */
@@ -25,23 +10,21 @@
25
10
  #include "nuitka/prelude.h"
26
11
  #endif
27
12
 
28
- static void FORMAT_TYPE_ERROR1(PyObject **exception_type, PyObject **exception_value, char const *format,
29
- char const *arg) {
30
- *exception_type = PyExc_TypeError;
31
- Py_INCREF(*exception_type);
13
+ static void FORMAT_TYPE_ERROR1(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
14
+ char const *format, char const *arg) {
15
+ PyObject *exception_value = Nuitka_String_FromFormat(format, arg);
16
+ CHECK_OBJECT(exception_value);
32
17
 
33
- *exception_value = Nuitka_String_FromFormat(format, arg);
34
- CHECK_OBJECT(*exception_value);
18
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, PyExc_TypeError, exception_value);
35
19
  }
36
20
 
37
21
  #if PYTHON_VERSION >= 0x270
38
- static void FORMAT_TYPE_ERROR2(PyObject **exception_type, PyObject **exception_value, char const *format,
39
- char const *arg1, char const *arg2) {
40
- *exception_type = PyExc_TypeError;
41
- Py_INCREF(*exception_type);
22
+ static void FORMAT_TYPE_ERROR2(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
23
+ char const *format, char const *arg1, char const *arg2) {
24
+ PyObject *exception_value = Nuitka_String_FromFormat(format, arg1, arg2);
25
+ CHECK_OBJECT(exception_value);
42
26
 
43
- *exception_value = Nuitka_String_FromFormat(format, arg1, arg2);
44
- CHECK_OBJECT(*exception_value);
27
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, PyExc_TypeError, exception_value);
45
28
  }
46
29
  #endif
47
30
 
@@ -53,63 +36,57 @@ static void FORMAT_TYPE_ERROR2(PyObject **exception_type, PyObject **exception_v
53
36
  #define WRONG_EXCEPTION_TYPE_ERROR_MESSAGE "exceptions must derive from BaseException"
54
37
  #endif
55
38
 
56
- void RAISE_EXCEPTION_WITH_TYPE(PyThreadState *tstate, PyObject **exception_type, PyObject **exception_value,
57
- PyTracebackObject **exception_tb) {
58
- *exception_value = NULL;
59
- *exception_tb = NULL;
60
-
61
- #if PYTHON_VERSION < 0x300
62
- // Next, repeatedly, replace a tuple exception with its first item
63
- while (PyTuple_Check(*exception_type) && PyTuple_GET_SIZE(*exception_type) > 0) {
64
- PyObject *tmp = *exception_type;
65
- *exception_type = PyTuple_GET_ITEM(*exception_type, 0);
66
- Py_INCREF(*exception_type);
39
+ // Next, replace a tuple in exception type creation with its first item
40
+ #if PYTHON_VERSION < 0x3c0
41
+ static void UNPACK_TUPLE_EXCEPTION_TYPE(struct Nuitka_ExceptionPreservationItem *exception_state) {
42
+ while (unlikely(PyTuple_Check(exception_state->exception_type)) &&
43
+ PyTuple_GET_SIZE(exception_state->exception_type) > 0) {
44
+ PyObject *tmp = exception_state->exception_type;
45
+ exception_state->exception_type = PyTuple_GET_ITEM(exception_state->exception_type, 0);
46
+ Py_INCREF(exception_state->exception_type);
67
47
  Py_DECREF(tmp);
68
48
  }
49
+ }
69
50
  #endif
70
51
 
71
- if (PyExceptionClass_Check(*exception_type)) {
72
- NORMALIZE_EXCEPTION(tstate, exception_type, exception_value, exception_tb);
73
- #if PYTHON_VERSION >= 0x270
74
- if (unlikely(!PyExceptionInstance_Check(*exception_value))) {
75
- PyObject *old_exception_type = *exception_type;
76
- PyObject *old_exception_value = *exception_value;
77
-
78
- FORMAT_TYPE_ERROR2(exception_type, exception_value,
79
- "calling %s() should have returned an instance of BaseException, not '%s'",
80
- Py_TYPE(*exception_type)->tp_name, Py_TYPE(*exception_value)->tp_name);
81
-
82
- Py_DECREF(old_exception_type);
83
- Py_DECREF(old_exception_value);
52
+ #if PYTHON_VERSION < 0x3c0
53
+ void RAISE_EXCEPTION_WITH_TYPE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
54
+ exception_state->exception_value = NULL;
55
+ exception_state->exception_tb = NULL;
84
56
 
85
- return;
86
- }
57
+ #if PYTHON_VERSION < 0x300
58
+ // Next, repeatedly, replace a tuple exception with its first item
59
+ UNPACK_TUPLE_EXCEPTION_TYPE(exception_state);
87
60
  #endif
88
61
 
62
+ if (PyExceptionClass_Check(exception_state->exception_type)) {
63
+ NORMALIZE_EXCEPTION(tstate, &exception_state->exception_type, &exception_state->exception_value,
64
+ &exception_state->exception_tb);
65
+
89
66
  #if PYTHON_VERSION >= 0x300
90
- CHAIN_EXCEPTION(tstate, *exception_value);
67
+ CHAIN_EXCEPTION(tstate, exception_state->exception_value);
91
68
  #endif
92
69
  return;
93
- } else if (PyExceptionInstance_Check(*exception_type)) {
94
- *exception_value = *exception_type;
95
- *exception_type = PyExceptionInstance_Class(*exception_type);
96
- Py_INCREF(*exception_type);
70
+ } else if (PyExceptionInstance_Check(exception_state->exception_type)) {
71
+ exception_state->exception_value = exception_state->exception_type;
72
+ exception_state->exception_type = PyExceptionInstance_Class(exception_state->exception_type);
73
+ Py_INCREF(exception_state->exception_type);
97
74
 
98
75
  #if PYTHON_VERSION >= 0x300
99
- CHAIN_EXCEPTION(tstate, *exception_value);
76
+ CHAIN_EXCEPTION(tstate, exception_state->exception_value);
100
77
 
101
78
  // Note: Cannot be assigned here.
102
- assert(*exception_tb == NULL);
103
- *exception_tb = GET_EXCEPTION_TRACEBACK(*exception_value);
104
- Py_XINCREF(*exception_tb);
79
+ assert(exception_state->exception_tb == NULL);
80
+ exception_state->exception_tb = GET_EXCEPTION_TRACEBACK(exception_state->exception_value);
81
+ Py_XINCREF(exception_state->exception_tb);
105
82
  #endif
106
83
 
107
84
  return;
108
85
  } else {
109
- PyObject *old_exception_type = *exception_type;
86
+ PyObject *old_exception_type = exception_state->exception_type;
110
87
 
111
- FORMAT_TYPE_ERROR1(exception_type, exception_value, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
112
- Py_TYPE(*exception_type)->tp_name);
88
+ FORMAT_TYPE_ERROR1(tstate, exception_state, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
89
+ Py_TYPE(exception_state->exception_type)->tp_name);
113
90
 
114
91
  Py_DECREF(old_exception_type);
115
92
 
@@ -117,320 +94,356 @@ void RAISE_EXCEPTION_WITH_TYPE(PyThreadState *tstate, PyObject **exception_type,
117
94
  }
118
95
  }
119
96
 
97
+ void RAISE_EXCEPTION_WITH_TYPE_AND_VALUE(PyThreadState *tstate,
98
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
99
+ CHECK_EXCEPTION_STATE(exception_state);
100
+
101
+ exception_state->exception_tb = NULL;
102
+
103
+ // Non-empty tuple exceptions are the first element.
104
+ UNPACK_TUPLE_EXCEPTION_TYPE(exception_state);
105
+
106
+ if (PyExceptionClass_Check(exception_state->exception_type)) {
107
+ NORMALIZE_EXCEPTION_STATE(tstate, exception_state);
108
+ #if PYTHON_VERSION >= 0x270
109
+ if (unlikely(!PyExceptionInstance_Check(exception_state->exception_value))) {
110
+ char const *exception_type_type = Py_TYPE(exception_state->exception_type)->tp_name;
111
+ char const *exception_value_type = Py_TYPE(exception_state->exception_value)->tp_name;
112
+
113
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
114
+
115
+ FORMAT_TYPE_ERROR2(tstate, exception_state,
116
+ "calling %s() should have returned an instance of BaseException, not '%s'",
117
+ exception_type_type, exception_value_type);
118
+ }
119
+ #endif
120
+
121
+ return;
122
+ } else if (PyExceptionInstance_Check(exception_state->exception_type)) {
123
+ if (unlikely(exception_state->exception_value != NULL && exception_state->exception_value != Py_None)) {
124
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
125
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_STR(tstate, exception_state, PyExc_TypeError,
126
+ "instance exception may not have a separate value");
127
+
128
+ return;
129
+ }
130
+
131
+ // The type is rather a value, so we are overriding it here.
132
+ exception_state->exception_value = exception_state->exception_type;
133
+ exception_state->exception_type = PyExceptionInstance_Class(exception_state->exception_type);
134
+ Py_INCREF(exception_state->exception_type);
135
+
136
+ return;
137
+ } else {
138
+ char const *exception_type_type = Py_TYPE(exception_state->exception_type)->tp_name;
139
+
140
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
141
+
142
+ FORMAT_TYPE_ERROR1(tstate, exception_state, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE, exception_type_type);
143
+
144
+ return;
145
+ }
146
+ }
147
+
148
+ #else
149
+
150
+ void RAISE_EXCEPTION_WITH_VALUE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
151
+ ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_state->exception_value);
152
+
153
+ CHAIN_EXCEPTION(tstate, exception_state->exception_value);
154
+ }
155
+ #endif
156
+
120
157
  #if PYTHON_VERSION >= 0x300
121
- void RAISE_EXCEPTION_WITH_CAUSE(PyThreadState *tstate, PyObject **exception_type, PyObject **exception_value,
122
- PyTracebackObject **exception_tb, PyObject *exception_cause) {
123
- CHECK_OBJECT(*exception_type);
158
+ void RAISE_EXCEPTION_WITH_CAUSE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
159
+ PyObject *exception_cause) {
160
+ CHECK_EXCEPTION_STATE(exception_state);
124
161
  CHECK_OBJECT(exception_cause);
125
- *exception_tb = NULL;
162
+
163
+ #if PYTHON_VERSION < 0x3c0
164
+ exception_state->exception_tb = NULL;
165
+ #endif
126
166
 
127
167
  // None is not a cause.
128
168
  if (exception_cause == Py_None) {
129
- Py_DECREF(exception_cause);
169
+ Py_DECREF_IMMORTAL(exception_cause);
130
170
  exception_cause = NULL;
131
171
  } else if (PyExceptionClass_Check(exception_cause)) {
132
172
  PyObject *old_exception_cause = exception_cause;
133
- exception_cause = PyObject_CallObject(exception_cause, NULL);
173
+ exception_cause = CALL_FUNCTION_NO_ARGS(tstate, exception_cause);
134
174
  Py_DECREF(old_exception_cause);
135
175
 
136
176
  if (unlikely(exception_cause == NULL)) {
137
- Py_DECREF(*exception_type);
138
- Py_XDECREF(*exception_tb);
139
-
140
- FETCH_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
177
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
178
+ FETCH_ERROR_OCCURRED_STATE(tstate, exception_state);
141
179
 
142
180
  return;
143
181
  }
144
182
  }
145
183
 
146
184
  if (unlikely(exception_cause != NULL && !PyExceptionInstance_Check(exception_cause))) {
147
- Py_DECREF(*exception_type);
148
- Py_XDECREF(*exception_tb);
149
-
150
- PyObject *old_exception_cause = exception_cause;
185
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
151
186
 
152
187
  #ifdef _NUITKA_FULL_COMPAT
153
- SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError, "exception causes must derive from BaseException");
154
- FETCH_ERROR_OCCURRED(tstate, exception_type, exception_value, exception_tb);
188
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_STR(tstate, exception_state, PyExc_TypeError,
189
+ "exception causes must derive from BaseException");
155
190
  #else
156
- FORMAT_TYPE_ERROR1(exception_type, exception_value,
157
- "exception causes must derive from BaseException (%s does not)",
191
+ FORMAT_TYPE_ERROR1(tstate, exception_state, "exception causes must derive from BaseException (%s does not)",
158
192
  Py_TYPE(exception_cause)->tp_name);
159
193
  #endif
160
194
 
161
- Py_XDECREF(old_exception_cause);
162
195
  return;
163
196
  }
164
197
 
165
- if (PyExceptionClass_Check(*exception_type)) {
166
- NORMALIZE_EXCEPTION(tstate, exception_type, exception_value, exception_tb);
198
+ #if PYTHON_VERSION < 0x3c0
199
+ if (PyExceptionClass_Check(exception_state->exception_type)) {
200
+ char const *exception_type_type = Py_TYPE(exception_state->exception_type)->tp_name;
201
+
202
+ NORMALIZE_EXCEPTION_STATE(tstate, exception_state);
167
203
 
168
- if (unlikely(!PyExceptionInstance_Check(*exception_value))) {
169
- Py_DECREF(*exception_tb);
204
+ if (unlikely(!PyExceptionInstance_Check(exception_state->exception_value))) {
170
205
  Py_XDECREF(exception_cause);
171
206
 
172
- PyObject *old_exception_type = *exception_type;
173
- PyObject *old_exception_value = *exception_value;
207
+ char const *exception_value_type = Py_TYPE(exception_state->exception_value)->tp_name;
174
208
 
175
- FORMAT_TYPE_ERROR2(exception_type, exception_value,
176
- "calling %s() should have returned an instance of BaseException, not '%s'",
177
- Py_TYPE(*exception_type)->tp_name, Py_TYPE(*exception_value)->tp_name);
209
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
178
210
 
179
- Py_DECREF(old_exception_type);
180
- Py_XDECREF(old_exception_value);
211
+ FORMAT_TYPE_ERROR2(tstate, exception_state,
212
+ "calling %s() should have returned an instance of BaseException, not '%s'",
213
+ exception_type_type, exception_value_type);
181
214
 
182
215
  return;
183
216
  }
184
217
 
185
- PyException_SetCause(*exception_value, exception_cause);
218
+ Nuitka_Exception_SetCause(exception_state->exception_value, exception_cause);
219
+ CHAIN_EXCEPTION(tstate, exception_state->exception_value);
220
+ } else if (PyExceptionInstance_Check(exception_state->exception_type)) {
221
+ exception_state->exception_value = exception_state->exception_type;
222
+ exception_state->exception_type = PyExceptionInstance_Class(exception_state->exception_type);
223
+ Py_INCREF(exception_state->exception_type);
186
224
 
187
- CHAIN_EXCEPTION(tstate, *exception_value);
188
- return;
189
- } else if (PyExceptionInstance_Check(*exception_type)) {
190
- *exception_value = *exception_type;
191
- *exception_type = PyExceptionInstance_Class(*exception_type);
192
- Py_INCREF(*exception_type);
193
-
194
- PyException_SetCause(*exception_value, exception_cause);
195
-
196
- CHAIN_EXCEPTION(tstate, *exception_value);
197
- return;
225
+ Nuitka_Exception_SetCause(exception_state->exception_value, exception_cause);
226
+ CHAIN_EXCEPTION(tstate, exception_state->exception_value);
198
227
  } else {
199
228
  Py_XDECREF(exception_cause);
200
229
 
201
- PyObject *old_exception_type = *exception_type;
230
+ char const *exception_type_type = Py_TYPE(exception_state->exception_type)->tp_name;
202
231
 
203
- FORMAT_TYPE_ERROR1(exception_type, exception_value, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
204
- Py_TYPE(*exception_type)->tp_name);
205
-
206
- Py_DECREF(old_exception_type);
232
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
207
233
 
208
- return;
234
+ FORMAT_TYPE_ERROR1(tstate, exception_state, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE, exception_type_type);
209
235
  }
236
+ #else
237
+ ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_state->exception_value);
238
+
239
+ Nuitka_Exception_SetCause(exception_state->exception_value, exception_cause);
240
+ CHAIN_EXCEPTION(tstate, exception_state->exception_value);
241
+ #endif
210
242
  }
211
243
  #endif
212
244
 
213
- void RAISE_EXCEPTION_WITH_VALUE(PyThreadState *tstate, PyObject **exception_type, PyObject **exception_value,
214
- PyTracebackObject **exception_tb) {
215
- CHECK_OBJECT(*exception_type);
216
- CHECK_OBJECT(*exception_value);
217
- *exception_tb = NULL;
245
+ #if PYTHON_VERSION < 0x300
246
+ void RAISE_EXCEPTION_WITH_TRACEBACK(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
247
+ if (exception_state->exception_tb == (PyTracebackObject *)Py_None) {
248
+ Py_DECREF_IMMORTAL(exception_state->exception_tb);
249
+ exception_state->exception_tb = NULL;
250
+ }
218
251
 
219
252
  // Non-empty tuple exceptions are the first element.
220
- while (unlikely(PyTuple_Check(*exception_type) && PyTuple_GET_SIZE(*exception_type) > 0)) {
221
- *exception_type = PyTuple_GET_ITEM(*exception_type, 0);
222
- }
253
+ UNPACK_TUPLE_EXCEPTION_TYPE(exception_state);
223
254
 
224
- if (PyExceptionClass_Check(*exception_type)) {
225
- NORMALIZE_EXCEPTION(tstate, exception_type, exception_value, exception_tb);
255
+ if (PyExceptionClass_Check(exception_state->exception_type)) {
256
+ NORMALIZE_EXCEPTION_STATE(tstate, exception_state);
226
257
  #if PYTHON_VERSION >= 0x270
227
- if (unlikely(!PyExceptionInstance_Check(*exception_value))) {
228
- PyObject *old_exception_type = *exception_type;
229
- PyObject *old_exception_value = *exception_type;
258
+ if (unlikely(!PyExceptionInstance_Check(exception_state->exception_value))) {
259
+ char const *exception_type_type = Py_TYPE(exception_state->exception_type)->tp_name;
260
+ char const *exception_value_type = Py_TYPE(exception_state->exception_value)->tp_name;
230
261
 
231
- FORMAT_TYPE_ERROR2(exception_type, exception_value,
232
- "calling %s() should have returned an instance of BaseException, not '%s'",
233
- Py_TYPE(*exception_type)->tp_name, Py_TYPE(*exception_value)->tp_name);
262
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
234
263
 
235
- Py_DECREF(old_exception_type);
236
- Py_DECREF(old_exception_value);
264
+ // TODO: It would be even more safe to create the format value
265
+ // before releasing the value.
266
+ FORMAT_TYPE_ERROR2(tstate, exception_state,
267
+ "calling %s() should have returned an instance of BaseException, not '%s'",
268
+ exception_type_type, exception_value_type);
237
269
  }
238
270
  #endif
239
271
 
240
272
  return;
241
- } else if (PyExceptionInstance_Check(*exception_type)) {
242
- if (unlikely(*exception_value != NULL && *exception_value != Py_None)) {
243
- Py_DECREF(*exception_type);
244
- Py_DECREF(*exception_value);
245
-
246
- *exception_type = PyExc_TypeError;
247
- Py_INCREF(PyExc_TypeError);
248
- *exception_value = Nuitka_String_FromString("instance exception may not have a separate value");
273
+ } else if (PyExceptionInstance_Check(exception_state->exception_type)) {
274
+ if (unlikely(exception_state->exception_value != NULL && exception_state->exception_value != Py_None)) {
275
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
276
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_STR(tstate, exception_state, PyExc_TypeError,
277
+ "instance exception may not have a separate value");
249
278
 
250
279
  return;
251
280
  }
252
281
 
253
282
  // The type is rather a value, so we are overriding it here.
254
- *exception_value = *exception_type;
255
- *exception_type = PyExceptionInstance_Class(*exception_type);
256
- Py_INCREF(*exception_type);
283
+ exception_state->exception_value = exception_state->exception_type;
284
+ exception_state->exception_type = PyExceptionInstance_Class(exception_state->exception_type);
285
+ Py_INCREF(exception_state->exception_type);
257
286
 
258
287
  return;
259
288
  } else {
260
- PyObject *old_exception_type = *exception_type;
261
-
262
- FORMAT_TYPE_ERROR1(exception_type, exception_value, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
263
- Py_TYPE(*exception_type)->tp_name);
264
-
265
- Py_DECREF(old_exception_type);
289
+ FORMAT_TYPE_ERROR1(tstate, exception_state, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
290
+ Py_TYPE(exception_state->exception_type)->tp_name);
266
291
 
267
292
  return;
268
293
  }
269
294
  }
270
-
271
- void RAISE_EXCEPTION_IMPLICIT(PyThreadState *tstate, PyObject **exception_type, PyObject **exception_value,
272
- PyTracebackObject **exception_tb) {
273
- CHECK_OBJECT(*exception_type);
274
- CHECK_OBJECT(*exception_value);
275
- *exception_tb = NULL;
276
-
277
- // Non-empty tuple exceptions are the first element.
278
- while (unlikely(PyTuple_Check(*exception_type) && PyTuple_GET_SIZE(*exception_type) > 0)) {
279
- *exception_type = PyTuple_GET_ITEM(*exception_type, 0);
280
- }
281
-
282
- if (PyExceptionClass_Check(*exception_type)) {
283
- #if PYTHON_VERSION >= 0x340
284
- NORMALIZE_EXCEPTION(tstate, exception_type, exception_value, exception_tb);
285
- CHAIN_EXCEPTION(tstate, *exception_value);
286
295
  #endif
287
296
 
288
- return;
289
- } else if (PyExceptionInstance_Check(*exception_type)) {
290
- #if PYTHON_VERSION >= 0x340
291
- CHAIN_EXCEPTION(tstate, *exception_value);
292
- #endif
293
-
294
- // The type is rather a value, so we are overriding it here.
295
- *exception_value = *exception_type;
296
- *exception_type = PyExceptionInstance_Class(*exception_type);
297
- Py_INCREF(*exception_type);
297
+ bool RERAISE_EXCEPTION(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
298
+ #if PYTHON_VERSION < 0x3b0
299
+ exception_state->exception_type = EXC_TYPE(tstate) != NULL ? EXC_TYPE(tstate) : Py_None;
300
+ Py_INCREF(exception_state->exception_type);
301
+ exception_state->exception_value = EXC_VALUE(tstate);
302
+ Py_XINCREF(exception_state->exception_value);
303
+ exception_state->exception_tb = (PyTracebackObject *)EXC_TRACEBACK(tstate);
304
+ Py_XINCREF(exception_state->exception_tb);
305
+
306
+ if (unlikely(exception_state->exception_type == Py_None)) {
307
+ #if PYTHON_VERSION >= 0x300
308
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
298
309
 
299
- return;
300
- } else {
301
- PyObject *old_exception_type = *exception_type;
302
- Py_DECREF(*exception_value);
310
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_STR(tstate, exception_state, PyExc_RuntimeError,
311
+ "No active exception to reraise");
312
+ #else
313
+ char const *exception_type_type = Py_TYPE(exception_state->exception_type)->tp_name;
303
314
 
304
- FORMAT_TYPE_ERROR1(exception_type, exception_value, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
305
- Py_TYPE(*exception_type)->tp_name);
315
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
306
316
 
307
- Py_DECREF(old_exception_type);
317
+ FORMAT_TYPE_ERROR1(tstate, exception_state, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE, exception_type_type);
308
318
 
309
- #if PYTHON_VERSION >= 0x340
310
- CHAIN_EXCEPTION(tstate, *exception_value);
311
319
  #endif
312
320
 
313
- return;
321
+ return false;
314
322
  }
315
- }
323
+ #else
324
+ exception_state->exception_value = EXC_VALUE(tstate);
316
325
 
317
- void RAISE_EXCEPTION_WITH_TRACEBACK(PyThreadState *tstate, PyObject **exception_type, PyObject **exception_value,
318
- PyTracebackObject **exception_tb) {
319
- CHECK_OBJECT(*exception_type);
320
- CHECK_OBJECT(*exception_value);
326
+ if (exception_state->exception_value == Py_None || exception_state->exception_value == NULL) {
327
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_STR(tstate, exception_state, PyExc_RuntimeError,
328
+ "No active exception to reraise");
321
329
 
322
- if (*exception_tb == (PyTracebackObject *)Py_None) {
323
- Py_DECREF(*exception_tb);
324
- *exception_tb = NULL;
325
- }
330
+ return false;
331
+ } else {
332
+ Py_INCREF(exception_state->exception_value);
326
333
 
327
- // Non-empty tuple exceptions are the first element.
328
- while (unlikely(PyTuple_Check(*exception_type) && PyTuple_GET_SIZE(*exception_type) > 0)) {
329
- *exception_type = PyTuple_GET_ITEM(*exception_type, 0);
334
+ #if PYTHON_VERSION < 0x3c0
335
+ exception_state->exception_type = PyExceptionInstance_Class(exception_state->exception_value);
336
+ Py_INCREF(exception_state->exception_type);
337
+ exception_state->exception_tb = GET_EXCEPTION_TRACEBACK(exception_state->exception_value);
338
+ Py_XINCREF(exception_state->exception_tb);
339
+ #endif
330
340
  }
341
+ #endif
331
342
 
332
- if (PyExceptionClass_Check(*exception_type)) {
333
- NORMALIZE_EXCEPTION(tstate, exception_type, exception_value, exception_tb);
334
- #if PYTHON_VERSION >= 0x270
335
- if (unlikely(!PyExceptionInstance_Check(*exception_value))) {
336
- PyObject *old_exception_type = *exception_type;
337
- PyObject *old_exception_value = *exception_value;
343
+ // Check for value to be present as well.
344
+ CHECK_EXCEPTION_STATE(exception_state);
345
+ CHECK_OBJECT(exception_state->exception_value);
338
346
 
339
- FORMAT_TYPE_ERROR2(exception_type, exception_value,
340
- "calling %s() should have returned an instance of BaseException, not '%s'",
341
- Py_TYPE(*exception_type)->tp_name, Py_TYPE(*exception_value)->tp_name);
347
+ return true;
348
+ }
342
349
 
343
- Py_DECREF(old_exception_type);
344
- Py_DECREF(old_exception_value);
345
- }
350
+ // Raise NameError for a given variable name.
351
+ void RAISE_CURRENT_EXCEPTION_NAME_ERROR(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
352
+ PyObject *variable_name) {
353
+ #if PYTHON_VERSION < 0x300
354
+ PyObject *exception_value_str =
355
+ Nuitka_String_FromFormat("name '%s' is not defined", Nuitka_String_AsString_Unchecked(variable_name));
356
+ #else
357
+ PyObject *exception_value_str = Nuitka_String_FromFormat("name '%U' is not defined", variable_name);
346
358
  #endif
347
359
 
348
- return;
349
- } else if (PyExceptionInstance_Check(*exception_type)) {
350
- if (unlikely(*exception_value != NULL && *exception_value != Py_None)) {
351
- Py_DECREF(*exception_type);
352
- Py_XDECREF(*exception_value);
353
- Py_XDECREF(*exception_tb);
360
+ PyObject *exception_value = MAKE_EXCEPTION_FROM_TYPE_ARG0(tstate, PyExc_NameError, exception_value_str);
361
+ Py_DECREF(exception_value_str);
354
362
 
355
- *exception_type = PyExc_TypeError;
356
- Py_INCREF(PyExc_TypeError);
357
- *exception_value = Nuitka_String_FromString("instance exception may not have a separate value");
363
+ #if PYTHON_VERSION >= 0x300
364
+ CHAIN_EXCEPTION(tstate, exception_value);
365
+ #endif
358
366
 
359
- return;
360
- }
367
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1_NORMALIZED(tstate, exception_state, PyExc_NameError,
368
+ exception_value);
369
+ }
361
370
 
362
- // The type is rather a value, so we are overriding it here.
363
- *exception_value = *exception_type;
364
- *exception_type = PyExceptionInstance_Class(*exception_type);
365
- Py_INCREF(*exception_type);
371
+ #if PYTHON_VERSION < 0x300
372
+ void RAISE_CURRENT_EXCEPTION_GLOBAL_NAME_ERROR(PyThreadState *tstate,
373
+ struct Nuitka_ExceptionPreservationItem *exception_state,
374
+ PyObject *variable_name) {
375
+ PyObject *exception_value_str =
376
+ Nuitka_String_FromFormat("global name '%s' is not defined", Nuitka_String_AsString_Unchecked(variable_name));
377
+ PyObject *exception_value = MAKE_EXCEPTION_FROM_TYPE_ARG0(tstate, PyExc_NameError, exception_value_str);
378
+ Py_DECREF(exception_value_str);
379
+
380
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1_NORMALIZED(tstate, exception_state, PyExc_NameError,
381
+ exception_value);
382
+ }
383
+ #endif
366
384
 
367
- return;
385
+ PyObject *NORMALIZE_EXCEPTION_VALUE_FOR_RAISE(PyThreadState *tstate, PyObject *exception_type) {
386
+ // Allow setting the value to NULL for time savings with quick type only errors
387
+ CHECK_OBJECT(exception_type);
388
+
389
+ if (PyExceptionInstance_Check(exception_type)) {
390
+ return Py_NewRef(exception_type);
368
391
  } else {
369
- PyObject *old_exception_type = *exception_type;
392
+ if (unlikely(!PyExceptionClass_Check(exception_type))) {
393
+ struct Nuitka_ExceptionPreservationItem exception_state;
394
+ FORMAT_TYPE_ERROR1(tstate, &exception_state, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
395
+ Py_TYPE(exception_type)->tp_name);
396
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
397
+ return NULL;
398
+ }
370
399
 
371
- FORMAT_TYPE_ERROR1(exception_type, exception_value, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
372
- Py_TYPE(*exception_type)->tp_name);
400
+ PyObject *exception_value = CALL_FUNCTION_NO_ARGS(tstate, exception_type);
373
401
 
374
- Py_DECREF(old_exception_type);
402
+ if (unlikely(exception_value == NULL)) {
403
+ return NULL;
404
+ }
375
405
 
376
- return;
406
+ if (unlikely(!PyExceptionInstance_Check(exception_value))) {
407
+ struct Nuitka_ExceptionPreservationItem exception_state;
408
+ FORMAT_TYPE_ERROR2(tstate, &exception_state,
409
+ "calling %R should have returned an instance of BaseException, not %R",
410
+ (char const *)exception_type, (char const *)Py_TYPE(exception_value));
411
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &exception_state);
412
+
413
+ Py_DECREF(exception_value);
414
+ return NULL;
415
+ }
416
+
417
+ return exception_value;
377
418
  }
378
419
  }
379
420
 
380
- bool RERAISE_EXCEPTION(PyObject **exception_type, PyObject **exception_value, PyTracebackObject **exception_tb) {
381
- PyThreadState *tstate = PyThreadState_GET();
382
- assert(tstate);
383
-
384
- #if PYTHON_VERSION < 0x3b0
385
- *exception_type = EXC_TYPE(tstate) != NULL ? EXC_TYPE(tstate) : Py_None;
386
- Py_INCREF(*exception_type);
387
- *exception_value = EXC_VALUE(tstate);
388
- Py_XINCREF(*exception_value);
389
- *exception_tb = (PyTracebackObject *)EXC_TRACEBACK(tstate);
390
- Py_XINCREF(*exception_tb);
391
-
392
- if (unlikely(*exception_type == Py_None)) {
393
421
  #if PYTHON_VERSION >= 0x300
394
- Py_DECREF(*exception_type);
395
-
396
- Py_INCREF(PyExc_RuntimeError);
397
- *exception_type = PyExc_RuntimeError;
398
- *exception_value = PyUnicode_FromString("No active exception to reraise");
399
- *exception_tb = NULL;
400
- #else
401
- PyObject *old_exception_type = *exception_type;
402
-
403
- FORMAT_TYPE_ERROR1(exception_type, exception_value, WRONG_EXCEPTION_TYPE_ERROR_MESSAGE,
404
- Py_TYPE(*exception_type)->tp_name);
405
-
406
- Py_DECREF(old_exception_type);
407
- #endif
408
-
409
- return false;
410
- }
411
- #else
412
- *exception_value = EXC_VALUE(tstate);
422
+ PyObject *MAKE_STOP_ITERATION_EMPTY(void) {
423
+ // Fake tstate object is OK, no tuple will be needed.
424
+ return Nuitka_CreateStopIteration(NULL, NULL);
425
+ }
413
426
 
414
- if (*exception_value == Py_None || *exception_value == NULL) {
415
- Py_INCREF(PyExc_RuntimeError);
416
- *exception_type = PyExc_RuntimeError;
417
- *exception_value = PyUnicode_FromString("No active exception to reraise");
418
- *exception_tb = NULL;
427
+ PyObject *MAKE_BASE_EXCEPTION_DERIVED_EMPTY(PyObject *exception_type) {
428
+ // Note: Fake tstate object is OK, no tuple will be needed to store anything
429
+ // in args.
430
+ PyBaseExceptionObject *result = Nuitka_BaseExceptionSingleArg_new(NULL, (PyTypeObject *)exception_type, NULL);
419
431
 
420
- return false;
421
- } else {
422
- Py_INCREF(*exception_value);
432
+ return (PyObject *)result;
433
+ }
423
434
 
424
- *exception_type = PyExceptionInstance_Class(*exception_value);
425
- Py_INCREF(*exception_type);
426
- *exception_tb = GET_EXCEPTION_TRACEBACK(*exception_value);
427
- Py_XINCREF(*exception_tb);
428
- }
429
435
  #endif
430
-
431
- CHECK_OBJECT(*exception_type);
432
- CHECK_OBJECT(*exception_value);
433
- CHECK_OBJECT_X(*exception_tb);
434
-
435
- return true;
436
- }
436
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
437
+ // integrates with CPython, but also works on its own.
438
+ //
439
+ // Licensed under the Apache License, Version 2.0 (the "License");
440
+ // you may not use this file except in compliance with the License.
441
+ // You may obtain a copy of the License at
442
+ //
443
+ // http://www.apache.org/licenses/LICENSE-2.0
444
+ //
445
+ // Unless required by applicable law or agreed to in writing, software
446
+ // distributed under the License is distributed on an "AS IS" BASIS,
447
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
448
+ // See the License for the specific language governing permissions and
449
+ // limitations under the License.