Nuitka-winsvc 2.7.7__cp313-cp313-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 (995) hide show
  1. nuitka/Builtins.py +259 -0
  2. nuitka/BytecodeCaching.py +184 -0
  3. nuitka/Bytecodes.py +109 -0
  4. nuitka/CacheCleanup.py +54 -0
  5. nuitka/Constants.py +425 -0
  6. nuitka/Errors.py +93 -0
  7. nuitka/HardImportRegistry.py +408 -0
  8. nuitka/MainControl.py +1201 -0
  9. nuitka/ModuleRegistry.py +364 -0
  10. nuitka/OptionParsing.py +2473 -0
  11. nuitka/Options.py +2948 -0
  12. nuitka/OutputDirectories.py +201 -0
  13. nuitka/PostProcessing.py +551 -0
  14. nuitka/Progress.py +252 -0
  15. nuitka/PythonFlavors.py +426 -0
  16. nuitka/PythonOperators.py +146 -0
  17. nuitka/PythonVersions.py +513 -0
  18. nuitka/Serialization.py +291 -0
  19. nuitka/SourceCodeReferences.py +176 -0
  20. nuitka/Tracing.py +579 -0
  21. nuitka/TreeXML.py +141 -0
  22. nuitka/Variables.py +515 -0
  23. nuitka/Version.py +88 -0
  24. nuitka/__init__.py +19 -0
  25. nuitka/__main__.py +224 -0
  26. nuitka/__past__.py +217 -0
  27. nuitka/build/Backend.scons +1111 -0
  28. nuitka/build/CCompilerVersion.scons +281 -0
  29. nuitka/build/DataComposerInterface.py +116 -0
  30. nuitka/build/Offsets.scons +626 -0
  31. nuitka/build/Onefile.scons +564 -0
  32. nuitka/build/SconsCaching.py +451 -0
  33. nuitka/build/SconsCompilerSettings.py +1133 -0
  34. nuitka/build/SconsHacks.py +215 -0
  35. nuitka/build/SconsInterface.py +664 -0
  36. nuitka/build/SconsProgress.py +100 -0
  37. nuitka/build/SconsSpawn.py +436 -0
  38. nuitka/build/SconsUtils.py +939 -0
  39. nuitka/build/__init__.py +19 -0
  40. nuitka/build/include/nuitka/allocator.h +450 -0
  41. nuitka/build/include/nuitka/builtins.h +97 -0
  42. nuitka/build/include/nuitka/calling.h +123 -0
  43. nuitka/build/include/nuitka/checkers.h +39 -0
  44. nuitka/build/include/nuitka/checksum_tools.h +28 -0
  45. nuitka/build/include/nuitka/compiled_asyncgen.h +281 -0
  46. nuitka/build/include/nuitka/compiled_cell.h +64 -0
  47. nuitka/build/include/nuitka/compiled_coroutine.h +271 -0
  48. nuitka/build/include/nuitka/compiled_frame.h +502 -0
  49. nuitka/build/include/nuitka/compiled_function.h +170 -0
  50. nuitka/build/include/nuitka/compiled_generator.h +287 -0
  51. nuitka/build/include/nuitka/compiled_method.h +54 -0
  52. nuitka/build/include/nuitka/constants.h +251 -0
  53. nuitka/build/include/nuitka/constants_blob.h +34 -0
  54. nuitka/build/include/nuitka/debug_settings.h +60 -0
  55. nuitka/build/include/nuitka/environment_variables.h +30 -0
  56. nuitka/build/include/nuitka/environment_variables_system.h +51 -0
  57. nuitka/build/include/nuitka/exception_groups.h +167 -0
  58. nuitka/build/include/nuitka/exceptions.h +1458 -0
  59. nuitka/build/include/nuitka/filesystem_paths.h +117 -0
  60. nuitka/build/include/nuitka/freelists.h +92 -0
  61. nuitka/build/include/nuitka/hedley.h +1774 -0
  62. nuitka/build/include/nuitka/helper/attributes.h +90 -0
  63. nuitka/build/include/nuitka/helper/boolean.h +86 -0
  64. nuitka/build/include/nuitka/helper/bytearrays.h +34 -0
  65. nuitka/build/include/nuitka/helper/bytes.h +28 -0
  66. nuitka/build/include/nuitka/helper/calling_generated.h +132 -0
  67. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  68. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  69. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  70. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_eq.h +247 -0
  74. nuitka/build/include/nuitka/helper/comparisons_ge.h +197 -0
  75. nuitka/build/include/nuitka/helper/comparisons_gt.h +197 -0
  76. nuitka/build/include/nuitka/helper/comparisons_le.h +247 -0
  77. nuitka/build/include/nuitka/helper/comparisons_lt.h +247 -0
  78. nuitka/build/include/nuitka/helper/comparisons_ne.h +197 -0
  79. nuitka/build/include/nuitka/helper/complex.h +46 -0
  80. nuitka/build/include/nuitka/helper/dictionaries.h +481 -0
  81. nuitka/build/include/nuitka/helper/floats.h +32 -0
  82. nuitka/build/include/nuitka/helper/import_hard.h +121 -0
  83. nuitka/build/include/nuitka/helper/indexes.h +47 -0
  84. nuitka/build/include/nuitka/helper/ints.h +165 -0
  85. nuitka/build/include/nuitka/helper/iterators.h +376 -0
  86. nuitka/build/include/nuitka/helper/lists.h +94 -0
  87. nuitka/build/include/nuitka/helper/lists_generated.h +36 -0
  88. nuitka/build/include/nuitka/helper/mappings.h +39 -0
  89. nuitka/build/include/nuitka/helper/operations.h +114 -0
  90. nuitka/build/include/nuitka/helper/operations_binary_add.h +240 -0
  91. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +108 -0
  92. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +108 -0
  93. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +108 -0
  94. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +103 -0
  95. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  96. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +103 -0
  97. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +99 -0
  98. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +60 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_mod.h +304 -0
  100. nuitka/build/include/nuitka/helper/operations_binary_mult.h +247 -0
  101. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +125 -0
  102. nuitka/build/include/nuitka/helper/operations_binary_pow.h +90 -0
  103. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +99 -0
  104. nuitka/build/include/nuitka/helper/operations_binary_sub.h +117 -0
  105. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +103 -0
  106. nuitka/build/include/nuitka/helper/operations_builtin_types.h +247 -0
  107. nuitka/build/include/nuitka/helper/operations_inplace_add.h +173 -0
  108. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +76 -0
  109. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +76 -0
  110. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +76 -0
  111. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +95 -0
  112. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +62 -0
  113. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +60 -0
  114. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +218 -0
  115. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +184 -0
  116. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +115 -0
  117. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +87 -0
  118. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +62 -0
  119. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +102 -0
  120. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +95 -0
  121. nuitka/build/include/nuitka/helper/raising.h +114 -0
  122. nuitka/build/include/nuitka/helper/rangeobjects.h +66 -0
  123. nuitka/build/include/nuitka/helper/richcomparisons.h +35 -0
  124. nuitka/build/include/nuitka/helper/sequences.h +33 -0
  125. nuitka/build/include/nuitka/helper/sets.h +25 -0
  126. nuitka/build/include/nuitka/helper/slices.h +314 -0
  127. nuitka/build/include/nuitka/helper/strings.h +30 -0
  128. nuitka/build/include/nuitka/helper/subscripts.h +390 -0
  129. nuitka/build/include/nuitka/helper/tuples.h +187 -0
  130. nuitka/build/include/nuitka/helpers.h +417 -0
  131. nuitka/build/include/nuitka/importing.h +149 -0
  132. nuitka/build/include/nuitka/incbin.h +402 -0
  133. nuitka/build/include/nuitka/jit_sources.h +25 -0
  134. nuitka/build/include/nuitka/prelude.h +626 -0
  135. nuitka/build/include/nuitka/printing.h +84 -0
  136. nuitka/build/include/nuitka/python_pgo.h +57 -0
  137. nuitka/build/include/nuitka/safe_string_ops.h +57 -0
  138. nuitka/build/include/nuitka/threading.h +142 -0
  139. nuitka/build/include/nuitka/tracing.h +82 -0
  140. nuitka/build/include/nuitka/type_aliases.h +30 -0
  141. nuitka/build/include/nuitka/unfreezing.h +91 -0
  142. nuitka/build/inline_copy/appdirs/LICENSE.txt +23 -0
  143. nuitka/build/inline_copy/appdirs/appdirs.py +611 -0
  144. nuitka/build/inline_copy/atomicwrites/LICENSE +19 -0
  145. nuitka/build/inline_copy/atomicwrites/atomicwrites.py +226 -0
  146. nuitka/build/inline_copy/bin/scons.py +58 -0
  147. nuitka/build/inline_copy/clcache/clcache/LICENSE +30 -0
  148. nuitka/build/inline_copy/clcache/clcache/__init__.py +4 -0
  149. nuitka/build/inline_copy/clcache/clcache/caching.py +2008 -0
  150. nuitka/build/inline_copy/colorama/LICENSE.txt +27 -0
  151. nuitka/build/inline_copy/colorama/colorama/__init__.py +6 -0
  152. nuitka/build/inline_copy/colorama/colorama/ansi.py +102 -0
  153. nuitka/build/inline_copy/colorama/colorama/ansitowin32.py +258 -0
  154. nuitka/build/inline_copy/colorama/colorama/initialise.py +80 -0
  155. nuitka/build/inline_copy/colorama/colorama/win32.py +152 -0
  156. nuitka/build/inline_copy/colorama/colorama/winterm.py +169 -0
  157. nuitka/build/inline_copy/glob2/LICENSE +27 -0
  158. nuitka/build/inline_copy/glob2/glob2/__init__.py +5 -0
  159. nuitka/build/inline_copy/glob2/glob2/compat.py +167 -0
  160. nuitka/build/inline_copy/glob2/glob2/fnmatch.py +141 -0
  161. nuitka/build/inline_copy/glob2/glob2/impl.py +216 -0
  162. nuitka/build/inline_copy/jinja2/LICENSE.rst +28 -0
  163. nuitka/build/inline_copy/jinja2/README.rst +2 -0
  164. nuitka/build/inline_copy/jinja2/jinja2/__init__.py +72 -0
  165. nuitka/build/inline_copy/jinja2/jinja2/_compat.py +105 -0
  166. nuitka/build/inline_copy/jinja2/jinja2/_identifier.py +2 -0
  167. nuitka/build/inline_copy/jinja2/jinja2/bccache.py +361 -0
  168. nuitka/build/inline_copy/jinja2/jinja2/compiler.py +1721 -0
  169. nuitka/build/inline_copy/jinja2/jinja2/constants.py +32 -0
  170. nuitka/build/inline_copy/jinja2/jinja2/debug.py +378 -0
  171. nuitka/build/inline_copy/jinja2/jinja2/defaults.py +56 -0
  172. nuitka/build/inline_copy/jinja2/jinja2/environment.py +1276 -0
  173. nuitka/build/inline_copy/jinja2/jinja2/exceptions.py +146 -0
  174. nuitka/build/inline_copy/jinja2/jinja2/ext.py +627 -0
  175. nuitka/build/inline_copy/jinja2/jinja2/filters.py +1190 -0
  176. nuitka/build/inline_copy/jinja2/jinja2/idtracking.py +286 -0
  177. nuitka/build/inline_copy/jinja2/jinja2/lexer.py +739 -0
  178. nuitka/build/inline_copy/jinja2/jinja2/loaders.py +483 -0
  179. nuitka/build/inline_copy/jinja2/jinja2/meta.py +106 -0
  180. nuitka/build/inline_copy/jinja2/jinja2/nativetypes.py +220 -0
  181. nuitka/build/inline_copy/jinja2/jinja2/nodes.py +999 -0
  182. nuitka/build/inline_copy/jinja2/jinja2/optimizer.py +49 -0
  183. nuitka/build/inline_copy/jinja2/jinja2/parser.py +903 -0
  184. nuitka/build/inline_copy/jinja2/jinja2/runtime.py +808 -0
  185. nuitka/build/inline_copy/jinja2/jinja2/sandbox.py +488 -0
  186. nuitka/build/inline_copy/jinja2/jinja2/tests.py +174 -0
  187. nuitka/build/inline_copy/jinja2/jinja2/utils.py +642 -0
  188. nuitka/build/inline_copy/jinja2/jinja2/visitor.py +87 -0
  189. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Action.py +1475 -0
  190. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Builder.py +905 -0
  191. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/CacheDir.py +314 -0
  192. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Conftest.py +805 -0
  193. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Debug.py +251 -0
  194. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Defaults.py +646 -0
  195. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Environment.py +2561 -0
  196. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/EnvironmentValues.py +119 -0
  197. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Errors.py +222 -0
  198. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Executor.py +660 -0
  199. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Job.py +439 -0
  200. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Memoize.py +242 -0
  201. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Alias.py +176 -0
  202. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/FS.py +3861 -0
  203. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/Python.py +195 -0
  204. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Node/__init__.py +1784 -0
  205. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/PathList.py +224 -0
  206. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/__init__.py +341 -0
  207. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/aix.py +81 -0
  208. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/cygwin.py +61 -0
  209. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/darwin.py +70 -0
  210. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/hpux.py +45 -0
  211. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/irix.py +41 -0
  212. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/mingw.py +33 -0
  213. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/os2.py +55 -0
  214. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/posix.py +124 -0
  215. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/sunos.py +47 -0
  216. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/virtualenv.py +115 -0
  217. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Platform/win32.py +429 -0
  218. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConf.py +1119 -0
  219. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/SConsign.py +453 -0
  220. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/C.py +226 -0
  221. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Dir.py +131 -0
  222. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/Prog.py +114 -0
  223. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/RC.py +57 -0
  224. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Scanner/__init__.py +436 -0
  225. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Interactive.py +372 -0
  226. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/Main.py +1469 -0
  227. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConsOptions.py +1071 -0
  228. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/SConscript.py +686 -0
  229. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Script/__init__.py +425 -0
  230. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Subst.py +979 -0
  231. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Taskmaster.py +1062 -0
  232. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/386asm.py +61 -0
  233. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/GettextCommon.py +429 -0
  234. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/__init__.py +52 -0
  235. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/arch.py +66 -0
  236. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/common.py +371 -0
  237. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/netframework.py +83 -0
  238. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/sdk.py +411 -0
  239. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vc.py +994 -0
  240. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/MSCommon/vs.py +608 -0
  241. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/PharLapCommon.py +116 -0
  242. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/__init__.py +882 -0
  243. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixc++.py +43 -0
  244. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcc.py +74 -0
  245. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixcxx.py +77 -0
  246. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/aixlink.py +78 -0
  247. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/applelink.py +209 -0
  248. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ar.py +63 -0
  249. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/as.py +49 -0
  250. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/asm.py +78 -0
  251. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/bcc32.py +81 -0
  252. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/c++.py +44 -0
  253. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cc.py +105 -0
  254. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clang.py +91 -0
  255. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangCommon/__init__.py +18 -0
  256. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/clangxx.py +99 -0
  257. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cxx.py +95 -0
  258. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/cyglink.py +212 -0
  259. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/default.py +50 -0
  260. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/filesystem.py +98 -0
  261. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/g++.py +45 -0
  262. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gas.py +56 -0
  263. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gcc.py +110 -0
  264. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gettext_tool.py +69 -0
  265. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gnulink.py +70 -0
  266. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/gxx.py +78 -0
  267. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpc++.py +45 -0
  268. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcc.py +53 -0
  269. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hpcxx.py +88 -0
  270. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/hplink.py +72 -0
  271. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icc.py +59 -0
  272. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/icl.py +52 -0
  273. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink.py +55 -0
  274. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/ilink32.py +60 -0
  275. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/install.py +510 -0
  276. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/intelc.py +617 -0
  277. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/link.py +72 -0
  278. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/LoadableModule.py +131 -0
  279. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/SharedLibrary.py +218 -0
  280. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkCommon/__init__.py +171 -0
  281. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/linkloc.py +112 -0
  282. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/m4.py +63 -0
  283. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/masm.py +77 -0
  284. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mingw.py +232 -0
  285. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgfmt.py +132 -0
  286. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msginit.py +137 -0
  287. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msgmerge.py +125 -0
  288. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslib.py +73 -0
  289. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mslink.py +339 -0
  290. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mssdk.py +50 -0
  291. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvc.py +325 -0
  292. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/msvs.py +2116 -0
  293. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwcc.py +207 -0
  294. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/mwld.py +108 -0
  295. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/nasm.py +72 -0
  296. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rmic.py +139 -0
  297. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/rpcgen.py +70 -0
  298. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgiar.py +68 -0
  299. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgic++.py +43 -0
  300. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicc.py +53 -0
  301. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgicxx.py +61 -0
  302. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sgilink.py +59 -0
  303. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunar.py +64 -0
  304. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunc++.py +45 -0
  305. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncc.py +58 -0
  306. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/suncxx.py +153 -0
  307. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/sunlink.py +79 -0
  308. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tar.py +73 -0
  309. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/textfile.py +198 -0
  310. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/tlib.py +53 -0
  311. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/wix.py +104 -0
  312. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/xgettext.py +337 -0
  313. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Tool/zip.py +120 -0
  314. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Util.py +2134 -0
  315. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/ConfigureCache.py +171 -0
  316. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/__init__.py +0 -0
  317. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Utilities/sconsign.py +494 -0
  318. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/BoolVariable.py +96 -0
  319. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/EnumVariable.py +110 -0
  320. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +152 -0
  321. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PackageVariable.py +107 -0
  322. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/PathVariable.py +158 -0
  323. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/__init__.py +334 -0
  324. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Warnings.py +238 -0
  325. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/__init__.py +9 -0
  326. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/__init__.py +104 -0
  327. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/_scons_dbm.py +42 -0
  328. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/compat/win32.py +101 -0
  329. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/cpp.py +640 -0
  330. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/dblite.py +295 -0
  331. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/exitfuncs.py +59 -0
  332. nuitka/build/inline_copy/markupsafe/LICENSE.rst +28 -0
  333. nuitka/build/inline_copy/markupsafe/markupsafe/__init__.py +327 -0
  334. nuitka/build/inline_copy/markupsafe/markupsafe/_compat.py +33 -0
  335. nuitka/build/inline_copy/markupsafe/markupsafe/_constants.py +264 -0
  336. nuitka/build/inline_copy/markupsafe/markupsafe/_native.py +69 -0
  337. nuitka/build/inline_copy/pefile/LICENSE.txt +21 -0
  338. nuitka/build/inline_copy/pefile/ordlookup/__init__.py +41 -0
  339. nuitka/build/inline_copy/pefile/ordlookup/oleaut32.py +400 -0
  340. nuitka/build/inline_copy/pefile/ordlookup/ws2_32.py +120 -0
  341. nuitka/build/inline_copy/pefile/pefile.py +8034 -0
  342. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +3272 -0
  343. nuitka/build/inline_copy/pkg_resources/pkg_resources/py31compat.py +21 -0
  344. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  345. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  346. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  347. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  348. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  349. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  350. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  351. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  352. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  353. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  354. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  355. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  356. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  357. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  358. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  359. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  360. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  361. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  362. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  363. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  364. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  365. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  366. nuitka/build/inline_copy/stubgen/six.py +998 -0
  367. nuitka/build/inline_copy/stubgen/stubgen.py +484 -0
  368. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +40 -0
  369. nuitka/build/inline_copy/tqdm/tqdm/_main.py +9 -0
  370. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +97 -0
  371. nuitka/build/inline_copy/tqdm/tqdm/_tqdm.py +9 -0
  372. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_notebook.py +9 -0
  373. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_pandas.py +24 -0
  374. nuitka/build/inline_copy/tqdm/tqdm/_utils.py +12 -0
  375. nuitka/build/inline_copy/tqdm/tqdm/auto.py +44 -0
  376. nuitka/build/inline_copy/tqdm/tqdm/autonotebook.py +28 -0
  377. nuitka/build/inline_copy/tqdm/tqdm/dask.py +46 -0
  378. nuitka/build/inline_copy/tqdm/tqdm/notebook.py +316 -0
  379. nuitka/build/inline_copy/tqdm/tqdm/std.py +1524 -0
  380. nuitka/build/inline_copy/tqdm/tqdm/tk.py +207 -0
  381. nuitka/build/inline_copy/tqdm/tqdm/utils.py +351 -0
  382. nuitka/build/inline_copy/tqdm/tqdm/version.py +2 -0
  383. nuitka/build/inline_copy/yaml/LICENSE +20 -0
  384. nuitka/build/inline_copy/yaml/yaml/__init__.py +427 -0
  385. nuitka/build/inline_copy/yaml/yaml/composer.py +139 -0
  386. nuitka/build/inline_copy/yaml/yaml/constructor.py +748 -0
  387. nuitka/build/inline_copy/yaml/yaml/cyaml.py +101 -0
  388. nuitka/build/inline_copy/yaml/yaml/dumper.py +62 -0
  389. nuitka/build/inline_copy/yaml/yaml/emitter.py +1137 -0
  390. nuitka/build/inline_copy/yaml/yaml/error.py +75 -0
  391. nuitka/build/inline_copy/yaml/yaml/events.py +86 -0
  392. nuitka/build/inline_copy/yaml/yaml/loader.py +63 -0
  393. nuitka/build/inline_copy/yaml/yaml/nodes.py +49 -0
  394. nuitka/build/inline_copy/yaml/yaml/parser.py +589 -0
  395. nuitka/build/inline_copy/yaml/yaml/reader.py +185 -0
  396. nuitka/build/inline_copy/yaml/yaml/representer.py +389 -0
  397. nuitka/build/inline_copy/yaml/yaml/resolver.py +227 -0
  398. nuitka/build/inline_copy/yaml/yaml/scanner.py +1435 -0
  399. nuitka/build/inline_copy/yaml/yaml/serializer.py +111 -0
  400. nuitka/build/inline_copy/yaml/yaml/tokens.py +104 -0
  401. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  402. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  403. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  404. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  405. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  406. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  407. nuitka/build/inline_copy/zstd/LICENSE.txt +30 -0
  408. nuitka/build/inline_copy/zstd/common/bitstream.h +463 -0
  409. nuitka/build/inline_copy/zstd/common/compiler.h +288 -0
  410. nuitka/build/inline_copy/zstd/common/cpu.h +213 -0
  411. nuitka/build/inline_copy/zstd/common/debug.h +107 -0
  412. nuitka/build/inline_copy/zstd/common/entropy_common.c +360 -0
  413. nuitka/build/inline_copy/zstd/common/error_private.c +56 -0
  414. nuitka/build/inline_copy/zstd/common/error_private.h +80 -0
  415. nuitka/build/inline_copy/zstd/common/fse.h +715 -0
  416. nuitka/build/inline_copy/zstd/common/fse_decompress.c +393 -0
  417. nuitka/build/inline_copy/zstd/common/huf.h +361 -0
  418. nuitka/build/inline_copy/zstd/common/mem.h +426 -0
  419. nuitka/build/inline_copy/zstd/common/xxhash.c +826 -0
  420. nuitka/build/inline_copy/zstd/common/xxhash.h +285 -0
  421. nuitka/build/inline_copy/zstd/common/zstd_common.c +83 -0
  422. nuitka/build/inline_copy/zstd/common/zstd_deps.h +111 -0
  423. nuitka/build/inline_copy/zstd/common/zstd_errors.h +95 -0
  424. nuitka/build/inline_copy/zstd/common/zstd_internal.h +478 -0
  425. nuitka/build/inline_copy/zstd/decompress/huf_decompress.c +1350 -0
  426. nuitka/build/inline_copy/zstd/decompress/zstd_ddict.c +244 -0
  427. nuitka/build/inline_copy/zstd/decompress/zstd_ddict.h +44 -0
  428. nuitka/build/inline_copy/zstd/decompress/zstd_decompress.c +1930 -0
  429. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.c +1540 -0
  430. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_block.h +62 -0
  431. nuitka/build/inline_copy/zstd/decompress/zstd_decompress_internal.h +190 -0
  432. nuitka/build/inline_copy/zstd/zstd.h +2391 -0
  433. nuitka/build/static_src/CompiledAsyncgenType.c +2211 -0
  434. nuitka/build/static_src/CompiledCellType.c +300 -0
  435. nuitka/build/static_src/CompiledCodeHelpers.c +2160 -0
  436. nuitka/build/static_src/CompiledCoroutineType.c +1946 -0
  437. nuitka/build/static_src/CompiledFrameType.c +1337 -0
  438. nuitka/build/static_src/CompiledFunctionType.c +3320 -0
  439. nuitka/build/static_src/CompiledGeneratorType.c +1997 -0
  440. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +2117 -0
  441. nuitka/build/static_src/CompiledMethodType.c +614 -0
  442. nuitka/build/static_src/GenerateHeadersMain.c +30 -0
  443. nuitka/build/static_src/HelpersAllocator.c +939 -0
  444. nuitka/build/static_src/HelpersAttributes.c +1241 -0
  445. nuitka/build/static_src/HelpersBuiltin.c +901 -0
  446. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +3594 -0
  447. nuitka/build/static_src/HelpersBytes.c +107 -0
  448. nuitka/build/static_src/HelpersCalling.c +397 -0
  449. nuitka/build/static_src/HelpersCallingGenerated.c +14361 -0
  450. nuitka/build/static_src/HelpersChecksumTools.c +59 -0
  451. nuitka/build/static_src/HelpersClasses.c +91 -0
  452. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  453. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  454. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  455. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  456. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  457. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  458. nuitka/build/static_src/HelpersComparisonEq.c +12070 -0
  459. nuitka/build/static_src/HelpersComparisonEqUtils.c +169 -0
  460. nuitka/build/static_src/HelpersComparisonGe.c +11871 -0
  461. nuitka/build/static_src/HelpersComparisonGt.c +11855 -0
  462. nuitka/build/static_src/HelpersComparisonLe.c +11957 -0
  463. nuitka/build/static_src/HelpersComparisonLt.c +11941 -0
  464. nuitka/build/static_src/HelpersComparisonNe.c +11979 -0
  465. nuitka/build/static_src/HelpersConsole.c +124 -0
  466. nuitka/build/static_src/HelpersConstantsBlob.c +1487 -0
  467. nuitka/build/static_src/HelpersDeepcopy.c +636 -0
  468. nuitka/build/static_src/HelpersDictionaries.c +1739 -0
  469. nuitka/build/static_src/HelpersDictionariesGenerated.c +738 -0
  470. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  471. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  472. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +97 -0
  473. nuitka/build/static_src/HelpersExceptions.c +298 -0
  474. nuitka/build/static_src/HelpersFiles.c +353 -0
  475. nuitka/build/static_src/HelpersFilesystemPaths.c +1322 -0
  476. nuitka/build/static_src/HelpersFloats.c +92 -0
  477. nuitka/build/static_src/HelpersHeapStorage.c +68 -0
  478. nuitka/build/static_src/HelpersImport.c +506 -0
  479. nuitka/build/static_src/HelpersImportHard.c +526 -0
  480. nuitka/build/static_src/HelpersJitSources.c +48 -0
  481. nuitka/build/static_src/HelpersLists.c +899 -0
  482. nuitka/build/static_src/HelpersListsGenerated.c +564 -0
  483. nuitka/build/static_src/HelpersMappings.c +46 -0
  484. nuitka/build/static_src/HelpersMatching.c +192 -0
  485. nuitka/build/static_src/HelpersOperationBinaryAdd.c +6477 -0
  486. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +703 -0
  487. nuitka/build/static_src/HelpersOperationBinaryBitand.c +2738 -0
  488. nuitka/build/static_src/HelpersOperationBinaryBitor.c +2738 -0
  489. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +2738 -0
  490. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +2406 -0
  491. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +33 -0
  492. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  493. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +2422 -0
  494. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +220 -0
  495. nuitka/build/static_src/HelpersOperationBinaryLshift.c +2846 -0
  496. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +453 -0
  497. nuitka/build/static_src/HelpersOperationBinaryMod.c +6549 -0
  498. nuitka/build/static_src/HelpersOperationBinaryMult.c +6438 -0
  499. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +125 -0
  500. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +2355 -0
  501. nuitka/build/static_src/HelpersOperationBinaryPow.c +2743 -0
  502. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +26 -0
  503. nuitka/build/static_src/HelpersOperationBinaryRshift.c +2706 -0
  504. nuitka/build/static_src/HelpersOperationBinarySub.c +2649 -0
  505. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +2415 -0
  506. nuitka/build/static_src/HelpersOperationInplaceAdd.c +5211 -0
  507. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +144 -0
  508. nuitka/build/static_src/HelpersOperationInplaceBitand.c +1826 -0
  509. nuitka/build/static_src/HelpersOperationInplaceBitor.c +1826 -0
  510. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +1826 -0
  511. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +2605 -0
  512. nuitka/build/static_src/HelpersOperationInplaceLshift.c +1594 -0
  513. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +603 -0
  514. nuitka/build/static_src/HelpersOperationInplaceMod.c +4762 -0
  515. nuitka/build/static_src/HelpersOperationInplaceMult.c +4689 -0
  516. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +2553 -0
  517. nuitka/build/static_src/HelpersOperationInplacePow.c +2807 -0
  518. nuitka/build/static_src/HelpersOperationInplaceRshift.c +1534 -0
  519. nuitka/build/static_src/HelpersOperationInplaceSub.c +2894 -0
  520. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +2612 -0
  521. nuitka/build/static_src/HelpersProfiling.c +104 -0
  522. nuitka/build/static_src/HelpersPythonPgo.c +113 -0
  523. nuitka/build/static_src/HelpersRaising.c +447 -0
  524. nuitka/build/static_src/HelpersSafeStrings.c +185 -0
  525. nuitka/build/static_src/HelpersSequences.c +134 -0
  526. nuitka/build/static_src/HelpersSlices.c +73 -0
  527. nuitka/build/static_src/HelpersStrings.c +998 -0
  528. nuitka/build/static_src/HelpersTuples.c +148 -0
  529. nuitka/build/static_src/HelpersTypes.c +329 -0
  530. nuitka/build/static_src/InspectPatcher.c +439 -0
  531. nuitka/build/static_src/MainProgram.c +2060 -0
  532. nuitka/build/static_src/MetaPathBasedLoader.c +2290 -0
  533. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +125 -0
  534. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +158 -0
  535. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +785 -0
  536. nuitka/build/static_src/OnefileBootstrap.c +1580 -0
  537. nuitka/build/static_src/OnefileSplashScreen.cpp +275 -0
  538. nuitka/code_generation/AsyncgenCodes.py +186 -0
  539. nuitka/code_generation/AttributeCodes.py +357 -0
  540. nuitka/code_generation/BinaryOperationHelperDefinitions.py +720 -0
  541. nuitka/code_generation/BranchCodes.py +67 -0
  542. nuitka/code_generation/BuiltinCodes.py +529 -0
  543. nuitka/code_generation/CallCodes.py +1186 -0
  544. nuitka/code_generation/ClassCodes.py +156 -0
  545. nuitka/code_generation/CodeGeneration.py +1078 -0
  546. nuitka/code_generation/CodeHelperSelection.py +81 -0
  547. nuitka/code_generation/CodeHelpers.py +455 -0
  548. nuitka/code_generation/CodeObjectCodes.py +165 -0
  549. nuitka/code_generation/ComparisonCodes.py +569 -0
  550. nuitka/code_generation/ComparisonHelperDefinitions.py +146 -0
  551. nuitka/code_generation/ConditionalCodes.py +236 -0
  552. nuitka/code_generation/ConstantCodes.py +243 -0
  553. nuitka/code_generation/Contexts.py +1248 -0
  554. nuitka/code_generation/CoroutineCodes.py +253 -0
  555. nuitka/code_generation/CtypesCodes.py +46 -0
  556. nuitka/code_generation/DictCodes.py +918 -0
  557. nuitka/code_generation/Emission.py +75 -0
  558. nuitka/code_generation/ErrorCodes.py +281 -0
  559. nuitka/code_generation/EvalCodes.py +444 -0
  560. nuitka/code_generation/ExceptionCodes.py +337 -0
  561. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +227 -0
  562. nuitka/code_generation/ExpressionCodes.py +61 -0
  563. nuitka/code_generation/FrameCodes.py +518 -0
  564. nuitka/code_generation/FunctionCodes.py +858 -0
  565. nuitka/code_generation/GeneratorCodes.py +218 -0
  566. nuitka/code_generation/GlobalConstants.py +249 -0
  567. nuitka/code_generation/GlobalsLocalsCodes.py +211 -0
  568. nuitka/code_generation/IdCodes.py +53 -0
  569. nuitka/code_generation/ImportCodes.py +468 -0
  570. nuitka/code_generation/Indentation.py +45 -0
  571. nuitka/code_generation/IndexCodes.py +50 -0
  572. nuitka/code_generation/InjectCCodes.py +28 -0
  573. nuitka/code_generation/IntegerCodes.py +110 -0
  574. nuitka/code_generation/IteratorCodes.py +378 -0
  575. nuitka/code_generation/JitCodes.py +44 -0
  576. nuitka/code_generation/LabelCodes.py +68 -0
  577. nuitka/code_generation/LineNumberCodes.py +91 -0
  578. nuitka/code_generation/ListCodes.py +502 -0
  579. nuitka/code_generation/LoaderCodes.py +193 -0
  580. nuitka/code_generation/LocalsDictCodes.py +359 -0
  581. nuitka/code_generation/LoopCodes.py +88 -0
  582. nuitka/code_generation/MatchCodes.py +67 -0
  583. nuitka/code_generation/ModuleCodes.py +247 -0
  584. nuitka/code_generation/Namify.py +260 -0
  585. nuitka/code_generation/NetworkxCodes.py +51 -0
  586. nuitka/code_generation/OperationCodes.py +398 -0
  587. nuitka/code_generation/PackageResourceCodes.py +986 -0
  588. nuitka/code_generation/PrintCodes.py +93 -0
  589. nuitka/code_generation/PythonAPICodes.py +215 -0
  590. nuitka/code_generation/RaisingCodes.py +481 -0
  591. nuitka/code_generation/Reports.py +115 -0
  592. nuitka/code_generation/ReturnCodes.py +143 -0
  593. nuitka/code_generation/SetCodes.py +196 -0
  594. nuitka/code_generation/SliceCodes.py +465 -0
  595. nuitka/code_generation/StringCodes.py +303 -0
  596. nuitka/code_generation/SubscriptCodes.py +263 -0
  597. nuitka/code_generation/TensorflowCodes.py +54 -0
  598. nuitka/code_generation/TryCodes.py +326 -0
  599. nuitka/code_generation/TupleCodes.py +115 -0
  600. nuitka/code_generation/TypeAliasCodes.py +120 -0
  601. nuitka/code_generation/VariableCodes.py +519 -0
  602. nuitka/code_generation/VariableDeclarations.py +279 -0
  603. nuitka/code_generation/YieldCodes.py +253 -0
  604. nuitka/code_generation/__init__.py +19 -0
  605. nuitka/code_generation/c_types/CTypeBases.py +177 -0
  606. nuitka/code_generation/c_types/CTypeBooleans.py +104 -0
  607. nuitka/code_generation/c_types/CTypeCFloats.py +57 -0
  608. nuitka/code_generation/c_types/CTypeCLongs.py +45 -0
  609. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +109 -0
  610. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +150 -0
  611. nuitka/code_generation/c_types/CTypeNuitkaInts.py +200 -0
  612. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +107 -0
  613. nuitka/code_generation/c_types/CTypePyObjectPointers.py +572 -0
  614. nuitka/code_generation/c_types/CTypeVoids.py +92 -0
  615. nuitka/code_generation/c_types/__init__.py +19 -0
  616. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +106 -0
  617. nuitka/code_generation/templates/CodeTemplatesConstants.py +296 -0
  618. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +109 -0
  619. nuitka/code_generation/templates/CodeTemplatesExceptions.py +84 -0
  620. nuitka/code_generation/templates/CodeTemplatesFrames.py +235 -0
  621. nuitka/code_generation/templates/CodeTemplatesFunction.py +117 -0
  622. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +130 -0
  623. nuitka/code_generation/templates/CodeTemplatesIterators.py +40 -0
  624. nuitka/code_generation/templates/CodeTemplatesLoader.py +180 -0
  625. nuitka/code_generation/templates/CodeTemplatesModules.py +710 -0
  626. nuitka/code_generation/templates/CodeTemplatesVariables.py +388 -0
  627. nuitka/code_generation/templates/TemplateDebugWrapper.py +80 -0
  628. nuitka/code_generation/templates/__init__.py +19 -0
  629. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +321 -0
  630. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +143 -0
  631. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +677 -0
  632. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +165 -0
  633. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +38 -0
  634. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +41 -0
  635. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +53 -0
  636. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +364 -0
  637. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +37 -0
  638. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +53 -0
  639. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +20 -0
  640. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +148 -0
  641. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  642. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +352 -0
  643. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +115 -0
  644. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  645. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +31 -0
  646. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +32 -0
  647. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +112 -0
  648. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +157 -0
  649. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +115 -0
  650. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +99 -0
  651. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +115 -0
  652. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +281 -0
  653. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +420 -0
  654. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +51 -0
  655. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +71 -0
  656. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +327 -0
  657. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +411 -0
  658. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +59 -0
  659. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +229 -0
  660. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +47 -0
  661. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +55 -0
  662. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +58 -0
  663. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +62 -0
  664. nuitka/containers/Namedtuples.py +51 -0
  665. nuitka/containers/OrderedDicts.py +191 -0
  666. nuitka/containers/OrderedSets.py +123 -0
  667. nuitka/containers/OrderedSetsFallback.py +139 -0
  668. nuitka/containers/__init__.py +19 -0
  669. nuitka/distutils/Build.py +76 -0
  670. nuitka/distutils/DistutilCommands.py +438 -0
  671. nuitka/distutils/__init__.py +19 -0
  672. nuitka/finalizations/Finalization.py +35 -0
  673. nuitka/finalizations/FinalizeMarkups.py +136 -0
  674. nuitka/finalizations/__init__.py +19 -0
  675. nuitka/freezer/DependsExe.py +257 -0
  676. nuitka/freezer/DllDependenciesCommon.py +97 -0
  677. nuitka/freezer/DllDependenciesMacOS.py +444 -0
  678. nuitka/freezer/DllDependenciesPosix.py +242 -0
  679. nuitka/freezer/DllDependenciesWin32.py +315 -0
  680. nuitka/freezer/ImportDetection.py +359 -0
  681. nuitka/freezer/IncludedDataFiles.py +689 -0
  682. nuitka/freezer/IncludedEntryPoints.py +376 -0
  683. nuitka/freezer/Onefile.py +296 -0
  684. nuitka/freezer/Standalone.py +520 -0
  685. nuitka/freezer/__init__.py +19 -0
  686. nuitka/importing/IgnoreListing.py +449 -0
  687. nuitka/importing/ImportCache.py +95 -0
  688. nuitka/importing/ImportResolving.py +186 -0
  689. nuitka/importing/Importing.py +1200 -0
  690. nuitka/importing/PreloadedPackages.py +164 -0
  691. nuitka/importing/Recursion.py +611 -0
  692. nuitka/importing/StandardLibrary.py +429 -0
  693. nuitka/importing/__init__.py +19 -0
  694. nuitka/nodes/AsyncgenNodes.py +107 -0
  695. nuitka/nodes/AttributeLookupNodes.py +124 -0
  696. nuitka/nodes/AttributeNodes.py +386 -0
  697. nuitka/nodes/AttributeNodesGenerated.py +10734 -0
  698. nuitka/nodes/BuiltinAllNodes.py +115 -0
  699. nuitka/nodes/BuiltinAnyNodes.py +124 -0
  700. nuitka/nodes/BuiltinComplexNodes.py +83 -0
  701. nuitka/nodes/BuiltinDecodingNodes.py +52 -0
  702. nuitka/nodes/BuiltinDecoratorNodes.py +85 -0
  703. nuitka/nodes/BuiltinDictNodes.py +140 -0
  704. nuitka/nodes/BuiltinFormatNodes.py +159 -0
  705. nuitka/nodes/BuiltinHashNodes.py +63 -0
  706. nuitka/nodes/BuiltinInputNodes.py +39 -0
  707. nuitka/nodes/BuiltinIntegerNodes.py +170 -0
  708. nuitka/nodes/BuiltinIteratorNodes.py +391 -0
  709. nuitka/nodes/BuiltinLenNodes.py +61 -0
  710. nuitka/nodes/BuiltinNextNodes.py +111 -0
  711. nuitka/nodes/BuiltinOpenNodes.py +148 -0
  712. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +7367 -0
  713. nuitka/nodes/BuiltinRangeNodes.py +690 -0
  714. nuitka/nodes/BuiltinRefNodes.py +314 -0
  715. nuitka/nodes/BuiltinSumNodes.py +104 -0
  716. nuitka/nodes/BuiltinTypeNodes.py +454 -0
  717. nuitka/nodes/BuiltinVarsNodes.py +44 -0
  718. nuitka/nodes/BytesNodes.py +829 -0
  719. nuitka/nodes/CallNodes.py +217 -0
  720. nuitka/nodes/Checkers.py +55 -0
  721. nuitka/nodes/ChildrenHavingMixins.py +21576 -0
  722. nuitka/nodes/ClassNodes.py +286 -0
  723. nuitka/nodes/CodeObjectSpecs.py +230 -0
  724. nuitka/nodes/ComparisonNodes.py +687 -0
  725. nuitka/nodes/ConditionalNodes.py +884 -0
  726. nuitka/nodes/ConstantRefNodes.py +1717 -0
  727. nuitka/nodes/ContainerMakingNodes.py +408 -0
  728. nuitka/nodes/ContainerOperationNodes.py +87 -0
  729. nuitka/nodes/CoroutineNodes.py +144 -0
  730. nuitka/nodes/CtypesNodes.py +51 -0
  731. nuitka/nodes/DictionaryNodes.py +1513 -0
  732. nuitka/nodes/ExceptionNodes.py +393 -0
  733. nuitka/nodes/ExecEvalNodes.py +229 -0
  734. nuitka/nodes/ExpressionBases.py +1301 -0
  735. nuitka/nodes/ExpressionBasesGenerated.py +2103 -0
  736. nuitka/nodes/ExpressionShapeMixins.py +886 -0
  737. nuitka/nodes/FrameNodes.py +413 -0
  738. nuitka/nodes/FunctionAttributeNodes.py +102 -0
  739. nuitka/nodes/FunctionNodes.py +1303 -0
  740. nuitka/nodes/FutureSpecs.py +224 -0
  741. nuitka/nodes/GeneratorNodes.py +201 -0
  742. nuitka/nodes/GlobalsLocalsNodes.py +209 -0
  743. nuitka/nodes/HardImportNodesGenerated.py +3599 -0
  744. nuitka/nodes/ImportHardNodes.py +185 -0
  745. nuitka/nodes/ImportNodes.py +1366 -0
  746. nuitka/nodes/IndicatorMixins.py +79 -0
  747. nuitka/nodes/InjectCNodes.py +51 -0
  748. nuitka/nodes/IterationHandles.py +407 -0
  749. nuitka/nodes/KeyValuePairNodes.py +378 -0
  750. nuitka/nodes/ListOperationNodes.py +525 -0
  751. nuitka/nodes/LocalsDictNodes.py +717 -0
  752. nuitka/nodes/LocalsScopes.py +505 -0
  753. nuitka/nodes/LoopNodes.py +445 -0
  754. nuitka/nodes/MatchNodes.py +60 -0
  755. nuitka/nodes/ModuleAttributeNodes.py +180 -0
  756. nuitka/nodes/ModuleNodes.py +1137 -0
  757. nuitka/nodes/NetworkxNodes.py +45 -0
  758. nuitka/nodes/NodeBases.py +890 -0
  759. nuitka/nodes/NodeMakingHelpers.py +481 -0
  760. nuitka/nodes/NodeMetaClasses.py +172 -0
  761. nuitka/nodes/OperatorNodes.py +944 -0
  762. nuitka/nodes/OperatorNodesUnary.py +403 -0
  763. nuitka/nodes/OsSysNodes.py +215 -0
  764. nuitka/nodes/OutlineNodes.py +372 -0
  765. nuitka/nodes/PackageMetadataNodes.py +982 -0
  766. nuitka/nodes/PackageResourceNodes.py +424 -0
  767. nuitka/nodes/PrintNodes.py +105 -0
  768. nuitka/nodes/ReturnNodes.py +255 -0
  769. nuitka/nodes/SideEffectNodes.py +139 -0
  770. nuitka/nodes/SliceNodes.py +386 -0
  771. nuitka/nodes/StatementBasesGenerated.py +3419 -0
  772. nuitka/nodes/StatementNodes.py +316 -0
  773. nuitka/nodes/StrNodes.py +919 -0
  774. nuitka/nodes/StringConcatenationNodes.py +103 -0
  775. nuitka/nodes/SubscriptNodes.py +245 -0
  776. nuitka/nodes/TensorflowNodes.py +38 -0
  777. nuitka/nodes/TryNodes.py +519 -0
  778. nuitka/nodes/TypeMatchNodes.py +65 -0
  779. nuitka/nodes/TypeNodes.py +390 -0
  780. nuitka/nodes/VariableAssignNodes.py +1177 -0
  781. nuitka/nodes/VariableDelNodes.py +320 -0
  782. nuitka/nodes/VariableNameNodes.py +153 -0
  783. nuitka/nodes/VariableRefNodes.py +895 -0
  784. nuitka/nodes/VariableReleaseNodes.py +153 -0
  785. nuitka/nodes/YieldNodes.py +121 -0
  786. nuitka/nodes/__init__.py +19 -0
  787. nuitka/nodes/shapes/BuiltinTypeShapes.py +4290 -0
  788. nuitka/nodes/shapes/ControlFlowDescriptions.py +199 -0
  789. nuitka/nodes/shapes/IteratorShapes.py +71 -0
  790. nuitka/nodes/shapes/ShapeMixins.py +255 -0
  791. nuitka/nodes/shapes/StandardShapes.py +1384 -0
  792. nuitka/nodes/shapes/__init__.py +19 -0
  793. nuitka/optimizations/BytecodeDemotion.py +105 -0
  794. nuitka/optimizations/FunctionInlining.py +110 -0
  795. nuitka/optimizations/Graphs.py +70 -0
  796. nuitka/optimizations/Optimization.py +363 -0
  797. nuitka/optimizations/OptimizeBuiltinCalls.py +1582 -0
  798. nuitka/optimizations/Tags.py +76 -0
  799. nuitka/optimizations/TraceCollections.py +1257 -0
  800. nuitka/optimizations/ValueTraces.py +980 -0
  801. nuitka/optimizations/__init__.py +19 -0
  802. nuitka/pgo/PGO.py +160 -0
  803. nuitka/pgo/__init__.py +19 -0
  804. nuitka/plugins/PluginBase.py +1924 -0
  805. nuitka/plugins/Plugins.py +2007 -0
  806. nuitka/plugins/YamlPluginBase.py +121 -0
  807. nuitka/plugins/__init__.py +19 -0
  808. nuitka/plugins/standard/AntiBloatPlugin.py +1024 -0
  809. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +95 -0
  810. nuitka/plugins/standard/DataFilesPlugin.py +311 -0
  811. nuitka/plugins/standard/DelvewheelPlugin.py +150 -0
  812. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  813. nuitka/plugins/standard/DillPlugin/cloudpickle-postLoad.py +67 -0
  814. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +223 -0
  815. nuitka/plugins/standard/DillPlugin.py +137 -0
  816. nuitka/plugins/standard/DllFilesPlugin.py +527 -0
  817. nuitka/plugins/standard/EnumPlugin.py +64 -0
  818. nuitka/plugins/standard/EventletPlugin.py +57 -0
  819. nuitka/plugins/standard/GeventPlugin.py +64 -0
  820. nuitka/plugins/standard/GiPlugin.py +118 -0
  821. nuitka/plugins/standard/GlfwPlugin.py +138 -0
  822. nuitka/plugins/standard/ImplicitImports.py +845 -0
  823. nuitka/plugins/standard/KivyPlugin.py +141 -0
  824. nuitka/plugins/standard/MatplotlibPlugin.py +256 -0
  825. nuitka/plugins/standard/MultiprocessingPlugin.py +199 -0
  826. nuitka/plugins/standard/NumpyPlugin.py +35 -0
  827. nuitka/plugins/standard/OptionsNannyPlugin.py +158 -0
  828. nuitka/plugins/standard/PbrPlugin.py +62 -0
  829. nuitka/plugins/standard/PkgResourcesPlugin.py +162 -0
  830. nuitka/plugins/standard/PlaywrightPlugin.py +179 -0
  831. nuitka/plugins/standard/PmwPlugin.py +248 -0
  832. nuitka/plugins/standard/PySidePyQtPlugin.py +1666 -0
  833. nuitka/plugins/standard/PywebViewPlugin.py +81 -0
  834. nuitka/plugins/standard/SpacyPlugin.py +137 -0
  835. nuitka/plugins/standard/TensorflowPlugin.py +35 -0
  836. nuitka/plugins/standard/TkinterPlugin.py +416 -0
  837. nuitka/plugins/standard/TorchPlugin.py +35 -0
  838. nuitka/plugins/standard/TransformersPlugin.py +121 -0
  839. nuitka/plugins/standard/TrioPlugin.py +33 -0
  840. nuitka/plugins/standard/UpxPlugin.py +174 -0
  841. nuitka/plugins/standard/__init__.py +19 -0
  842. nuitka/plugins/standard/standard.nuitka-package.config.yml +9313 -0
  843. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +78 -0
  844. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +468 -0
  845. nuitka/reports/CompilationReportReader.py +83 -0
  846. nuitka/reports/LicenseReport.rst.j2 +41 -0
  847. nuitka/reports/Reports.py +961 -0
  848. nuitka/reports/__init__.py +19 -0
  849. nuitka/specs/BuiltinBytesOperationSpecs.py +180 -0
  850. nuitka/specs/BuiltinDictOperationSpecs.py +82 -0
  851. nuitka/specs/BuiltinListOperationSpecs.py +80 -0
  852. nuitka/specs/BuiltinParameterSpecs.py +831 -0
  853. nuitka/specs/BuiltinStrOperationSpecs.py +181 -0
  854. nuitka/specs/BuiltinTypeOperationSpecs.py +34 -0
  855. nuitka/specs/BuiltinUnicodeOperationSpecs.py +123 -0
  856. nuitka/specs/HardImportSpecs.py +236 -0
  857. nuitka/specs/ParameterSpecs.py +630 -0
  858. nuitka/specs/__init__.py +19 -0
  859. nuitka/tools/Basics.py +55 -0
  860. nuitka/tools/__init__.py +19 -0
  861. nuitka/tools/commercial/__init__.py +21 -0
  862. nuitka/tools/data_composer/DataComposer.py +593 -0
  863. nuitka/tools/data_composer/__init__.py +19 -0
  864. nuitka/tools/data_composer/__main__.py +41 -0
  865. nuitka/tools/environments/CreateEnvironment.py +69 -0
  866. nuitka/tools/environments/Virtualenv.py +158 -0
  867. nuitka/tools/environments/__init__.py +19 -0
  868. nuitka/tools/general/__init__.py +19 -0
  869. nuitka/tools/general/dll_report/__init__.py +19 -0
  870. nuitka/tools/general/dll_report/__main__.py +83 -0
  871. nuitka/tools/general/find_module/FindModuleCode.py +127 -0
  872. nuitka/tools/general/find_module/__init__.py +19 -0
  873. nuitka/tools/general/generate_header/GenerateHeader.py +73 -0
  874. nuitka/tools/general/generate_header/__init__.py +19 -0
  875. nuitka/tools/onefile_compressor/OnefileCompressor.py +390 -0
  876. nuitka/tools/onefile_compressor/__init__.py +19 -0
  877. nuitka/tools/onefile_compressor/__main__.py +41 -0
  878. nuitka/tools/podman/Podman.py +55 -0
  879. nuitka/tools/podman/__init__.py +19 -0
  880. nuitka/tools/podman/__main__.py +425 -0
  881. nuitka/tools/profiler/__init__.py +19 -0
  882. nuitka/tools/profiler/__main__.py +93 -0
  883. nuitka/tools/scanning/DisplayDistributions.py +39 -0
  884. nuitka/tools/scanning/DisplayPackageDLLs.py +151 -0
  885. nuitka/tools/scanning/DisplayPackageData.py +73 -0
  886. nuitka/tools/scanning/__init__.py +19 -0
  887. nuitka/tools/specialize/CTypeDescriptions.py +1928 -0
  888. nuitka/tools/specialize/Common.py +380 -0
  889. nuitka/tools/specialize/SpecializeC.py +1483 -0
  890. nuitka/tools/specialize/SpecializePython.py +1151 -0
  891. nuitka/tools/specialize/__init__.py +19 -0
  892. nuitka/tools/testing/Common.py +2007 -0
  893. nuitka/tools/testing/Constructs.py +53 -0
  894. nuitka/tools/testing/DocTests.py +156 -0
  895. nuitka/tools/testing/OutputComparison.py +313 -0
  896. nuitka/tools/testing/Pythons.py +34 -0
  897. nuitka/tools/testing/RuntimeTracing.py +260 -0
  898. nuitka/tools/testing/SearchModes.py +208 -0
  899. nuitka/tools/testing/Valgrind.py +103 -0
  900. nuitka/tools/testing/__init__.py +19 -0
  901. nuitka/tools/testing/check_reference_counts/__init__.py +19 -0
  902. nuitka/tools/testing/check_reference_counts/__main__.py +107 -0
  903. nuitka/tools/testing/compare_with_cpython/__init__.py +19 -0
  904. nuitka/tools/testing/compare_with_cpython/__main__.py +942 -0
  905. nuitka/tools/testing/find_sxs_modules/__init__.py +19 -0
  906. nuitka/tools/testing/find_sxs_modules/__main__.py +73 -0
  907. nuitka/tools/testing/measure_construct_performance/__init__.py +19 -0
  908. nuitka/tools/testing/measure_construct_performance/__main__.py +288 -0
  909. nuitka/tools/testing/run_nuitka_tests/__init__.py +19 -0
  910. nuitka/tools/testing/run_nuitka_tests/__main__.py +1091 -0
  911. nuitka/tools/watch/AutoStage.py +145 -0
  912. nuitka/tools/watch/Common.py +55 -0
  913. nuitka/tools/watch/Conda.py +125 -0
  914. nuitka/tools/watch/GitHub.py +113 -0
  915. nuitka/tools/watch/Pacman.py +73 -0
  916. nuitka/tools/watch/Pipenv.py +145 -0
  917. nuitka/tools/watch/__init__.py +19 -0
  918. nuitka/tools/watch/__main__.py +615 -0
  919. nuitka/tree/Building.py +1459 -0
  920. nuitka/tree/ComplexCallHelperFunctions.py +2150 -0
  921. nuitka/tree/Extractions.py +48 -0
  922. nuitka/tree/FutureSpecState.py +71 -0
  923. nuitka/tree/InternalModule.py +96 -0
  924. nuitka/tree/Operations.py +45 -0
  925. nuitka/tree/ReformulationAssertStatements.py +97 -0
  926. nuitka/tree/ReformulationAssignmentStatements.py +1260 -0
  927. nuitka/tree/ReformulationBooleanExpressions.py +97 -0
  928. nuitka/tree/ReformulationCallExpressions.py +314 -0
  929. nuitka/tree/ReformulationClasses.py +407 -0
  930. nuitka/tree/ReformulationClasses3.py +1149 -0
  931. nuitka/tree/ReformulationComparisonExpressions.py +174 -0
  932. nuitka/tree/ReformulationContractionExpressions.py +676 -0
  933. nuitka/tree/ReformulationDictionaryCreation.py +304 -0
  934. nuitka/tree/ReformulationExecStatements.py +386 -0
  935. nuitka/tree/ReformulationForLoopStatements.py +215 -0
  936. nuitka/tree/ReformulationFunctionStatements.py +931 -0
  937. nuitka/tree/ReformulationImportStatements.py +333 -0
  938. nuitka/tree/ReformulationLambdaExpressions.py +185 -0
  939. nuitka/tree/ReformulationMatchStatements.py +797 -0
  940. nuitka/tree/ReformulationMultidist.py +80 -0
  941. nuitka/tree/ReformulationNamespacePackages.py +239 -0
  942. nuitka/tree/ReformulationPrintStatements.py +127 -0
  943. nuitka/tree/ReformulationSequenceCreation.py +438 -0
  944. nuitka/tree/ReformulationSubscriptExpressions.py +123 -0
  945. nuitka/tree/ReformulationTryExceptStatements.py +418 -0
  946. nuitka/tree/ReformulationTryFinallyStatements.py +239 -0
  947. nuitka/tree/ReformulationWhileLoopStatements.py +160 -0
  948. nuitka/tree/ReformulationWithStatements.py +382 -0
  949. nuitka/tree/ReformulationYieldExpressions.py +133 -0
  950. nuitka/tree/SourceHandling.py +476 -0
  951. nuitka/tree/SyntaxErrors.py +143 -0
  952. nuitka/tree/TreeHelpers.py +720 -0
  953. nuitka/tree/VariableClosure.py +483 -0
  954. nuitka/tree/__init__.py +19 -0
  955. nuitka/utils/AppDirs.py +104 -0
  956. nuitka/utils/CStrings.py +208 -0
  957. nuitka/utils/CommandLineOptions.py +207 -0
  958. nuitka/utils/Distributions.py +728 -0
  959. nuitka/utils/Download.py +217 -0
  960. nuitka/utils/Execution.py +517 -0
  961. nuitka/utils/FileOperations.py +1587 -0
  962. nuitka/utils/Hashing.py +137 -0
  963. nuitka/utils/Images.py +79 -0
  964. nuitka/utils/Importing.py +335 -0
  965. nuitka/utils/InlineCopies.py +52 -0
  966. nuitka/utils/InstalledPythons.py +254 -0
  967. nuitka/utils/InstanceCounters.py +86 -0
  968. nuitka/utils/Jinja2.py +158 -0
  969. nuitka/utils/Json.py +40 -0
  970. nuitka/utils/MacOSApp.py +134 -0
  971. nuitka/utils/MemoryUsage.py +165 -0
  972. nuitka/utils/ModuleNames.py +317 -0
  973. nuitka/utils/PackageResources.py +44 -0
  974. nuitka/utils/ReExecute.py +152 -0
  975. nuitka/utils/Rest.py +60 -0
  976. nuitka/utils/SharedLibraries.py +1014 -0
  977. nuitka/utils/Shebang.py +113 -0
  978. nuitka/utils/Signing.py +144 -0
  979. nuitka/utils/SlotMetaClasses.py +57 -0
  980. nuitka/utils/StaticLibraries.py +260 -0
  981. nuitka/utils/ThreadedExecutor.py +87 -0
  982. nuitka/utils/Timing.py +102 -0
  983. nuitka/utils/Utils.py +483 -0
  984. nuitka/utils/WindowsFileUsage.py +337 -0
  985. nuitka/utils/WindowsResources.py +652 -0
  986. nuitka/utils/Yaml.py +247 -0
  987. nuitka/utils/__init__.py +19 -0
  988. nuitka_winsvc-2.7.7.data/scripts/nuitka-run.cmd +24 -0
  989. nuitka_winsvc-2.7.7.data/scripts/nuitka.cmd +30 -0
  990. nuitka_winsvc-2.7.7.dist-info/METADATA +115 -0
  991. nuitka_winsvc-2.7.7.dist-info/RECORD +995 -0
  992. nuitka_winsvc-2.7.7.dist-info/WHEEL +5 -0
  993. nuitka_winsvc-2.7.7.dist-info/entry_points.txt +7 -0
  994. nuitka_winsvc-2.7.7.dist-info/licenses/LICENSE.txt +202 -0
  995. nuitka_winsvc-2.7.7.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1458 @@
1
+ // Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ #ifndef __NUITKA_EXCEPTIONS_H__
4
+ #define __NUITKA_EXCEPTIONS_H__
5
+
6
+ // Exception helpers for generated code and compiled code helpers.
7
+
8
+ // Fundamental, because we use it for print style debugging in everything.
9
+ #include "nuitka/checkers.h"
10
+ #include "nuitka/constants.h"
11
+ #include "nuitka/printing.h"
12
+
13
+ // Did an error occur.
14
+ NUITKA_MAY_BE_UNUSED static inline bool HAS_ERROR_OCCURRED(PyThreadState const *tstate) {
15
+ #if PYTHON_VERSION < 0x3c0
16
+ return tstate->curexc_type != NULL;
17
+ #else
18
+ return tstate->current_exception != NULL;
19
+ #endif
20
+ }
21
+
22
+ // Get the error type occurred, no reference given.
23
+ NUITKA_MAY_BE_UNUSED static inline PyObject *GET_ERROR_OCCURRED(PyThreadState const *const tstate) {
24
+ #if PYTHON_VERSION < 0x3c0
25
+ return tstate->curexc_type;
26
+ #else
27
+ return tstate->current_exception ? (PyObject *)PyExceptionInstance_Class(tstate->current_exception) : NULL;
28
+ #endif
29
+ }
30
+
31
+ // Checks that an exception value is normalized or NULL.
32
+ NUITKA_MAY_BE_UNUSED static inline void ASSERT_NORMALIZED_EXCEPTION_VALUE_X(PyObject const *const exception_value) {
33
+ CHECK_OBJECT_X(exception_value);
34
+ assert(exception_value == NULL || PyExceptionInstance_Check(exception_value));
35
+ }
36
+
37
+ // Checks that an exception value is normalized and not NULL.
38
+ NUITKA_MAY_BE_UNUSED static inline void ASSERT_NORMALIZED_EXCEPTION_VALUE(PyObject *exception_value) {
39
+ CHECK_OBJECT(exception_value);
40
+ assert(PyExceptionInstance_Check(exception_value));
41
+ }
42
+
43
+ // Clear error, which likely set, similar to "_PyErr_Clear(tstate)" and "PyErr_Clear"
44
+ NUITKA_MAY_BE_UNUSED static inline void CLEAR_ERROR_OCCURRED(PyThreadState *tstate) {
45
+ #if PYTHON_VERSION < 0x3c0
46
+ PyObject *old_type = tstate->curexc_type;
47
+ PyObject *old_value = tstate->curexc_value;
48
+ PyObject *old_tb = tstate->curexc_traceback;
49
+
50
+ tstate->curexc_type = NULL;
51
+ tstate->curexc_value = NULL;
52
+ tstate->curexc_traceback = NULL;
53
+
54
+ Py_XDECREF(old_type);
55
+ Py_XDECREF(old_value);
56
+ Py_XDECREF(old_tb);
57
+ #else
58
+ PyObject *old_exception_value = tstate->current_exception;
59
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
60
+
61
+ tstate->current_exception = NULL;
62
+
63
+ Py_XDECREF(old_exception_value);
64
+ #endif
65
+ }
66
+
67
+ // Clear error, which is not likely set, use "CLEAR_ERROR_OCCURRED" not sure there is an error.
68
+ NUITKA_MAY_BE_UNUSED static inline bool DROP_ERROR_OCCURRED(PyThreadState *tstate) {
69
+
70
+ #if PYTHON_VERSION < 0x3c0
71
+ if (unlikely(tstate->curexc_type != NULL)) {
72
+ PyObject *old_type = tstate->curexc_type;
73
+ PyObject *old_value = tstate->curexc_value;
74
+ PyObject *old_tb = tstate->curexc_traceback;
75
+
76
+ tstate->curexc_type = NULL;
77
+ tstate->curexc_value = NULL;
78
+ tstate->curexc_traceback = NULL;
79
+
80
+ Py_DECREF(old_type);
81
+ Py_XDECREF(old_value);
82
+ Py_XDECREF(old_tb);
83
+
84
+ return true;
85
+ }
86
+ #else
87
+ if (unlikely(tstate->current_exception != NULL)) {
88
+ PyObject *old_exception_value = tstate->current_exception;
89
+ ASSERT_NORMALIZED_EXCEPTION_VALUE(old_exception_value);
90
+
91
+ tstate->current_exception = NULL;
92
+
93
+ Py_DECREF(old_exception_value);
94
+
95
+ return true;
96
+ }
97
+ #endif
98
+ return false;
99
+ }
100
+
101
+ #if PYTHON_VERSION < 0x3c0
102
+ // Fetch the current error into object variables, transfers reference coming from tstate ownership
103
+ NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED(PyThreadState *tstate, PyObject **exception_type,
104
+ PyObject **exception_value,
105
+ PyTracebackObject **exception_traceback) {
106
+ *exception_type = tstate->curexc_type;
107
+ *exception_value = tstate->curexc_value;
108
+ *exception_traceback = (PyTracebackObject *)tstate->curexc_traceback;
109
+
110
+ #if _DEBUG_EXCEPTIONS
111
+ PRINT_STRING("FETCH_ERROR_OCCURRED:\n");
112
+ PRINT_CURRENT_EXCEPTION();
113
+ #endif
114
+
115
+ tstate->curexc_type = NULL;
116
+ tstate->curexc_value = NULL;
117
+ tstate->curexc_traceback = NULL;
118
+ }
119
+
120
+ // Fetch the current error into object variables.
121
+ NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED_UNTRACED(PyThreadState *tstate, PyObject **exception_type,
122
+ PyObject **exception_value,
123
+ PyTracebackObject **exception_traceback) {
124
+ *exception_type = tstate->curexc_type;
125
+ *exception_value = tstate->curexc_value;
126
+ *exception_traceback = (PyTracebackObject *)tstate->curexc_traceback;
127
+
128
+ tstate->curexc_type = NULL;
129
+ tstate->curexc_value = NULL;
130
+ tstate->curexc_traceback = NULL;
131
+ }
132
+
133
+ NUITKA_MAY_BE_UNUSED static void RESTORE_ERROR_OCCURRED(PyThreadState *tstate, PyObject *exception_type,
134
+ PyObject *exception_value,
135
+ PyTracebackObject *exception_traceback) {
136
+ PyObject *old_exception_type = tstate->curexc_type;
137
+ PyObject *old_exception_value = tstate->curexc_value;
138
+ PyObject *old_exception_traceback = tstate->curexc_traceback;
139
+
140
+ tstate->curexc_type = exception_type;
141
+ tstate->curexc_value = exception_value;
142
+ tstate->curexc_traceback = (PyObject *)exception_traceback;
143
+
144
+ #if _DEBUG_EXCEPTIONS
145
+ PRINT_STRING("RESTORE_ERROR_OCCURRED:\n");
146
+ PRINT_CURRENT_EXCEPTION();
147
+ #endif
148
+
149
+ Py_XDECREF(old_exception_type);
150
+ Py_XDECREF(old_exception_value);
151
+ Py_XDECREF(old_exception_traceback);
152
+ }
153
+
154
+ NUITKA_MAY_BE_UNUSED static void RESTORE_ERROR_OCCURRED_UNTRACED(PyThreadState *tstate, PyObject *exception_type,
155
+ PyObject *exception_value,
156
+ PyTracebackObject *exception_traceback) {
157
+ PyObject *old_exception_type = tstate->curexc_type;
158
+ PyObject *old_exception_value = tstate->curexc_value;
159
+ PyObject *old_exception_traceback = tstate->curexc_traceback;
160
+
161
+ tstate->curexc_type = exception_type;
162
+ tstate->curexc_value = exception_value;
163
+ tstate->curexc_traceback = (PyObject *)exception_traceback;
164
+
165
+ Py_XDECREF(old_exception_type);
166
+ Py_XDECREF(old_exception_value);
167
+ Py_XDECREF(old_exception_traceback);
168
+ }
169
+ #endif
170
+
171
+ struct Nuitka_FrameObject;
172
+
173
+ extern PyTracebackObject *MAKE_TRACEBACK(struct Nuitka_FrameObject *frame, int lineno);
174
+
175
+ // Add a frame to an existing exception trace-back.
176
+ NUITKA_MAY_BE_UNUSED static PyTracebackObject *ADD_TRACEBACK(PyTracebackObject *exception_tb,
177
+ struct Nuitka_FrameObject *frame, int lineno) {
178
+ CHECK_OBJECT(exception_tb);
179
+ CHECK_OBJECT(frame);
180
+
181
+ PyTracebackObject *traceback_new = MAKE_TRACEBACK(frame, lineno);
182
+ traceback_new->tb_next = exception_tb;
183
+ Py_INCREF(exception_tb);
184
+ return traceback_new;
185
+ }
186
+
187
+ // Need some wrapper functions for accessing exception type, value, and traceback
188
+ // due to changes in Python 3.7
189
+
190
+ #if PYTHON_VERSION < 0x370
191
+ #define EXC_TYPE(x) (x->exc_type)
192
+ #define EXC_VALUE(x) (x->exc_value)
193
+ #define EXC_TRACEBACK(x) ((PyTracebackObject *)(x->exc_traceback))
194
+ #define EXC_TRACEBACK_PTR(x) ((PyTracebackObject **)(&x->exc_traceback))
195
+ #define SET_EXC_TRACEBACK(x, tb) x->exc_traceback = (PyObject *)tb
196
+ #elif PYTHON_VERSION < 0x3b0
197
+ #define EXC_TYPE(x) (x->exc_state.exc_type)
198
+ #define EXC_VALUE(x) (x->exc_state.exc_value)
199
+ #define EXC_TRACEBACK(x) ((PyTracebackObject *)(x->exc_state.exc_traceback))
200
+ #define EXC_TRACEBACK_PTR(x) ((PyTracebackObject **)(&x->exc_state.exc_traceback))
201
+ #define SET_EXC_TRACEBACK(x, tb) x->exc_state.exc_traceback = (PyObject *)tb
202
+ #else
203
+ #define EXC_TYPE(x) ((PyObject *)Py_TYPE(x->exc_state.exc_value))
204
+ #define EXC_VALUE(x) (x->exc_state.exc_value)
205
+ #endif
206
+
207
+ #if PYTHON_VERSION < 0x370
208
+ #define EXC_TYPE_F(x) (x->m_frame->m_frame.f_exc_type)
209
+ #define EXC_VALUE_F(x) (x->m_frame->m_frame.f_exc_value)
210
+ #define EXC_TRACEBACK_F(x) (x->m_frame->m_frame.f_exc_traceback)
211
+ #define ASSIGN_EXC_TRACEBACK_F(x, tb) x->m_frame->m_frame.f_exc_traceback = (PyObject *)(tb)
212
+ #elif PYTHON_VERSION < 0x3b0
213
+ #define EXC_TYPE_F(x) (x->m_exc_state.exception_type)
214
+ #define EXC_VALUE_F(x) (x->m_exc_state.exception_value)
215
+ #define EXC_TRACEBACK_F(x) (x->m_exc_state.exception_tb)
216
+ #define ASSIGN_EXC_TRACEBACK_F(x, tb) x->m_exc_state.exception_tb = (PyTracebackObject *)(tb)
217
+ #else
218
+ #define EXC_VALUE_F(x) (x->m_exc_state.exception_value)
219
+ #endif
220
+
221
+ #if PYTHON_VERSION < 0x3b0
222
+ struct Nuitka_ExceptionStackItem {
223
+ PyObject *exception_type;
224
+ PyObject *exception_value;
225
+ PyTracebackObject *exception_tb;
226
+ };
227
+
228
+ #if defined(__cplusplus)
229
+ static const struct Nuitka_ExceptionStackItem Nuitka_ExceptionStackItem_Empty = {NULL, NULL, NULL};
230
+ #else
231
+ #define Nuitka_ExceptionStackItem_Empty \
232
+ (struct Nuitka_ExceptionStackItem) { .exception_type = NULL, .exception_value = NULL, .exception_tb = NULL }
233
+ #endif
234
+ #else
235
+ struct Nuitka_ExceptionStackItem {
236
+ PyObject *exception_value;
237
+ };
238
+
239
+ #if defined(__cplusplus)
240
+ static const struct Nuitka_ExceptionStackItem Nuitka_ExceptionStackItem_Empty = {NULL};
241
+ #else
242
+ #define Nuitka_ExceptionStackItem_Empty \
243
+ (struct Nuitka_ExceptionStackItem) { .exception_value = NULL }
244
+ #endif
245
+
246
+ #endif
247
+
248
+ // Helper that gets the current thread exception, for use in exception handlers
249
+ NUITKA_MAY_BE_UNUSED inline static struct Nuitka_ExceptionStackItem GET_CURRENT_EXCEPTION(PyThreadState *tstate) {
250
+ struct Nuitka_ExceptionStackItem result;
251
+ #if PYTHON_VERSION < 0x3b0
252
+ result.exception_type = EXC_TYPE(tstate);
253
+ Py_XINCREF(result.exception_type);
254
+ #endif
255
+ result.exception_value = EXC_VALUE(tstate);
256
+ Py_XINCREF(result.exception_value);
257
+ #if PYTHON_VERSION < 0x3b0
258
+ result.exception_tb = (PyTracebackObject *)EXC_TRACEBACK(tstate);
259
+ Py_XINCREF(result.exception_tb);
260
+ #endif
261
+
262
+ return result;
263
+ };
264
+
265
+ #if PYTHON_VERSION < 0x300 && !defined(_NUITKA_EXPERIMENTAL_DISABLE_SYS_EXC_VARS)
266
+ #define _NUITKA_MAINTAIN_SYS_EXC_VARS 1
267
+ #endif
268
+
269
+ // Helper that sets the current thread exception, releasing the current one, for
270
+ // use in this file only.
271
+ NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION(PyThreadState *tstate,
272
+ struct Nuitka_ExceptionStackItem *exc_state) {
273
+ #if PYTHON_VERSION < 0x3b0
274
+ CHECK_OBJECT_X(exc_state->exception_type);
275
+ #endif
276
+ CHECK_OBJECT_X(exc_state->exception_value);
277
+ #if PYTHON_VERSION < 0x3b0
278
+ CHECK_OBJECT_X(exc_state->exception_tb);
279
+ #endif
280
+
281
+ #if PYTHON_VERSION < 0x3b0
282
+ PyObject *old_type = EXC_TYPE(tstate);
283
+ #endif
284
+ PyObject *old_value = EXC_VALUE(tstate);
285
+ #if PYTHON_VERSION < 0x3b0
286
+ PyTracebackObject *old_tb = EXC_TRACEBACK(tstate);
287
+ #endif
288
+
289
+ #if PYTHON_VERSION < 0x3b0
290
+ CHECK_OBJECT_X(old_type);
291
+ #endif
292
+ CHECK_OBJECT_X(old_value);
293
+ #if PYTHON_VERSION < 0x3b0
294
+ CHECK_OBJECT_X(old_tb);
295
+ #endif
296
+
297
+ #if PYTHON_VERSION < 0x3b0
298
+ EXC_TYPE(tstate) = exc_state->exception_type;
299
+ #endif
300
+ EXC_VALUE(tstate) = exc_state->exception_value;
301
+ #if PYTHON_VERSION < 0x3b0
302
+ SET_EXC_TRACEBACK(tstate, exc_state->exception_tb);
303
+ #endif
304
+
305
+ #if _DEBUG_EXCEPTIONS
306
+ PRINT_STRING("SET_CURRENT_EXCEPTION:\n");
307
+ PRINT_PUBLISHED_EXCEPTION();
308
+ #endif
309
+
310
+ #if PYTHON_VERSION < 0x3b0
311
+ Py_XDECREF(old_type);
312
+ #endif
313
+ Py_XDECREF(old_value);
314
+ #if PYTHON_VERSION < 0x3b0
315
+ Py_XDECREF(old_tb);
316
+ #endif
317
+
318
+ #if _NUITKA_MAINTAIN_SYS_EXC_VARS
319
+ // Set sys attributes in the fastest possible way, spell-checker: ignore sysdict
320
+ PyObject *sys_dict = tstate->interp->sysdict;
321
+ CHECK_OBJECT(sys_dict);
322
+
323
+ PyDict_SetItem(sys_dict, const_str_plain_exc_type, exc_state->exception_type ? exc_state->exception_type : Py_None);
324
+ PyDict_SetItem(sys_dict, const_str_plain_exc_value,
325
+ exc_state->exception_value ? exc_state->exception_value : Py_None);
326
+ PyDict_SetItem(sys_dict, const_str_plain_exc_traceback,
327
+ exc_state->exception_tb ? (PyObject *)exc_state->exception_tb : Py_None);
328
+
329
+ if (exc_state->exception_type) {
330
+ assert(Py_REFCNT(exc_state->exception_type) >= 2);
331
+ }
332
+ if (exc_state->exception_value) {
333
+ assert(Py_REFCNT(exc_state->exception_value) >= 2);
334
+ }
335
+ if (exc_state->exception_tb) {
336
+ assert(Py_REFCNT(exc_state->exception_tb) >= 2);
337
+ }
338
+ #endif
339
+ }
340
+
341
+ // Normalize an exception, may release old values and replace them, expects
342
+ // references passed and returns them.
343
+ NUITKA_MAY_BE_UNUSED static inline void NORMALIZE_EXCEPTION(PyThreadState *tstate, PyObject **exception_type,
344
+ PyObject **exception_value,
345
+ PyTracebackObject **exception_tb);
346
+
347
+ extern PyObject *NORMALIZE_EXCEPTION_VALUE_FOR_RAISE(PyThreadState *tstate, PyObject *exception_type);
348
+
349
+ // Helper that sets the current thread exception, and has no reference passed.
350
+ // Similar to "PyErr_SetNone".
351
+ NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION_TYPE0(PyThreadState *tstate, PyObject *exception_type) {
352
+ CHECK_OBJECT(exception_type);
353
+
354
+ #if PYTHON_VERSION < 0x3c0
355
+ PyObject *old_exception_type = tstate->curexc_type;
356
+ PyObject *old_exception_value = tstate->curexc_value;
357
+ PyObject *old_exception_traceback = tstate->curexc_traceback;
358
+
359
+ tstate->curexc_type = exception_type;
360
+ Py_INCREF(exception_type);
361
+ tstate->curexc_value = NULL;
362
+ tstate->curexc_traceback = NULL;
363
+
364
+ #if _DEBUG_EXCEPTIONS
365
+ PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0:\n");
366
+ PRINT_CURRENT_EXCEPTION();
367
+ #endif
368
+
369
+ Py_XDECREF(old_exception_type);
370
+ Py_XDECREF(old_exception_value);
371
+ Py_XDECREF(old_exception_traceback);
372
+ #else
373
+ PyObject *old_exception = tstate->current_exception;
374
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception);
375
+
376
+ // TODO: Make the call, exception creation on the outside somehow.
377
+ PyObject *exception_value = NORMALIZE_EXCEPTION_VALUE_FOR_RAISE(tstate, exception_type);
378
+ ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
379
+ tstate->current_exception = exception_value;
380
+
381
+ #if _DEBUG_EXCEPTIONS
382
+ PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0:\n");
383
+ PRINT_CURRENT_EXCEPTION();
384
+ #endif
385
+
386
+ Py_XDECREF(old_exception);
387
+ #endif
388
+ }
389
+
390
+ // Same as "PyErr_SetObject" CPython API, use this instead.
391
+ NUITKA_MAY_BE_UNUSED inline static void
392
+ SET_CURRENT_EXCEPTION_TYPE0_VALUE0(PyThreadState *tstate, PyObject *exception_type, PyObject *exception_value) {
393
+ CHECK_OBJECT(exception_type);
394
+ CHECK_OBJECT(exception_value);
395
+
396
+ #if PYTHON_VERSION < 0x3c0
397
+ PyObject *old_exception_type = tstate->curexc_type;
398
+ PyObject *old_exception_value = tstate->curexc_value;
399
+ PyObject *old_exception_traceback = tstate->curexc_traceback;
400
+
401
+ tstate->curexc_type = exception_type;
402
+ Py_INCREF(exception_type);
403
+ tstate->curexc_value = exception_value;
404
+ Py_INCREF(exception_value);
405
+ tstate->curexc_traceback = NULL;
406
+
407
+ #if _DEBUG_EXCEPTIONS
408
+ PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0_VALUE0:\n");
409
+ PRINT_CURRENT_EXCEPTION();
410
+ #endif
411
+
412
+ Py_XDECREF(old_exception_type);
413
+ Py_XDECREF(old_exception_value);
414
+ Py_XDECREF(old_exception_traceback);
415
+ #else
416
+ PyObject *old_exception_value = tstate->current_exception;
417
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
418
+
419
+ // TODO: Make the call on the outside.
420
+ NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, NULL);
421
+ ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
422
+ tstate->current_exception = exception_value;
423
+ Py_INCREF(exception_value);
424
+
425
+ #if _DEBUG_EXCEPTIONS
426
+ PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE_0_VALUE0:\n");
427
+ PRINT_CURRENT_EXCEPTION();
428
+ #endif
429
+
430
+ Py_XDECREF(old_exception_value);
431
+ #endif
432
+ }
433
+
434
+ // TODO: For Python3.12 it would be nice to know it's normalized already, so we
435
+ // can avoid the call to "NORMALIZE_EXCEPTION".
436
+ NUITKA_MAY_BE_UNUSED inline static void
437
+ SET_CURRENT_EXCEPTION_TYPE0_VALUE1(PyThreadState *tstate, PyObject *exception_type, PyObject *exception_value) {
438
+ CHECK_OBJECT(exception_type);
439
+ CHECK_OBJECT(exception_value);
440
+
441
+ #if PYTHON_VERSION < 0x3c0
442
+ PyObject *old_exception_type = tstate->curexc_type;
443
+ PyObject *old_exception_value = tstate->curexc_value;
444
+ PyObject *old_exception_traceback = tstate->curexc_traceback;
445
+
446
+ tstate->curexc_type = exception_type;
447
+ Py_INCREF(exception_type);
448
+ tstate->curexc_value = exception_value;
449
+ tstate->curexc_traceback = NULL;
450
+
451
+ #if _DEBUG_EXCEPTIONS
452
+ PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0_VALUE1:\n");
453
+ PRINT_CURRENT_EXCEPTION();
454
+ #endif
455
+
456
+ Py_XDECREF(old_exception_type);
457
+ Py_XDECREF(old_exception_value);
458
+ Py_XDECREF(old_exception_traceback);
459
+ #else
460
+ PyObject *old_exception_value = tstate->current_exception;
461
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
462
+
463
+ // TODO: Make the call, exception creation on the outside somehow.
464
+ NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, NULL);
465
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_value);
466
+ tstate->current_exception = exception_value;
467
+
468
+ #if _DEBUG_EXCEPTIONS
469
+ PRINT_STRING("SET_CURRENT_EXCEPTION_TYPE0_VALUE1:\n");
470
+ PRINT_CURRENT_EXCEPTION();
471
+ #endif
472
+
473
+ Py_XDECREF(old_exception_value);
474
+ #endif
475
+ }
476
+
477
+ // Helper that sets the current thread exception, and has no reference passed.
478
+ // Same as CPython API PyErr_SetString
479
+
480
+ NUITKA_MAY_BE_UNUSED inline static void SET_CURRENT_EXCEPTION_TYPE0_STR(PyThreadState *tstate, PyObject *exception_type,
481
+ char const *value) {
482
+ PyObject *exception_value = Nuitka_String_FromString(value);
483
+
484
+ SET_CURRENT_EXCEPTION_TYPE0_VALUE1(tstate, exception_type, exception_value);
485
+ }
486
+
487
+ // Helper that sets the current thread exception with format of one or two arg, and has no reference passed.
488
+ extern void SET_CURRENT_EXCEPTION_TYPE0_FORMAT1(PyObject *exception_type, char const *format, char const *value);
489
+ extern void SET_CURRENT_EXCEPTION_TYPE0_FORMAT2(PyObject *exception_type, char const *format, char const *value1,
490
+ char const *value2);
491
+ extern void SET_CURRENT_EXCEPTION_TYPE0_FORMAT3(PyObject *exception_type, char const *format, char const *value1,
492
+ char const *value2, char const *value3);
493
+
494
+ extern void SET_CURRENT_EXCEPTION_TYPE_COMPLAINT(char const *format, PyObject *mistyped);
495
+ extern void SET_CURRENT_EXCEPTION_TYPE_COMPLAINT_NICE(char const *format, PyObject *mistyped);
496
+
497
+ #if PYTHON_VERSION < 0x300
498
+
499
+ // Preserve the current exception as the frame to restore.
500
+ NUITKA_MAY_BE_UNUSED static inline void PRESERVE_FRAME_EXCEPTION(PyThreadState *tstate,
501
+ struct Nuitka_FrameObject *frame_object) {
502
+ PyFrameObject *frame = (PyFrameObject *)frame_object;
503
+
504
+ // Setting exception for frame if not already done.
505
+ if (frame->f_exc_type == NULL) {
506
+ if (tstate->exc_type != NULL && tstate->exc_type != Py_None) {
507
+ #if _DEBUG_EXCEPTIONS
508
+ PRINT_STRING("PRESERVE_FRAME_EXCEPTION: preserve thread exception\n");
509
+ #endif
510
+ frame->f_exc_type = tstate->exc_type;
511
+ Py_INCREF(frame->f_exc_type);
512
+ frame->f_exc_value = tstate->exc_value;
513
+ Py_XINCREF(frame->f_exc_value);
514
+ frame->f_exc_traceback = tstate->exc_traceback;
515
+ Py_XINCREF(frame->f_exc_traceback);
516
+ } else {
517
+ #if _DEBUG_EXCEPTIONS
518
+ PRINT_STRING("PRESERVE_FRAME_EXCEPTION: no exception to preserve\n");
519
+ #endif
520
+ frame->f_exc_type = Py_None;
521
+ Py_INCREF_IMMORTAL(frame->f_exc_type);
522
+ frame->f_exc_value = NULL;
523
+ frame->f_exc_traceback = NULL;
524
+ }
525
+ }
526
+ #if _DEBUG_EXCEPTIONS
527
+ else {
528
+ PRINT_STRING("PRESERVE_FRAME_EXCEPTION: already preserving\n");
529
+ }
530
+
531
+ PRINT_ITEM((PyObject *)frame_object);
532
+ PRINT_NEW_LINE();
533
+ PRINT_EXCEPTION(frame->f_exc_type, frame->f_exc_value, (PyTracebackObject *)frame->f_exc_traceback);
534
+ #endif
535
+ }
536
+
537
+ // Restore a previously preserved exception to the frame.
538
+ NUITKA_MAY_BE_UNUSED static inline void RESTORE_FRAME_EXCEPTION(PyThreadState *tstate,
539
+ struct Nuitka_FrameObject *frame_object) {
540
+ PyFrameObject *frame = (PyFrameObject *)frame_object;
541
+
542
+ if (frame->f_exc_type) {
543
+ #if _DEBUG_EXCEPTIONS
544
+ PRINT_STRING("RESTORE_FRAME_EXCEPTION: restoring preserved\n");
545
+ PRINT_ITEM((PyObject *)frame_object);
546
+ PRINT_NEW_LINE();
547
+ #endif
548
+
549
+ struct Nuitka_ExceptionStackItem exc_state;
550
+
551
+ exc_state.exception_type = frame->f_exc_type;
552
+ exc_state.exception_value = frame->f_exc_value;
553
+ exc_state.exception_tb = (PyTracebackObject *)frame->f_exc_traceback;
554
+
555
+ SET_CURRENT_EXCEPTION(tstate, &exc_state);
556
+
557
+ frame->f_exc_type = NULL;
558
+ frame->f_exc_value = NULL;
559
+ frame->f_exc_traceback = NULL;
560
+ }
561
+ #if _DEBUG_EXCEPTIONS
562
+ else {
563
+ PRINT_STRING("RESTORE_FRAME_EXCEPTION: nothing to restore\n");
564
+ PRINT_ITEM((PyObject *)frame_object);
565
+ PRINT_NEW_LINE();
566
+ }
567
+ #endif
568
+ }
569
+
570
+ #endif
571
+
572
+ // Similar to "PyException_SetTraceback", only done for Python3.
573
+ #if PYTHON_VERSION < 0x300
574
+ #define ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_value, exception_tb) ;
575
+ #else
576
+ NUITKA_MAY_BE_UNUSED static inline void ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(PyObject *exception_value,
577
+ PyTracebackObject *exception_tb) {
578
+ CHECK_OBJECT(exception_value);
579
+ CHECK_OBJECT_X(exception_tb);
580
+
581
+ if (exception_tb == (PyTracebackObject *)Py_None) {
582
+ exception_tb = NULL;
583
+ }
584
+
585
+ assert(PyExceptionInstance_Check(exception_value));
586
+ assert(exception_tb == NULL || PyTraceBack_Check(exception_tb));
587
+
588
+ PyBaseExceptionObject *e = (PyBaseExceptionObject *)exception_value;
589
+
590
+ PyObject *old = e->traceback;
591
+ Py_XINCREF(exception_tb);
592
+ e->traceback = (PyObject *)exception_tb;
593
+ Py_XDECREF(old);
594
+ }
595
+
596
+ // Much like "PyException_GetTraceback", but does not give a reference.
597
+ NUITKA_MAY_BE_UNUSED static inline PyTracebackObject *GET_EXCEPTION_TRACEBACK(PyObject *exception_value) {
598
+ CHECK_OBJECT(exception_value);
599
+ assert(PyExceptionInstance_Check(exception_value));
600
+
601
+ PyBaseExceptionObject *exc_object = (PyBaseExceptionObject *)(exception_value);
602
+ return (PyTracebackObject *)exc_object->traceback;
603
+ }
604
+
605
+ #endif
606
+
607
+ NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_BOOL_SINGLE(PyThreadState *tstate, PyObject *exception_value,
608
+ PyObject *exception_checked);
609
+
610
+ NUITKA_MAY_BE_UNUSED static bool _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(PyThreadState *tstate, PyObject *exception_type) {
611
+ #if PYTHON_VERSION < 0x3c0
612
+ PyObject *exception_current = tstate->curexc_type;
613
+ #else
614
+ PyObject *exception_current = tstate->current_exception;
615
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_current);
616
+ #endif
617
+ if (exception_current == NULL) {
618
+ return true;
619
+ } else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_current, exception_type)) {
620
+ CHECK_OBJECT(exception_current);
621
+
622
+ #if PYTHON_VERSION < 0x3c0
623
+ // Clear the exception first, we believe we know it doesn't have side effects.
624
+ Py_DECREF(exception_current);
625
+ tstate->curexc_type = NULL;
626
+
627
+ PyObject *old_value = tstate->curexc_value;
628
+ PyObject *old_tb = tstate->curexc_traceback;
629
+
630
+ tstate->curexc_value = NULL;
631
+ tstate->curexc_traceback = NULL;
632
+
633
+ Py_XDECREF(old_value);
634
+ Py_XDECREF(old_tb);
635
+ #else
636
+ tstate->current_exception = NULL;
637
+ Py_DECREF(exception_current);
638
+ #endif
639
+
640
+ return true;
641
+ } else {
642
+ return false;
643
+ }
644
+ }
645
+
646
+ /* Special helper that checks for StopIteration and if so clears it, only
647
+ indicating if it was set in the return value.
648
+
649
+ Equivalent to if(PyErr_ExceptionMatches(PyExc_StopIteration) PyErr_Clear();
650
+
651
+ If error is raised by built-in function next() and an iterator's __next__()
652
+ method to signal that there are no further items produced by the iterator then
653
+ it resets the TSTATE to NULL and returns True else return False
654
+
655
+ */
656
+ NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED(PyThreadState *tstate) {
657
+ return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_StopIteration);
658
+ }
659
+
660
+ /* Special helper that checks for KeyError and if so clears it, only
661
+ indicating if it was set in the return value.
662
+
663
+ Equivalent to if(PyErr_ExceptionMatches(PyExc_KeyError) PyErr_Clear();
664
+
665
+ */
666
+ NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_KEY_ERROR_OCCURRED(PyThreadState *tstate) {
667
+ return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_KeyError);
668
+ }
669
+
670
+ NUITKA_MAY_BE_UNUSED static bool CHECK_AND_CLEAR_ATTRIBUTE_ERROR_OCCURRED(PyThreadState *tstate) {
671
+ return _CHECK_AND_CLEAR_EXCEPTION_OCCURRED(tstate, PyExc_AttributeError);
672
+ }
673
+
674
+ #if PYTHON_VERSION >= 0x3c0
675
+ NUITKA_MAY_BE_UNUSED static PyObject *MAKE_TUPLE1(PyThreadState *tstate, PyObject *element1);
676
+
677
+ NUITKA_MAY_BE_UNUSED static PyObject *MAKE_EXCEPTION_FROM_TYPE_ARG0(PyThreadState *tstate, PyObject *type,
678
+ PyObject *arg) {
679
+ PyBaseExceptionObject *self;
680
+
681
+ PyTypeObject *type_object = (PyTypeObject *)type;
682
+
683
+ self = (PyBaseExceptionObject *)(type_object->tp_alloc(type_object, 0));
684
+
685
+ self->dict = NULL;
686
+ self->notes = NULL;
687
+ self->traceback = self->cause = self->context = NULL;
688
+ self->suppress_context = 0;
689
+
690
+ assert(arg != NULL);
691
+
692
+ if (!PyTuple_Check(arg)) {
693
+ self->args = MAKE_TUPLE1(tstate, arg);
694
+ } else {
695
+ self->args = Py_NewRef(arg);
696
+ }
697
+
698
+ return (PyObject *)self;
699
+ }
700
+ #else
701
+
702
+ extern PyObject *CALL_FUNCTION_WITH_SINGLE_ARG(PyThreadState *tstate, PyObject *called, PyObject *arg);
703
+
704
+ NUITKA_MAY_BE_UNUSED static PyObject *MAKE_EXCEPTION_FROM_TYPE_ARG0(PyThreadState *tstate, PyObject *type,
705
+ PyObject *arg) {
706
+ return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, type, arg);
707
+ }
708
+
709
+ #endif
710
+
711
+ #if PYTHON_VERSION < 0x3c0
712
+ struct Nuitka_ExceptionPreservationItem {
713
+ PyObject *exception_type;
714
+ PyObject *exception_value;
715
+ PyTracebackObject *exception_tb;
716
+ };
717
+
718
+ static const struct Nuitka_ExceptionPreservationItem Empty_Nuitka_ExceptionPreservationItem = {0};
719
+
720
+ // Fetch the current exception into state, transfers reference coming from tstate ownership. Old values are overwritten.
721
+ NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED_STATE(PyThreadState *tstate,
722
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
723
+ FETCH_ERROR_OCCURRED(tstate, &exception_state->exception_type, &exception_state->exception_value,
724
+ &exception_state->exception_tb);
725
+ }
726
+
727
+ // Restore the current exception from state, transfers reference from state to tstate ownership.
728
+ NUITKA_MAY_BE_UNUSED static void
729
+ RESTORE_ERROR_OCCURRED_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
730
+ RESTORE_ERROR_OCCURRED(tstate, exception_state->exception_type, exception_state->exception_value,
731
+ exception_state->exception_tb);
732
+ }
733
+
734
+ NUITKA_MAY_BE_UNUSED static void
735
+ FETCH_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
736
+ FETCH_ERROR_OCCURRED_UNTRACED(tstate, &exception_state->exception_type, &exception_state->exception_value,
737
+ &exception_state->exception_tb);
738
+ }
739
+
740
+ NUITKA_MAY_BE_UNUSED static void
741
+ RESTORE_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
742
+ RESTORE_ERROR_OCCURRED_UNTRACED(tstate, exception_state->exception_type, exception_state->exception_value,
743
+ exception_state->exception_tb);
744
+ }
745
+
746
+ NUITKA_MAY_BE_UNUSED static void
747
+ ASSERT_SAME_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state1,
748
+ struct Nuitka_ExceptionPreservationItem const *exception_state2) {
749
+ assert(exception_state1->exception_type == exception_state2->exception_type);
750
+ assert(exception_state1->exception_value == exception_state2->exception_value);
751
+ assert(exception_state1->exception_tb == exception_state2->exception_tb);
752
+ }
753
+
754
+ NUITKA_MAY_BE_UNUSED static void
755
+ ASSERT_EMPTY_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
756
+ assert(exception_state->exception_type == NULL);
757
+ assert(exception_state->exception_value == NULL);
758
+ assert(exception_state->exception_tb == NULL);
759
+ }
760
+
761
+ NUITKA_MAY_BE_UNUSED static void INIT_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
762
+ exception_state->exception_type = NULL;
763
+ exception_state->exception_value = NULL;
764
+ exception_state->exception_tb = NULL;
765
+ }
766
+
767
+ NUITKA_MAY_BE_UNUSED static void
768
+ RELEASE_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
769
+ CHECK_OBJECT(exception_state->exception_type);
770
+ CHECK_OBJECT_X(exception_state->exception_value);
771
+ CHECK_OBJECT_X(exception_state->exception_tb);
772
+ Py_DECREF(exception_state->exception_type);
773
+ Py_XDECREF(exception_state->exception_value);
774
+ Py_XDECREF(exception_state->exception_tb);
775
+ }
776
+
777
+ NUITKA_MAY_BE_UNUSED static void
778
+ RELEASE_ERROR_OCCURRED_STATE_X(struct Nuitka_ExceptionPreservationItem *exception_state) {
779
+ CHECK_OBJECT_X(exception_state->exception_type);
780
+ CHECK_OBJECT_X(exception_state->exception_value);
781
+ CHECK_OBJECT_X(exception_state->exception_tb);
782
+
783
+ Py_XDECREF(exception_state->exception_type);
784
+ Py_XDECREF(exception_state->exception_value);
785
+ Py_XDECREF(exception_state->exception_tb);
786
+ }
787
+
788
+ NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(
789
+ PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state, PyObject *exception_type,
790
+ PyObject *exception_value, PyTracebackObject *exception_tb) {
791
+ Py_INCREF(exception_type);
792
+ Py_XINCREF(exception_value);
793
+ Py_XINCREF(exception_tb);
794
+
795
+ exception_state->exception_type = exception_type;
796
+ exception_state->exception_value = exception_value;
797
+ exception_state->exception_tb = exception_tb;
798
+ }
799
+
800
+ NUITKA_MAY_BE_UNUSED static void
801
+ ASSIGN_ARGS_FROM_EXCEPTION_PRESERVATION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state,
802
+ PyObject **exception_type, PyObject **exception_value,
803
+ PyTracebackObject **exception_tb) {
804
+
805
+ *exception_type = exception_state->exception_type;
806
+ Py_INCREF(*exception_type);
807
+ *exception_value = exception_state->exception_value;
808
+ Py_XINCREF(*exception_value);
809
+ *exception_tb = exception_state->exception_tb;
810
+ Py_XINCREF(*exception_tb);
811
+ }
812
+
813
+ NUITKA_MAY_BE_UNUSED static PyTracebackObject *
814
+ GET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state) {
815
+ return exception_state->exception_tb;
816
+ }
817
+
818
+ // Transfer ownership of the traceback to the exception state.
819
+ NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state,
820
+ PyTracebackObject *exception_tb) {
821
+ CHECK_OBJECT_X(exception_state->exception_tb);
822
+ CHECK_OBJECT_X(exception_tb);
823
+
824
+ Py_XDECREF(exception_state->exception_tb);
825
+ exception_state->exception_tb = exception_tb;
826
+ }
827
+
828
+ NUITKA_MAY_BE_UNUSED static bool HAS_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
829
+ return exception_state->exception_type != NULL;
830
+ }
831
+
832
+ NUITKA_MAY_BE_UNUSED static bool
833
+ EXCEPTION_STATE_MATCH_BOOL_SINGLE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
834
+ PyObject *exception_checked) {
835
+ return EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_state->exception_type, exception_checked);
836
+ }
837
+
838
+ NUITKA_MAY_BE_UNUSED inline static void
839
+ CHECK_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
840
+ CHECK_OBJECT(exception_state->exception_type);
841
+ CHECK_OBJECT_X(exception_state->exception_value);
842
+ CHECK_OBJECT_X(exception_state->exception_tb);
843
+ }
844
+
845
+ NUITKA_MAY_BE_UNUSED inline static void
846
+ CHECK_EXCEPTION_STATE_X(struct Nuitka_ExceptionPreservationItem const *exception_state) {
847
+ CHECK_OBJECT_X(exception_state->exception_type);
848
+ CHECK_OBJECT_X(exception_state->exception_value);
849
+ CHECK_OBJECT_X(exception_state->exception_tb);
850
+ }
851
+
852
+ #else
853
+ struct Nuitka_ExceptionPreservationItem {
854
+ PyObject *exception_value;
855
+ };
856
+
857
+ static const struct Nuitka_ExceptionPreservationItem Empty_Nuitka_ExceptionPreservationItem = {0};
858
+
859
+ // Fetch the current exception into state, transfers reference coming from tstate ownership. Old value is overwritten.
860
+ NUITKA_MAY_BE_UNUSED static void FETCH_ERROR_OCCURRED_STATE(PyThreadState *tstate,
861
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
862
+ exception_state->exception_value = tstate->current_exception;
863
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
864
+
865
+ #if _DEBUG_EXCEPTIONS
866
+ PRINT_STRING("FETCH_ERROR_OCCURRED_STATE:\n");
867
+ PRINT_CURRENT_EXCEPTION();
868
+ #endif
869
+
870
+ tstate->current_exception = NULL;
871
+ }
872
+
873
+ NUITKA_MAY_BE_UNUSED static void
874
+ FETCH_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
875
+ exception_state->exception_value = tstate->current_exception;
876
+ tstate->current_exception = NULL;
877
+
878
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
879
+ }
880
+
881
+ NUITKA_MAY_BE_UNUSED static void
882
+ RESTORE_ERROR_OCCURRED_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
883
+ PyObject *old_exception_value = tstate->current_exception;
884
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
885
+
886
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
887
+ tstate->current_exception = exception_state->exception_value;
888
+
889
+ #if _DEBUG_EXCEPTIONS
890
+ PRINT_STRING("RESTORE_ERROR_OCCURRED_STATE:\n");
891
+ PRINT_CURRENT_EXCEPTION();
892
+ #endif
893
+
894
+ Py_XDECREF(old_exception_value);
895
+ }
896
+
897
+ NUITKA_MAY_BE_UNUSED static void
898
+ RESTORE_ERROR_OCCURRED_STATE_UNTRACED(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
899
+ PyObject *old_exception_value = tstate->current_exception;
900
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(old_exception_value);
901
+
902
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
903
+ tstate->current_exception = exception_state->exception_value;
904
+
905
+ Py_XDECREF(old_exception_value);
906
+ }
907
+
908
+ NUITKA_MAY_BE_UNUSED static void
909
+ ASSERT_SAME_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state1,
910
+ struct Nuitka_ExceptionPreservationItem *exception_state2) {
911
+ assert(exception_state1->exception_value == exception_state2->exception_value);
912
+ }
913
+
914
+ NUITKA_MAY_BE_UNUSED static void
915
+ ASSERT_EMPTY_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
916
+ assert(exception_state->exception_value == NULL);
917
+ }
918
+
919
+ NUITKA_MAY_BE_UNUSED static void INIT_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
920
+ exception_state->exception_value = NULL;
921
+ }
922
+
923
+ NUITKA_MAY_BE_UNUSED static void
924
+ RELEASE_ERROR_OCCURRED_STATE(struct Nuitka_ExceptionPreservationItem *exception_state) {
925
+ CHECK_OBJECT(exception_state->exception_value);
926
+ Py_DECREF(exception_state->exception_value);
927
+ }
928
+
929
+ NUITKA_MAY_BE_UNUSED static void
930
+ RELEASE_ERROR_OCCURRED_STATE_X(struct Nuitka_ExceptionPreservationItem *exception_state) {
931
+ CHECK_OBJECT_X(exception_state->exception_value);
932
+ Py_XDECREF(exception_state->exception_value);
933
+ }
934
+
935
+ NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(
936
+ PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state, PyObject *exception_type,
937
+ PyObject *exception_value, PyTracebackObject *exception_tb) {
938
+
939
+ Py_XINCREF(exception_type);
940
+ Py_XINCREF(exception_value);
941
+ Py_XINCREF(exception_tb);
942
+
943
+ NORMALIZE_EXCEPTION(tstate, &exception_type, &exception_value, &exception_tb);
944
+ ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_value);
945
+
946
+ exception_state->exception_value = exception_value;
947
+ Py_INCREF(exception_value);
948
+
949
+ ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_value, exception_tb);
950
+
951
+ Py_XDECREF(exception_type);
952
+ Py_XDECREF(exception_value);
953
+ Py_XDECREF(exception_tb);
954
+ }
955
+
956
+ NUITKA_MAY_BE_UNUSED static void
957
+ ASSIGN_ARGS_FROM_EXCEPTION_PRESERVATION_STATE(struct Nuitka_ExceptionPreservationItem *exception_state,
958
+ PyObject **exception_type, PyObject **exception_value,
959
+ PyTracebackObject **exception_tb) {
960
+
961
+ *exception_value = exception_state->exception_value;
962
+
963
+ if (*exception_value) {
964
+ Py_INCREF(*exception_value);
965
+
966
+ *exception_type = (PyObject *)PyExceptionInstance_Class(*exception_value);
967
+ Py_INCREF(*exception_type);
968
+ *exception_tb = GET_EXCEPTION_TRACEBACK(*exception_value);
969
+ Py_XINCREF(*exception_tb);
970
+ } else {
971
+ *exception_type = NULL;
972
+ *exception_tb = NULL;
973
+ }
974
+ }
975
+
976
+ NUITKA_MAY_BE_UNUSED static PyTracebackObject *
977
+ GET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state) {
978
+ return GET_EXCEPTION_TRACEBACK(exception_state->exception_value);
979
+ }
980
+
981
+ // Transfer ownership of the traceback to the exception state.
982
+ NUITKA_MAY_BE_UNUSED static void SET_EXCEPTION_STATE_TRACEBACK(struct Nuitka_ExceptionPreservationItem *exception_state,
983
+ PyTracebackObject *exception_tb) {
984
+ ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_state->exception_value, exception_tb);
985
+ Py_XDECREF(exception_tb);
986
+ CHECK_OBJECT_X(exception_tb);
987
+ }
988
+
989
+ NUITKA_MAY_BE_UNUSED static bool HAS_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
990
+ return exception_state->exception_value != NULL;
991
+ }
992
+
993
+ NUITKA_MAY_BE_UNUSED static bool
994
+ EXCEPTION_STATE_MATCH_BOOL_SINGLE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem const *exception_state,
995
+ PyObject *exception_checked) {
996
+ return EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_state->exception_value, exception_checked);
997
+ }
998
+
999
+ NUITKA_MAY_BE_UNUSED inline static void
1000
+ CHECK_EXCEPTION_STATE(struct Nuitka_ExceptionPreservationItem const *exception_state) {
1001
+ ASSERT_NORMALIZED_EXCEPTION_VALUE(exception_state->exception_value);
1002
+ }
1003
+
1004
+ NUITKA_MAY_BE_UNUSED inline static void
1005
+ CHECK_EXCEPTION_STATE_X(struct Nuitka_ExceptionPreservationItem const *exception_state) {
1006
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_state->exception_value);
1007
+ }
1008
+
1009
+ #endif
1010
+
1011
+ NUITKA_MAY_BE_UNUSED inline static void SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0(
1012
+ PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state, PyObject *exception_type) {
1013
+
1014
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, exception_state, exception_type, NULL, NULL);
1015
+ }
1016
+
1017
+ extern PyObject *CALL_FUNCTION_WITH_SINGLE_ARG(PyThreadState *tstate, PyObject *called, PyObject *arg);
1018
+
1019
+ NUITKA_MAY_BE_UNUSED inline static void
1020
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(PyThreadState *tstate,
1021
+ struct Nuitka_ExceptionPreservationItem *exception_state,
1022
+ PyObject *exception_type, PyObject *exception_value) {
1023
+ #if PYTHON_VERSION < 0x3c0
1024
+ Py_INCREF(exception_type);
1025
+
1026
+ exception_state->exception_type = exception_type;
1027
+ exception_state->exception_value = exception_value;
1028
+ exception_state->exception_tb = NULL;
1029
+ #else
1030
+ PyObject *exc = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, exception_type, exception_value);
1031
+ exception_state->exception_value = exc;
1032
+ Py_DECREF(exception_value);
1033
+ #endif
1034
+ }
1035
+
1036
+ NUITKA_MAY_BE_UNUSED inline static void
1037
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1_NORMALIZED(PyThreadState *tstate,
1038
+ struct Nuitka_ExceptionPreservationItem *exception_state,
1039
+ PyObject *exception_type, PyObject *exception_value) {
1040
+ #if PYTHON_VERSION < 0x3c0
1041
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, exception_type, exception_value);
1042
+ #else
1043
+ exception_state->exception_value = exception_value;
1044
+ #endif
1045
+ }
1046
+
1047
+ NUITKA_MAY_BE_UNUSED inline static void
1048
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE0(PyThreadState *tstate,
1049
+ struct Nuitka_ExceptionPreservationItem *exception_state,
1050
+ PyObject *exception_type, PyObject *exception_value) {
1051
+ // TODO: Add variants for normalized values only.
1052
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_ARGS(tstate, exception_state, exception_type, exception_value, NULL);
1053
+ }
1054
+
1055
+ NUITKA_MAY_BE_UNUSED inline static void
1056
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_STR(PyThreadState *tstate,
1057
+ struct Nuitka_ExceptionPreservationItem *exception_state,
1058
+ PyObject *exception_type, char const *value) {
1059
+ PyObject *exception_value = Nuitka_String_FromString(value);
1060
+
1061
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, exception_type, exception_value);
1062
+ }
1063
+
1064
+ #define SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_FORMAT1(tstate, exception_state, exception_type, message, arg1) \
1065
+ { \
1066
+ PyObject *exception_value = Nuitka_String_FromFormat(message, arg1); \
1067
+ CHECK_OBJECT(exception_value); \
1068
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, exception_type, exception_value); \
1069
+ }
1070
+
1071
+ #define SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_FORMAT2(tstate, exception_state, exception_type, message, arg1, \
1072
+ arg2) \
1073
+ { \
1074
+ PyObject *exception_value = Nuitka_String_FromFormat(message, arg1, arg2); \
1075
+ CHECK_OBJECT(exception_value); \
1076
+ SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0_VALUE1(tstate, exception_state, exception_type, exception_value); \
1077
+ }
1078
+
1079
+ NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_GENERATOR(PyThreadState *tstate, PyObject *exception_value) {
1080
+ CHECK_OBJECT(exception_value);
1081
+
1082
+ // TODO: For Python3.12 this must be done differently to be a lot better.
1083
+
1084
+ // We need to check the class.
1085
+ if (PyExceptionInstance_Check(exception_value)) {
1086
+ exception_value = PyExceptionInstance_Class(exception_value);
1087
+ }
1088
+
1089
+ // Lets be optimistic. If it matches, we would be wasting our time.
1090
+ if (exception_value == PyExc_GeneratorExit || exception_value == PyExc_StopIteration) {
1091
+ return true;
1092
+ }
1093
+
1094
+ if (PyExceptionClass_Check(exception_value)) {
1095
+ // Save the current exception, if any, we must preserve it.
1096
+ struct Nuitka_ExceptionPreservationItem saved_exception_state;
1097
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1098
+
1099
+ int res = PyObject_IsSubclass(exception_value, PyExc_GeneratorExit);
1100
+
1101
+ // This function must not fail, so print the error here */
1102
+ if (unlikely(res == -1)) {
1103
+ PyErr_WriteUnraisable(exception_value);
1104
+ }
1105
+
1106
+ if (res == 1) {
1107
+ return true;
1108
+ }
1109
+
1110
+ res = PyObject_IsSubclass(exception_value, PyExc_StopIteration);
1111
+
1112
+ // This function must not fail, so print the error here */
1113
+ if (unlikely(res == -1)) {
1114
+ PyErr_WriteUnraisable(exception_value);
1115
+ }
1116
+
1117
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1118
+
1119
+ return res == 1;
1120
+ }
1121
+
1122
+ return false;
1123
+ }
1124
+
1125
+ NUITKA_MAY_BE_UNUSED static bool
1126
+ EXCEPTION_STATE_MATCH_GENERATOR(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
1127
+ #if PYTHON_VERSION < 0x3c0
1128
+ return EXCEPTION_MATCH_GENERATOR(tstate, exception_state->exception_type);
1129
+ #else
1130
+ return EXCEPTION_MATCH_GENERATOR(tstate, exception_state->exception_value);
1131
+ #endif
1132
+ }
1133
+
1134
+ NUITKA_MAY_BE_UNUSED static bool EXCEPTION_MATCH_BOOL_SINGLE(PyThreadState *tstate, PyObject *exception_value,
1135
+ PyObject *exception_checked) {
1136
+ CHECK_OBJECT(exception_value);
1137
+ CHECK_OBJECT(exception_checked);
1138
+
1139
+ // We need to check the class.
1140
+ if (PyExceptionInstance_Check(exception_value)) {
1141
+ exception_value = PyExceptionInstance_Class(exception_value);
1142
+ }
1143
+
1144
+ // Lets be optimistic. If it matches, we would be wasting our time.
1145
+ if (exception_value == exception_checked) {
1146
+ return true;
1147
+ }
1148
+
1149
+ if (PyExceptionClass_Check(exception_value)) {
1150
+ #if PYTHON_VERSION < 0x300
1151
+ // Save the current exception, if any, we must preserve it.
1152
+ struct Nuitka_ExceptionPreservationItem saved_exception_state;
1153
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1154
+
1155
+ // Python3.10 at least uses PyType_IsSubtype and needs no
1156
+ // fetch restore.
1157
+ int res = PyObject_IsSubclass(exception_value, exception_checked);
1158
+
1159
+ // This function must not fail, so print the error here */
1160
+ if (unlikely(res == -1)) {
1161
+ PyErr_WriteUnraisable(exception_value);
1162
+ }
1163
+
1164
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1165
+
1166
+ return res == 1;
1167
+ #else
1168
+ int res = Nuitka_Type_IsSubtype((PyTypeObject *)exception_value, (PyTypeObject *)exception_checked);
1169
+ return res == 1;
1170
+ #endif
1171
+ }
1172
+
1173
+ return false;
1174
+ }
1175
+
1176
+ NUITKA_MAY_BE_UNUSED static inline int _EXCEPTION_MATCH_BOOL(PyThreadState *tstate, PyObject *exception_value,
1177
+ PyObject *exception_checked) {
1178
+ CHECK_OBJECT(exception_value);
1179
+ CHECK_OBJECT(exception_checked);
1180
+
1181
+ // Reduce to exception class actually. TODO: Can this not be an instance from called code?!
1182
+ PyObject *exception_class;
1183
+ if (PyExceptionInstance_Check(exception_value)) {
1184
+ exception_class = PyExceptionInstance_Class(exception_value);
1185
+ } else {
1186
+ exception_class = exception_value;
1187
+ }
1188
+
1189
+ #if PYTHON_VERSION < 0x300
1190
+ if (PyExceptionClass_Check(exception_class) && PyExceptionClass_Check(exception_checked)) {
1191
+ // Save the current exception, if any, we must preserve it.
1192
+ struct Nuitka_ExceptionPreservationItem saved_exception_state;
1193
+ FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1194
+
1195
+ // Avoid recursion limit being exceeded just then
1196
+ int recursion_limit = Py_GetRecursionLimit();
1197
+ if (recursion_limit < (1 << 30)) {
1198
+ Py_SetRecursionLimit(recursion_limit + 5);
1199
+ }
1200
+
1201
+ int res = PyObject_IsSubclass(exception_class, exception_checked);
1202
+
1203
+ Py_SetRecursionLimit(recursion_limit);
1204
+
1205
+ // This function must not fail, so print the error here */
1206
+ if (unlikely(res == -1)) {
1207
+ PyErr_WriteUnraisable(exception_value);
1208
+ res = 0;
1209
+ }
1210
+
1211
+ RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
1212
+
1213
+ return res;
1214
+ } else {
1215
+ return exception_class == exception_checked;
1216
+ }
1217
+ #else
1218
+ if (PyExceptionClass_Check(exception_class) && PyExceptionClass_Check(exception_checked)) {
1219
+ return Nuitka_Type_IsSubtype((PyTypeObject *)exception_class, (PyTypeObject *)exception_checked);
1220
+ } else {
1221
+ return exception_class == exception_checked;
1222
+ }
1223
+ #endif
1224
+ }
1225
+
1226
+ // This is for the actual comparison operation that is being done in the
1227
+ // node tree, no other code should use it. TODO: Then it's probably not
1228
+ // properly located here.
1229
+ NUITKA_MAY_BE_UNUSED static inline int EXCEPTION_MATCH_BOOL(PyThreadState *tstate, PyObject *exception_value,
1230
+ PyObject *exception_checked) {
1231
+ CHECK_OBJECT(exception_value);
1232
+ CHECK_OBJECT(exception_checked);
1233
+
1234
+ #if PYTHON_VERSION >= 0x300
1235
+ /* Note: Exact matching tuples seems to needed, despite using GET_ITEM later
1236
+ on, this probably cannot be overloaded that deep. */
1237
+ if (PyTuple_Check(exception_checked)) {
1238
+ Py_ssize_t length = PyTuple_GET_SIZE(exception_checked);
1239
+
1240
+ for (Py_ssize_t i = 0; i < length; i += 1) {
1241
+ PyObject *element = PyTuple_GET_ITEM(exception_checked, i);
1242
+
1243
+ if (unlikely(!PyExceptionClass_Check(element))) {
1244
+ SET_CURRENT_EXCEPTION_TYPE0_STR(
1245
+ tstate, PyExc_TypeError, "catching classes that do not inherit from BaseException is not allowed");
1246
+ return -1;
1247
+ }
1248
+ }
1249
+ } else if (unlikely(!PyExceptionClass_Check(exception_checked))) {
1250
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
1251
+ "catching classes that do not inherit from BaseException is not allowed");
1252
+ return -1;
1253
+ }
1254
+ #endif
1255
+
1256
+ if (PyTuple_Check(exception_checked)) {
1257
+ Py_ssize_t length = PyTuple_GET_SIZE(exception_checked);
1258
+
1259
+ for (Py_ssize_t i = 0; i < length; i += 1) {
1260
+ PyObject *element = PyTuple_GET_ITEM(exception_checked, i);
1261
+
1262
+ int res = EXCEPTION_MATCH_BOOL(tstate, exception_value, element);
1263
+
1264
+ if (res != 0) {
1265
+ return res;
1266
+ }
1267
+ }
1268
+
1269
+ return 0;
1270
+ } else {
1271
+ return _EXCEPTION_MATCH_BOOL(tstate, exception_value, exception_checked);
1272
+ }
1273
+ }
1274
+
1275
+ // Normalize an exception type to a value.
1276
+
1277
+ extern void Nuitka_Err_NormalizeException(PyThreadState *tstate, PyObject **exc, PyObject **val,
1278
+ PyTracebackObject **tb);
1279
+
1280
+ // Normalize an exception, may release old values and replace them, expects
1281
+ // references passed and returns them.
1282
+ NUITKA_MAY_BE_UNUSED static inline void NORMALIZE_EXCEPTION(PyThreadState *tstate, PyObject **exception_type,
1283
+ PyObject **exception_value,
1284
+ PyTracebackObject **exception_tb) {
1285
+ #if _DEBUG_EXCEPTIONS
1286
+ PRINT_STRING("NORMALIZE_EXCEPTION: Enter\n");
1287
+ PRINT_EXCEPTION(*exception_type, *exception_value, *exception_tb);
1288
+ #endif
1289
+ CHECK_OBJECT_X(*exception_type);
1290
+ CHECK_OBJECT_X(*exception_value);
1291
+ if (exception_tb) {
1292
+ CHECK_OBJECT_X(*exception_tb);
1293
+ }
1294
+
1295
+ // TODO: Often we already know this to be true.
1296
+ if (*exception_type != Py_None && *exception_type != NULL) {
1297
+ Nuitka_Err_NormalizeException(tstate, exception_type, exception_value, exception_tb);
1298
+ }
1299
+
1300
+ #if _DEBUG_EXCEPTIONS
1301
+ PRINT_STRING("NORMALIZE_EXCEPTION: Leave\n");
1302
+ PRINT_EXCEPTION(*exception_type, *exception_value, exception_tb ? *exception_tb : NULL);
1303
+ #endif
1304
+ }
1305
+
1306
+ #if PYTHON_VERSION < 0x3c0
1307
+ // Normalize an exception, may release old values and replace them, expects
1308
+ // references passed and returns them.
1309
+ static inline void NORMALIZE_EXCEPTION_STATE(PyThreadState *tstate,
1310
+ struct Nuitka_ExceptionPreservationItem *exception_state) {
1311
+ CHECK_EXCEPTION_STATE_X(exception_state);
1312
+
1313
+ NORMALIZE_EXCEPTION(tstate, &exception_state->exception_type, &exception_state->exception_value,
1314
+ &exception_state->exception_tb);
1315
+ }
1316
+ #endif
1317
+
1318
+ extern PyObject *CALL_FUNCTION_NO_ARGS(PyThreadState *tstate, PyObject *called);
1319
+
1320
+ // Publish an exception, erasing the values of the variables.
1321
+ NUITKA_MAY_BE_UNUSED static inline void
1322
+ PUBLISH_CURRENT_EXCEPTION(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
1323
+ #if _DEBUG_EXCEPTIONS
1324
+ PRINT_STRING("PUBLISH_CURRENT_EXCEPTION:\n");
1325
+ PRINT_EXCEPTION_STATE(exception_state);
1326
+ #endif
1327
+
1328
+ #if PYTHON_VERSION < 0x3c0
1329
+ NORMALIZE_EXCEPTION_STATE(tstate, exception_state);
1330
+ ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(exception_state->exception_value, exception_state->exception_tb);
1331
+ #endif
1332
+
1333
+ struct Nuitka_ExceptionStackItem exc_state;
1334
+
1335
+ #if PYTHON_VERSION < 0x3b0
1336
+ exc_state.exception_type = exception_state->exception_type;
1337
+ #endif
1338
+ exc_state.exception_value = exception_state->exception_value;
1339
+ #if PYTHON_VERSION < 0x3b0
1340
+ exc_state.exception_tb = exception_state->exception_tb;
1341
+ #endif
1342
+
1343
+ SET_CURRENT_EXCEPTION(tstate, &exc_state);
1344
+
1345
+ #if PYTHON_VERSION >= 0x3b0 && PYTHON_VERSION < 0x3c0
1346
+ // TODO: We shouldn't get these in the first place, we don't transfer the
1347
+ // type anymore and the exception tb could come in already attached.
1348
+ Py_DECREF(exception_state->exception_type);
1349
+ Py_XDECREF(exception_state->exception_tb);
1350
+ #endif
1351
+
1352
+ INIT_ERROR_OCCURRED_STATE(exception_state);
1353
+ }
1354
+
1355
+ NUITKA_MAY_BE_UNUSED static bool
1356
+ _CHECK_AND_CLEAR_EXCEPTION_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
1357
+ PyObject *exception_type) {
1358
+ #if PYTHON_VERSION < 0x3c0
1359
+ PyObject *exception_current = exception_state->exception_type;
1360
+ #else
1361
+ PyObject *exception_current = exception_state->exception_value;
1362
+ ASSERT_NORMALIZED_EXCEPTION_VALUE_X(exception_current);
1363
+ #endif
1364
+ if (exception_current == NULL) {
1365
+ return true;
1366
+ } else if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, exception_current, exception_type)) {
1367
+ CHECK_OBJECT(exception_current);
1368
+
1369
+ RELEASE_ERROR_OCCURRED_STATE(exception_state);
1370
+ INIT_ERROR_OCCURRED_STATE(exception_state);
1371
+
1372
+ return true;
1373
+ } else {
1374
+ return false;
1375
+ }
1376
+ }
1377
+
1378
+ // TODO: Get rid of "CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED" and rename this to
1379
+ // its name.
1380
+ NUITKA_MAY_BE_UNUSED static bool
1381
+ CHECK_AND_CLEAR_STOP_ITERATION_STATE(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
1382
+ return _CHECK_AND_CLEAR_EXCEPTION_STATE(tstate, exception_state, PyExc_StopIteration);
1383
+ }
1384
+
1385
+ // Format a UnboundLocalError exception for a variable name. TODO: This is more
1386
+ // for "raising.h" it seems.
1387
+ extern void FORMAT_UNBOUND_LOCAL_ERROR(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state,
1388
+ PyObject *variable_name);
1389
+
1390
+ extern void FORMAT_UNBOUND_CLOSURE_ERROR(PyThreadState *tstate,
1391
+ struct Nuitka_ExceptionPreservationItem *exception_state,
1392
+ PyObject *variable_name);
1393
+
1394
+ #if PYTHON_VERSION >= 0x300
1395
+ static inline PyBaseExceptionObject *_PyBaseExceptionObject_cast(PyObject *exc) {
1396
+ assert(PyExceptionInstance_Check(exc));
1397
+ return (PyBaseExceptionObject *)exc;
1398
+ }
1399
+
1400
+ // Exception context, replacement for "PyException_GetContext", it however gives no
1401
+ // reference.
1402
+ NUITKA_MAY_BE_UNUSED static inline PyObject *Nuitka_Exception_GetContext(PyObject *self) {
1403
+ return _PyBaseExceptionObject_cast(self)->context;
1404
+ }
1405
+
1406
+ // Exception context, replacement for "PyException_SetContext" it however doesn't
1407
+ // consume a reference.
1408
+ NUITKA_MAY_BE_UNUSED static inline void Nuitka_Exception_SetContext(PyObject *self, PyObject *context) {
1409
+ CHECK_OBJECT(context);
1410
+
1411
+ Py_INCREF(context);
1412
+ Py_XSETREF(_PyBaseExceptionObject_cast(self)->context, context);
1413
+ }
1414
+
1415
+ NUITKA_MAY_BE_UNUSED static inline void Nuitka_Exception_DeleteContext(PyObject *self) {
1416
+ Py_XSETREF(_PyBaseExceptionObject_cast(self)->context, NULL);
1417
+ }
1418
+
1419
+ #if PYTHON_VERSION >= 0x300
1420
+ // Attach the exception context if necessary.
1421
+ NUITKA_MAY_BE_UNUSED static inline void
1422
+ ADD_EXCEPTION_CONTEXT(PyThreadState *tstate, struct Nuitka_ExceptionPreservationItem *exception_state) {
1423
+ PyObject *context = EXC_VALUE(tstate);
1424
+
1425
+ if (context != NULL) {
1426
+ #if PYTHON_VERSION < 0x3c0
1427
+ NORMALIZE_EXCEPTION_STATE(tstate, exception_state);
1428
+ #endif
1429
+ Nuitka_Exception_SetContext(exception_state->exception_value, context);
1430
+ }
1431
+ }
1432
+ #endif
1433
+
1434
+ // Our replacement for "PyException_SetCause", consumes a reference.
1435
+ NUITKA_MAY_BE_UNUSED static inline void Nuitka_Exception_SetCause(PyObject *self, PyObject *cause) {
1436
+ PyBaseExceptionObject *base_self = _PyBaseExceptionObject_cast(self);
1437
+ base_self->suppress_context = 1;
1438
+ Py_XSETREF(base_self->cause, cause);
1439
+ }
1440
+
1441
+ #endif
1442
+
1443
+ #endif
1444
+
1445
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1446
+ // integrates with CPython, but also works on its own.
1447
+ //
1448
+ // Licensed under the Apache License, Version 2.0 (the "License");
1449
+ // you may not use this file except in compliance with the License.
1450
+ // You may obtain a copy of the License at
1451
+ //
1452
+ // http://www.apache.org/licenses/LICENSE-2.0
1453
+ //
1454
+ // Unless required by applicable law or agreed to in writing, software
1455
+ // distributed under the License is distributed on an "AS IS" BASIS,
1456
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1457
+ // See the License for the specific language governing permissions and
1458
+ // limitations under the License.