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,1826 @@
1
+ // Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /* WARNING, this code is GENERATED. Modify the template HelperOperationInplace.c.j2 instead! */
4
+
5
+ /* This file is included from another C file, help IDEs to still parse it on its own. */
6
+ #ifdef __IDE_ONLY__
7
+ #include "nuitka/prelude.h"
8
+ #endif
9
+
10
+ /* C helpers for type in-place "^" (BITXOR) operations */
11
+
12
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "LONG" to Python2 'long', Python3 'int'. */
13
+ static inline bool _INPLACE_OPERATION_BITXOR_LONG_LONG(PyObject **operand1, PyObject *operand2) {
14
+ assert(operand1); // Pointer must be non-null.
15
+
16
+ CHECK_OBJECT(*operand1);
17
+ assert(PyLong_CheckExact(*operand1));
18
+ CHECK_OBJECT(operand2);
19
+ assert(PyLong_CheckExact(operand2));
20
+
21
+ // Not every code path will make use of all possible results.
22
+ #ifdef _MSC_VER
23
+ #pragma warning(push)
24
+ #pragma warning(disable : 4101)
25
+ #endif
26
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
27
+ NUITKA_MAY_BE_UNUSED long clong_result;
28
+ #ifdef _MSC_VER
29
+ #pragma warning(pop)
30
+ #endif
31
+
32
+ PyObject *x = PyLong_Type.tp_as_number->nb_xor(*operand1, operand2);
33
+ assert(x != Py_NotImplemented);
34
+
35
+ obj_result = x;
36
+ goto exit_result_object;
37
+
38
+ exit_result_object:
39
+ if (unlikely(obj_result == NULL)) {
40
+ goto exit_result_exception;
41
+ }
42
+ // We got an object handed, that we have to release.
43
+ Py_DECREF(*operand1);
44
+ *operand1 = obj_result;
45
+ goto exit_result_ok;
46
+
47
+ exit_result_ok:
48
+ return true;
49
+
50
+ exit_result_exception:
51
+ return false;
52
+ }
53
+
54
+ bool INPLACE_OPERATION_BITXOR_LONG_LONG(PyObject **operand1, PyObject *operand2) {
55
+ return _INPLACE_OPERATION_BITXOR_LONG_LONG(operand1, operand2);
56
+ }
57
+
58
+ /* Code referring to "OBJECT" corresponds to any Python object and "LONG" to Python2 'long', Python3 'int'. */
59
+ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITXOR_OBJECT_LONG(PyObject **operand1, PyObject *operand2) {
60
+ PyTypeObject *type1 = Py_TYPE(*operand1);
61
+
62
+ #ifdef _MSC_VER
63
+ #pragma warning(push)
64
+ #pragma warning(disable : 4101)
65
+ #endif
66
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
67
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
68
+ #ifdef _MSC_VER
69
+ #pragma warning(pop)
70
+ #endif
71
+
72
+ binaryfunc islot =
73
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_inplace_xor : NULL;
74
+
75
+ if (islot != NULL) {
76
+ PyObject *x = islot(*operand1, operand2);
77
+
78
+ if (x != Py_NotImplemented) {
79
+ obj_result = x;
80
+ goto exit_inplace_result_object;
81
+ }
82
+
83
+ Py_DECREF_IMMORTAL(x);
84
+ }
85
+
86
+ {
87
+ binaryfunc slot1 =
88
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_xor : NULL;
89
+ binaryfunc slot2 = NULL;
90
+
91
+ if (!(type1 == &PyLong_Type)) {
92
+ // Different types, need to consider second value slot.
93
+
94
+ slot2 = PyLong_Type.tp_as_number->nb_xor;
95
+
96
+ if (slot1 == slot2) {
97
+ slot2 = NULL;
98
+ }
99
+ }
100
+
101
+ if (slot1 != NULL) {
102
+ PyObject *x = slot1(*operand1, operand2);
103
+
104
+ if (x != Py_NotImplemented) {
105
+ obj_result = x;
106
+ goto exit_inplace_result_object;
107
+ }
108
+
109
+ Py_DECREF_IMMORTAL(x);
110
+ }
111
+
112
+ if (slot2 != NULL) {
113
+ PyObject *x = slot2(*operand1, operand2);
114
+
115
+ if (x != Py_NotImplemented) {
116
+ obj_result = x;
117
+ goto exit_inplace_result_object;
118
+ }
119
+
120
+ Py_DECREF_IMMORTAL(x);
121
+ }
122
+
123
+ #if PYTHON_VERSION < 0x300
124
+ if (!NEW_STYLE_NUMBER_TYPE(type1) || !1) {
125
+ coercion c1 =
126
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_coerce : NULL;
127
+
128
+ if (c1 != NULL) {
129
+ PyObject *coerced1 = *operand1;
130
+ PyObject *coerced2 = operand2;
131
+
132
+ int err = c1(&coerced1, &coerced2);
133
+
134
+ if (unlikely(err < 0)) {
135
+ goto exit_inplace_exception;
136
+ }
137
+
138
+ if (err == 0) {
139
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
140
+
141
+ if (likely(mv == NULL)) {
142
+ binaryfunc slot = mv->nb_xor;
143
+
144
+ if (likely(slot != NULL)) {
145
+ PyObject *x = slot(coerced1, coerced2);
146
+
147
+ Py_DECREF(coerced1);
148
+ Py_DECREF(coerced2);
149
+
150
+ obj_result = x;
151
+ goto exit_inplace_result_object;
152
+ }
153
+ }
154
+
155
+ // nb_coerce took a reference.
156
+ Py_DECREF(coerced1);
157
+ Py_DECREF(coerced2);
158
+ }
159
+ }
160
+ coercion c2 = PyLong_Type.tp_as_number->nb_coerce;
161
+
162
+ if (c2 != NULL) {
163
+ PyObject *coerced1 = *operand1;
164
+ PyObject *coerced2 = operand2;
165
+
166
+ int err = c2(&coerced2, &coerced1);
167
+
168
+ if (unlikely(err < 0)) {
169
+ goto exit_inplace_exception;
170
+ }
171
+
172
+ if (err == 0) {
173
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
174
+
175
+ if (likely(mv == NULL)) {
176
+ binaryfunc slot = mv->nb_xor;
177
+
178
+ if (likely(slot != NULL)) {
179
+ PyObject *x = slot(coerced1, coerced2);
180
+
181
+ Py_DECREF(coerced1);
182
+ Py_DECREF(coerced2);
183
+
184
+ obj_result = x;
185
+ goto exit_inplace_result_object;
186
+ }
187
+ }
188
+
189
+ // nb_coerce took a reference.
190
+ Py_DECREF(coerced1);
191
+ Py_DECREF(coerced2);
192
+ }
193
+ }
194
+ }
195
+ #endif
196
+
197
+ #if PYTHON_VERSION < 0x300
198
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: '%s' and 'long'", type1->tp_name);
199
+ #else
200
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: '%s' and 'int'", type1->tp_name);
201
+ #endif
202
+ goto exit_inplace_exception;
203
+ }
204
+
205
+ exit_inplace_result_object:
206
+ if (unlikely(obj_result == NULL)) {
207
+ return false;
208
+ }
209
+
210
+ // We got an object handed, that we have to release.
211
+ Py_DECREF(*operand1);
212
+
213
+ // That's our return value then. As we use a dedicated variable, it's
214
+ // OK that way.
215
+ *operand1 = obj_result;
216
+
217
+ return true;
218
+
219
+ exit_inplace_exception:
220
+ return false;
221
+ }
222
+ static inline bool _INPLACE_OPERATION_BITXOR_OBJECT_LONG(PyObject **operand1, PyObject *operand2) {
223
+ assert(operand1); // Pointer must be non-null.
224
+
225
+ CHECK_OBJECT(*operand1);
226
+ CHECK_OBJECT(operand2);
227
+ assert(PyLong_CheckExact(operand2));
228
+
229
+ PyTypeObject *type1 = Py_TYPE(*operand1);
230
+
231
+ if (type1 == &PyLong_Type) {
232
+ // return _BINARY_OPERATION_BITXOR_LONG_LONG_INPLACE(operand1, operand2);
233
+
234
+ // Not every code path will make use of all possible results.
235
+ #ifdef _MSC_VER
236
+ #pragma warning(push)
237
+ #pragma warning(disable : 4101)
238
+ #endif
239
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
240
+ NUITKA_MAY_BE_UNUSED long clong_result;
241
+ #ifdef _MSC_VER
242
+ #pragma warning(pop)
243
+ #endif
244
+
245
+ PyObject *x = PyLong_Type.tp_as_number->nb_xor(*operand1, operand2);
246
+ assert(x != Py_NotImplemented);
247
+
248
+ obj_result = x;
249
+ goto exit_result_object;
250
+
251
+ exit_result_object:
252
+ if (unlikely(obj_result == NULL)) {
253
+ goto exit_result_exception;
254
+ }
255
+ // We got an object handed, that we have to release.
256
+ Py_DECREF(*operand1);
257
+ *operand1 = obj_result;
258
+ goto exit_result_ok;
259
+
260
+ exit_result_ok:
261
+ return true;
262
+
263
+ exit_result_exception:
264
+ return false;
265
+ }
266
+
267
+ return __INPLACE_OPERATION_BITXOR_OBJECT_LONG(operand1, operand2);
268
+ }
269
+
270
+ bool INPLACE_OPERATION_BITXOR_OBJECT_LONG(PyObject **operand1, PyObject *operand2) {
271
+ return _INPLACE_OPERATION_BITXOR_OBJECT_LONG(operand1, operand2);
272
+ }
273
+
274
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "OBJECT" to any Python object. */
275
+ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITXOR_LONG_OBJECT(PyObject **operand1, PyObject *operand2) {
276
+ PyTypeObject *type2 = Py_TYPE(operand2);
277
+
278
+ #ifdef _MSC_VER
279
+ #pragma warning(push)
280
+ #pragma warning(disable : 4101)
281
+ #endif
282
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
283
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
284
+ #ifdef _MSC_VER
285
+ #pragma warning(pop)
286
+ #endif
287
+
288
+ // No inplace number slot nb_inplace_xor available for this type.
289
+
290
+ {
291
+ binaryfunc slot1 = PyLong_Type.tp_as_number->nb_xor;
292
+ binaryfunc slot2 = NULL;
293
+
294
+ if (!(&PyLong_Type == type2)) {
295
+ // Different types, need to consider second value slot.
296
+
297
+ slot2 = (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_xor : NULL;
298
+
299
+ if (slot1 == slot2) {
300
+ slot2 = NULL;
301
+ }
302
+ }
303
+
304
+ if (slot1 != NULL) {
305
+ if (slot2 != NULL) {
306
+ if (Nuitka_Type_IsSubtype(type2, &PyLong_Type)) {
307
+ PyObject *x = slot2(*operand1, operand2);
308
+
309
+ if (x != Py_NotImplemented) {
310
+ obj_result = x;
311
+ goto exit_inplace_result_object;
312
+ }
313
+
314
+ Py_DECREF_IMMORTAL(x);
315
+ slot2 = NULL;
316
+ }
317
+ }
318
+
319
+ PyObject *x = slot1(*operand1, operand2);
320
+
321
+ if (x != Py_NotImplemented) {
322
+ obj_result = x;
323
+ goto exit_inplace_result_object;
324
+ }
325
+
326
+ Py_DECREF_IMMORTAL(x);
327
+ }
328
+
329
+ if (slot2 != NULL) {
330
+ PyObject *x = slot2(*operand1, operand2);
331
+
332
+ if (x != Py_NotImplemented) {
333
+ obj_result = x;
334
+ goto exit_inplace_result_object;
335
+ }
336
+
337
+ Py_DECREF_IMMORTAL(x);
338
+ }
339
+
340
+ #if PYTHON_VERSION < 0x300
341
+ if (!1 || !NEW_STYLE_NUMBER_TYPE(type2)) {
342
+ coercion c1 = PyLong_Type.tp_as_number->nb_coerce;
343
+
344
+ if (c1 != NULL) {
345
+ PyObject *coerced1 = *operand1;
346
+ PyObject *coerced2 = operand2;
347
+
348
+ int err = c1(&coerced1, &coerced2);
349
+
350
+ if (unlikely(err < 0)) {
351
+ goto exit_inplace_exception;
352
+ }
353
+
354
+ if (err == 0) {
355
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
356
+
357
+ if (likely(mv == NULL)) {
358
+ binaryfunc slot = mv->nb_xor;
359
+
360
+ if (likely(slot != NULL)) {
361
+ PyObject *x = slot(coerced1, coerced2);
362
+
363
+ Py_DECREF(coerced1);
364
+ Py_DECREF(coerced2);
365
+
366
+ obj_result = x;
367
+ goto exit_inplace_result_object;
368
+ }
369
+ }
370
+
371
+ // nb_coerce took a reference.
372
+ Py_DECREF(coerced1);
373
+ Py_DECREF(coerced2);
374
+ }
375
+ }
376
+ coercion c2 =
377
+ (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_coerce : NULL;
378
+
379
+ if (c2 != NULL) {
380
+ PyObject *coerced1 = *operand1;
381
+ PyObject *coerced2 = operand2;
382
+
383
+ int err = c2(&coerced2, &coerced1);
384
+
385
+ if (unlikely(err < 0)) {
386
+ goto exit_inplace_exception;
387
+ }
388
+
389
+ if (err == 0) {
390
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
391
+
392
+ if (likely(mv == NULL)) {
393
+ binaryfunc slot = mv->nb_xor;
394
+
395
+ if (likely(slot != NULL)) {
396
+ PyObject *x = slot(coerced1, coerced2);
397
+
398
+ Py_DECREF(coerced1);
399
+ Py_DECREF(coerced2);
400
+
401
+ obj_result = x;
402
+ goto exit_inplace_result_object;
403
+ }
404
+ }
405
+
406
+ // nb_coerce took a reference.
407
+ Py_DECREF(coerced1);
408
+ Py_DECREF(coerced2);
409
+ }
410
+ }
411
+ }
412
+ #endif
413
+
414
+ #if PYTHON_VERSION < 0x300
415
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: 'long' and '%s'", type2->tp_name);
416
+ #else
417
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: 'int' and '%s'", type2->tp_name);
418
+ #endif
419
+ goto exit_inplace_exception;
420
+ }
421
+
422
+ exit_inplace_result_object:
423
+ if (unlikely(obj_result == NULL)) {
424
+ return false;
425
+ }
426
+
427
+ // We got an object handed, that we have to release.
428
+ Py_DECREF(*operand1);
429
+
430
+ // That's our return value then. As we use a dedicated variable, it's
431
+ // OK that way.
432
+ *operand1 = obj_result;
433
+
434
+ return true;
435
+
436
+ exit_inplace_exception:
437
+ return false;
438
+ }
439
+ static inline bool _INPLACE_OPERATION_BITXOR_LONG_OBJECT(PyObject **operand1, PyObject *operand2) {
440
+ assert(operand1); // Pointer must be non-null.
441
+
442
+ CHECK_OBJECT(*operand1);
443
+ assert(PyLong_CheckExact(*operand1));
444
+ CHECK_OBJECT(operand2);
445
+
446
+ PyTypeObject *type2 = Py_TYPE(operand2);
447
+
448
+ if (&PyLong_Type == type2) {
449
+ // return _BINARY_OPERATION_BITXOR_LONG_LONG_INPLACE(operand1, operand2);
450
+
451
+ // Not every code path will make use of all possible results.
452
+ #ifdef _MSC_VER
453
+ #pragma warning(push)
454
+ #pragma warning(disable : 4101)
455
+ #endif
456
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
457
+ NUITKA_MAY_BE_UNUSED long clong_result;
458
+ #ifdef _MSC_VER
459
+ #pragma warning(pop)
460
+ #endif
461
+
462
+ PyObject *x = PyLong_Type.tp_as_number->nb_xor(*operand1, operand2);
463
+ assert(x != Py_NotImplemented);
464
+
465
+ obj_result = x;
466
+ goto exit_result_object;
467
+
468
+ exit_result_object:
469
+ if (unlikely(obj_result == NULL)) {
470
+ goto exit_result_exception;
471
+ }
472
+ // We got an object handed, that we have to release.
473
+ Py_DECREF(*operand1);
474
+ *operand1 = obj_result;
475
+ goto exit_result_ok;
476
+
477
+ exit_result_ok:
478
+ return true;
479
+
480
+ exit_result_exception:
481
+ return false;
482
+ }
483
+
484
+ return __INPLACE_OPERATION_BITXOR_LONG_OBJECT(operand1, operand2);
485
+ }
486
+
487
+ bool INPLACE_OPERATION_BITXOR_LONG_OBJECT(PyObject **operand1, PyObject *operand2) {
488
+ return _INPLACE_OPERATION_BITXOR_LONG_OBJECT(operand1, operand2);
489
+ }
490
+
491
+ #if PYTHON_VERSION < 0x300
492
+ /* Code referring to "INT" corresponds to Python2 'int' and "INT" to Python2 'int'. */
493
+ static inline bool _INPLACE_OPERATION_BITXOR_INT_INT(PyObject **operand1, PyObject *operand2) {
494
+ assert(operand1); // Pointer must be non-null.
495
+
496
+ CHECK_OBJECT(*operand1);
497
+ assert(PyInt_CheckExact(*operand1));
498
+ CHECK_OBJECT(operand2);
499
+ assert(PyInt_CheckExact(operand2));
500
+
501
+ // Not every code path will make use of all possible results.
502
+ #ifdef _MSC_VER
503
+ #pragma warning(push)
504
+ #pragma warning(disable : 4101)
505
+ #endif
506
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
507
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
508
+ NUITKA_MAY_BE_UNUSED long clong_result;
509
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
510
+ #ifdef _MSC_VER
511
+ #pragma warning(pop)
512
+ #endif
513
+
514
+ CHECK_OBJECT(*operand1);
515
+ assert(PyInt_CheckExact(*operand1));
516
+ CHECK_OBJECT(operand2);
517
+ assert(PyInt_CheckExact(operand2));
518
+
519
+ const long a = PyInt_AS_LONG(*operand1);
520
+ const long b = PyInt_AS_LONG(operand2);
521
+
522
+ const long r = a ^ b;
523
+
524
+ clong_result = r;
525
+ goto exit_result_ok_clong;
526
+
527
+ exit_result_ok_clong:
528
+
529
+ // We got an object handed, that we have to release.
530
+ Py_DECREF(*operand1);
531
+
532
+ // That's our return value then. As we use a dedicated variable, it's
533
+ // OK that way.
534
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
535
+ goto exit_result_ok;
536
+
537
+ exit_result_ok:
538
+ return true;
539
+ }
540
+
541
+ bool INPLACE_OPERATION_BITXOR_INT_INT(PyObject **operand1, PyObject *operand2) {
542
+ return _INPLACE_OPERATION_BITXOR_INT_INT(operand1, operand2);
543
+ }
544
+ #endif
545
+
546
+ #if PYTHON_VERSION < 0x300
547
+ /* Code referring to "OBJECT" corresponds to any Python object and "INT" to Python2 'int'. */
548
+ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITXOR_OBJECT_INT(PyObject **operand1, PyObject *operand2) {
549
+ PyTypeObject *type1 = Py_TYPE(*operand1);
550
+
551
+ #ifdef _MSC_VER
552
+ #pragma warning(push)
553
+ #pragma warning(disable : 4101)
554
+ #endif
555
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
556
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
557
+ #ifdef _MSC_VER
558
+ #pragma warning(pop)
559
+ #endif
560
+
561
+ binaryfunc islot =
562
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_inplace_xor : NULL;
563
+
564
+ if (islot != NULL) {
565
+ PyObject *x = islot(*operand1, operand2);
566
+
567
+ if (x != Py_NotImplemented) {
568
+ obj_result = x;
569
+ goto exit_inplace_result_object;
570
+ }
571
+
572
+ Py_DECREF_IMMORTAL(x);
573
+ }
574
+
575
+ {
576
+ binaryfunc slot1 =
577
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_xor : NULL;
578
+ binaryfunc slot2 = NULL;
579
+
580
+ if (!(type1 == &PyInt_Type)) {
581
+ // Different types, need to consider second value slot.
582
+
583
+ slot2 = PyInt_Type.tp_as_number->nb_xor;
584
+
585
+ if (slot1 == slot2) {
586
+ slot2 = NULL;
587
+ }
588
+ }
589
+
590
+ if (slot1 != NULL) {
591
+ PyObject *x = slot1(*operand1, operand2);
592
+
593
+ if (x != Py_NotImplemented) {
594
+ obj_result = x;
595
+ goto exit_inplace_result_object;
596
+ }
597
+
598
+ Py_DECREF_IMMORTAL(x);
599
+ }
600
+
601
+ if (slot2 != NULL) {
602
+ PyObject *x = slot2(*operand1, operand2);
603
+
604
+ if (x != Py_NotImplemented) {
605
+ obj_result = x;
606
+ goto exit_inplace_result_object;
607
+ }
608
+
609
+ Py_DECREF_IMMORTAL(x);
610
+ }
611
+
612
+ #if PYTHON_VERSION < 0x300
613
+ if (!NEW_STYLE_NUMBER_TYPE(type1) || !1) {
614
+ coercion c1 =
615
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_coerce : NULL;
616
+
617
+ if (c1 != NULL) {
618
+ PyObject *coerced1 = *operand1;
619
+ PyObject *coerced2 = operand2;
620
+
621
+ int err = c1(&coerced1, &coerced2);
622
+
623
+ if (unlikely(err < 0)) {
624
+ goto exit_inplace_exception;
625
+ }
626
+
627
+ if (err == 0) {
628
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
629
+
630
+ if (likely(mv == NULL)) {
631
+ binaryfunc slot = mv->nb_xor;
632
+
633
+ if (likely(slot != NULL)) {
634
+ PyObject *x = slot(coerced1, coerced2);
635
+
636
+ Py_DECREF(coerced1);
637
+ Py_DECREF(coerced2);
638
+
639
+ obj_result = x;
640
+ goto exit_inplace_result_object;
641
+ }
642
+ }
643
+
644
+ // nb_coerce took a reference.
645
+ Py_DECREF(coerced1);
646
+ Py_DECREF(coerced2);
647
+ }
648
+ }
649
+ coercion c2 = PyInt_Type.tp_as_number->nb_coerce;
650
+
651
+ if (c2 != NULL) {
652
+ PyObject *coerced1 = *operand1;
653
+ PyObject *coerced2 = operand2;
654
+
655
+ int err = c2(&coerced2, &coerced1);
656
+
657
+ if (unlikely(err < 0)) {
658
+ goto exit_inplace_exception;
659
+ }
660
+
661
+ if (err == 0) {
662
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
663
+
664
+ if (likely(mv == NULL)) {
665
+ binaryfunc slot = mv->nb_xor;
666
+
667
+ if (likely(slot != NULL)) {
668
+ PyObject *x = slot(coerced1, coerced2);
669
+
670
+ Py_DECREF(coerced1);
671
+ Py_DECREF(coerced2);
672
+
673
+ obj_result = x;
674
+ goto exit_inplace_result_object;
675
+ }
676
+ }
677
+
678
+ // nb_coerce took a reference.
679
+ Py_DECREF(coerced1);
680
+ Py_DECREF(coerced2);
681
+ }
682
+ }
683
+ }
684
+ #endif
685
+
686
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: '%s' and 'int'", type1->tp_name);
687
+ goto exit_inplace_exception;
688
+ }
689
+
690
+ exit_inplace_result_object:
691
+ if (unlikely(obj_result == NULL)) {
692
+ return false;
693
+ }
694
+
695
+ // We got an object handed, that we have to release.
696
+ Py_DECREF(*operand1);
697
+
698
+ // That's our return value then. As we use a dedicated variable, it's
699
+ // OK that way.
700
+ *operand1 = obj_result;
701
+
702
+ return true;
703
+
704
+ exit_inplace_exception:
705
+ return false;
706
+ }
707
+ static inline bool _INPLACE_OPERATION_BITXOR_OBJECT_INT(PyObject **operand1, PyObject *operand2) {
708
+ assert(operand1); // Pointer must be non-null.
709
+
710
+ CHECK_OBJECT(*operand1);
711
+ CHECK_OBJECT(operand2);
712
+ assert(PyInt_CheckExact(operand2));
713
+
714
+ PyTypeObject *type1 = Py_TYPE(*operand1);
715
+
716
+ if (type1 == &PyInt_Type) {
717
+ // return _BINARY_OPERATION_BITXOR_INT_INT_INPLACE(operand1, operand2);
718
+
719
+ // Not every code path will make use of all possible results.
720
+ #ifdef _MSC_VER
721
+ #pragma warning(push)
722
+ #pragma warning(disable : 4101)
723
+ #endif
724
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
725
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
726
+ NUITKA_MAY_BE_UNUSED long clong_result;
727
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
728
+ #ifdef _MSC_VER
729
+ #pragma warning(pop)
730
+ #endif
731
+
732
+ CHECK_OBJECT(*operand1);
733
+ assert(PyInt_CheckExact(*operand1));
734
+ CHECK_OBJECT(operand2);
735
+ assert(PyInt_CheckExact(operand2));
736
+
737
+ const long a = PyInt_AS_LONG(*operand1);
738
+ const long b = PyInt_AS_LONG(operand2);
739
+
740
+ const long r = a ^ b;
741
+
742
+ clong_result = r;
743
+ goto exit_result_ok_clong;
744
+
745
+ exit_result_ok_clong:
746
+
747
+ // We got an object handed, that we have to release.
748
+ Py_DECREF(*operand1);
749
+
750
+ // That's our return value then. As we use a dedicated variable, it's
751
+ // OK that way.
752
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
753
+ goto exit_result_ok;
754
+
755
+ exit_result_ok:
756
+ return true;
757
+ }
758
+
759
+ return __INPLACE_OPERATION_BITXOR_OBJECT_INT(operand1, operand2);
760
+ }
761
+
762
+ bool INPLACE_OPERATION_BITXOR_OBJECT_INT(PyObject **operand1, PyObject *operand2) {
763
+ return _INPLACE_OPERATION_BITXOR_OBJECT_INT(operand1, operand2);
764
+ }
765
+ #endif
766
+
767
+ #if PYTHON_VERSION < 0x300
768
+ /* Code referring to "INT" corresponds to Python2 'int' and "OBJECT" to any Python object. */
769
+ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITXOR_INT_OBJECT(PyObject **operand1, PyObject *operand2) {
770
+ PyTypeObject *type2 = Py_TYPE(operand2);
771
+
772
+ #ifdef _MSC_VER
773
+ #pragma warning(push)
774
+ #pragma warning(disable : 4101)
775
+ #endif
776
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
777
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
778
+ #ifdef _MSC_VER
779
+ #pragma warning(pop)
780
+ #endif
781
+
782
+ // No inplace number slot nb_inplace_xor available for this type.
783
+
784
+ {
785
+ binaryfunc slot1 = PyInt_Type.tp_as_number->nb_xor;
786
+ binaryfunc slot2 = NULL;
787
+
788
+ if (!(&PyInt_Type == type2)) {
789
+ // Different types, need to consider second value slot.
790
+
791
+ slot2 = (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_xor : NULL;
792
+
793
+ if (slot1 == slot2) {
794
+ slot2 = NULL;
795
+ }
796
+ }
797
+
798
+ if (slot1 != NULL) {
799
+ if (slot2 != NULL) {
800
+ if (Nuitka_Type_IsSubtype(type2, &PyInt_Type)) {
801
+ PyObject *x = slot2(*operand1, operand2);
802
+
803
+ if (x != Py_NotImplemented) {
804
+ obj_result = x;
805
+ goto exit_inplace_result_object;
806
+ }
807
+
808
+ Py_DECREF_IMMORTAL(x);
809
+ slot2 = NULL;
810
+ }
811
+ }
812
+
813
+ PyObject *x = slot1(*operand1, operand2);
814
+
815
+ if (x != Py_NotImplemented) {
816
+ obj_result = x;
817
+ goto exit_inplace_result_object;
818
+ }
819
+
820
+ Py_DECREF_IMMORTAL(x);
821
+ }
822
+
823
+ if (slot2 != NULL) {
824
+ PyObject *x = slot2(*operand1, operand2);
825
+
826
+ if (x != Py_NotImplemented) {
827
+ obj_result = x;
828
+ goto exit_inplace_result_object;
829
+ }
830
+
831
+ Py_DECREF_IMMORTAL(x);
832
+ }
833
+
834
+ #if PYTHON_VERSION < 0x300
835
+ if (!1 || !NEW_STYLE_NUMBER_TYPE(type2)) {
836
+ coercion c1 = PyInt_Type.tp_as_number->nb_coerce;
837
+
838
+ if (c1 != NULL) {
839
+ PyObject *coerced1 = *operand1;
840
+ PyObject *coerced2 = operand2;
841
+
842
+ int err = c1(&coerced1, &coerced2);
843
+
844
+ if (unlikely(err < 0)) {
845
+ goto exit_inplace_exception;
846
+ }
847
+
848
+ if (err == 0) {
849
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
850
+
851
+ if (likely(mv == NULL)) {
852
+ binaryfunc slot = mv->nb_xor;
853
+
854
+ if (likely(slot != NULL)) {
855
+ PyObject *x = slot(coerced1, coerced2);
856
+
857
+ Py_DECREF(coerced1);
858
+ Py_DECREF(coerced2);
859
+
860
+ obj_result = x;
861
+ goto exit_inplace_result_object;
862
+ }
863
+ }
864
+
865
+ // nb_coerce took a reference.
866
+ Py_DECREF(coerced1);
867
+ Py_DECREF(coerced2);
868
+ }
869
+ }
870
+ coercion c2 =
871
+ (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_coerce : NULL;
872
+
873
+ if (c2 != NULL) {
874
+ PyObject *coerced1 = *operand1;
875
+ PyObject *coerced2 = operand2;
876
+
877
+ int err = c2(&coerced2, &coerced1);
878
+
879
+ if (unlikely(err < 0)) {
880
+ goto exit_inplace_exception;
881
+ }
882
+
883
+ if (err == 0) {
884
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
885
+
886
+ if (likely(mv == NULL)) {
887
+ binaryfunc slot = mv->nb_xor;
888
+
889
+ if (likely(slot != NULL)) {
890
+ PyObject *x = slot(coerced1, coerced2);
891
+
892
+ Py_DECREF(coerced1);
893
+ Py_DECREF(coerced2);
894
+
895
+ obj_result = x;
896
+ goto exit_inplace_result_object;
897
+ }
898
+ }
899
+
900
+ // nb_coerce took a reference.
901
+ Py_DECREF(coerced1);
902
+ Py_DECREF(coerced2);
903
+ }
904
+ }
905
+ }
906
+ #endif
907
+
908
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: 'int' and '%s'", type2->tp_name);
909
+ goto exit_inplace_exception;
910
+ }
911
+
912
+ exit_inplace_result_object:
913
+ if (unlikely(obj_result == NULL)) {
914
+ return false;
915
+ }
916
+
917
+ // We got an object handed, that we have to release.
918
+ Py_DECREF(*operand1);
919
+
920
+ // That's our return value then. As we use a dedicated variable, it's
921
+ // OK that way.
922
+ *operand1 = obj_result;
923
+
924
+ return true;
925
+
926
+ exit_inplace_exception:
927
+ return false;
928
+ }
929
+ static inline bool _INPLACE_OPERATION_BITXOR_INT_OBJECT(PyObject **operand1, PyObject *operand2) {
930
+ assert(operand1); // Pointer must be non-null.
931
+
932
+ CHECK_OBJECT(*operand1);
933
+ assert(PyInt_CheckExact(*operand1));
934
+ CHECK_OBJECT(operand2);
935
+
936
+ PyTypeObject *type2 = Py_TYPE(operand2);
937
+
938
+ if (&PyInt_Type == type2) {
939
+ // return _BINARY_OPERATION_BITXOR_INT_INT_INPLACE(operand1, operand2);
940
+
941
+ // Not every code path will make use of all possible results.
942
+ #ifdef _MSC_VER
943
+ #pragma warning(push)
944
+ #pragma warning(disable : 4101)
945
+ #endif
946
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
947
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
948
+ NUITKA_MAY_BE_UNUSED long clong_result;
949
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
950
+ #ifdef _MSC_VER
951
+ #pragma warning(pop)
952
+ #endif
953
+
954
+ CHECK_OBJECT(*operand1);
955
+ assert(PyInt_CheckExact(*operand1));
956
+ CHECK_OBJECT(operand2);
957
+ assert(PyInt_CheckExact(operand2));
958
+
959
+ const long a = PyInt_AS_LONG(*operand1);
960
+ const long b = PyInt_AS_LONG(operand2);
961
+
962
+ const long r = a ^ b;
963
+
964
+ clong_result = r;
965
+ goto exit_result_ok_clong;
966
+
967
+ exit_result_ok_clong:
968
+
969
+ // We got an object handed, that we have to release.
970
+ Py_DECREF(*operand1);
971
+
972
+ // That's our return value then. As we use a dedicated variable, it's
973
+ // OK that way.
974
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
975
+ goto exit_result_ok;
976
+
977
+ exit_result_ok:
978
+ return true;
979
+ }
980
+
981
+ return __INPLACE_OPERATION_BITXOR_INT_OBJECT(operand1, operand2);
982
+ }
983
+
984
+ bool INPLACE_OPERATION_BITXOR_INT_OBJECT(PyObject **operand1, PyObject *operand2) {
985
+ return _INPLACE_OPERATION_BITXOR_INT_OBJECT(operand1, operand2);
986
+ }
987
+ #endif
988
+
989
+ #if PYTHON_VERSION < 0x300
990
+ /* Code referring to "INT" corresponds to Python2 'int' and "CLONG" to C platform long value. */
991
+ static inline bool _INPLACE_OPERATION_BITXOR_INT_CLONG(PyObject **operand1, long operand2) {
992
+ assert(operand1); // Pointer must be non-null.
993
+
994
+ CHECK_OBJECT(*operand1);
995
+ assert(PyInt_CheckExact(*operand1));
996
+
997
+ // Not every code path will make use of all possible results.
998
+ #ifdef _MSC_VER
999
+ #pragma warning(push)
1000
+ #pragma warning(disable : 4101)
1001
+ #endif
1002
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1003
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1004
+ NUITKA_MAY_BE_UNUSED long clong_result;
1005
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
1006
+ #ifdef _MSC_VER
1007
+ #pragma warning(pop)
1008
+ #endif
1009
+
1010
+ CHECK_OBJECT(*operand1);
1011
+ assert(PyInt_CheckExact(*operand1));
1012
+
1013
+ const long a = PyInt_AS_LONG(*operand1);
1014
+ const long b = operand2;
1015
+
1016
+ const long r = a ^ b;
1017
+
1018
+ clong_result = r;
1019
+ goto exit_result_ok_clong;
1020
+
1021
+ exit_result_ok_clong:
1022
+
1023
+ // We got an object handed, that we have to release.
1024
+ Py_DECREF(*operand1);
1025
+
1026
+ // That's our return value then. As we use a dedicated variable, it's
1027
+ // OK that way.
1028
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
1029
+ goto exit_result_ok;
1030
+
1031
+ exit_result_ok:
1032
+ return true;
1033
+ }
1034
+
1035
+ bool INPLACE_OPERATION_BITXOR_INT_CLONG(PyObject **operand1, long operand2) {
1036
+ return _INPLACE_OPERATION_BITXOR_INT_CLONG(operand1, operand2);
1037
+ }
1038
+ #endif
1039
+
1040
+ #if PYTHON_VERSION < 0x300
1041
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "INT" to Python2 'int'. */
1042
+ static inline bool _INPLACE_OPERATION_BITXOR_LONG_INT(PyObject **operand1, PyObject *operand2) {
1043
+ assert(operand1); // Pointer must be non-null.
1044
+
1045
+ CHECK_OBJECT(*operand1);
1046
+ assert(PyLong_CheckExact(*operand1));
1047
+ CHECK_OBJECT(operand2);
1048
+ assert(PyInt_CheckExact(operand2));
1049
+
1050
+ #ifdef _MSC_VER
1051
+ #pragma warning(push)
1052
+ #pragma warning(disable : 4101)
1053
+ #endif
1054
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1055
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1056
+ #ifdef _MSC_VER
1057
+ #pragma warning(pop)
1058
+ #endif
1059
+
1060
+ // No inplace number slot nb_inplace_xor available for this type.
1061
+
1062
+ {
1063
+ binaryfunc slot1 = PyLong_Type.tp_as_number->nb_xor;
1064
+ // Slot2 ignored on purpose, type1 takes precedence.
1065
+
1066
+ if (slot1 != NULL) {
1067
+ PyObject *x = slot1(*operand1, operand2);
1068
+
1069
+ if (x != Py_NotImplemented) {
1070
+ obj_result = x;
1071
+ goto exit_inplace_result_object;
1072
+ }
1073
+
1074
+ Py_DECREF_IMMORTAL(x);
1075
+ }
1076
+
1077
+ // Statically recognized that coercion is not possible with these types
1078
+
1079
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: 'long' and 'int'");
1080
+ goto exit_inplace_exception;
1081
+ }
1082
+
1083
+ exit_inplace_result_object:
1084
+ if (unlikely(obj_result == NULL)) {
1085
+ return false;
1086
+ }
1087
+
1088
+ // We got an object handed, that we have to release.
1089
+ Py_DECREF(*operand1);
1090
+
1091
+ // That's our return value then. As we use a dedicated variable, it's
1092
+ // OK that way.
1093
+ *operand1 = obj_result;
1094
+
1095
+ return true;
1096
+
1097
+ exit_inplace_exception:
1098
+ return false;
1099
+ }
1100
+
1101
+ bool INPLACE_OPERATION_BITXOR_LONG_INT(PyObject **operand1, PyObject *operand2) {
1102
+ return _INPLACE_OPERATION_BITXOR_LONG_INT(operand1, operand2);
1103
+ }
1104
+ #endif
1105
+
1106
+ #if PYTHON_VERSION < 0x300
1107
+ /* Code referring to "INT" corresponds to Python2 'int' and "LONG" to Python2 'long', Python3 'int'. */
1108
+ static inline bool _INPLACE_OPERATION_BITXOR_INT_LONG(PyObject **operand1, PyObject *operand2) {
1109
+ assert(operand1); // Pointer must be non-null.
1110
+
1111
+ CHECK_OBJECT(*operand1);
1112
+ assert(PyInt_CheckExact(*operand1));
1113
+ CHECK_OBJECT(operand2);
1114
+ assert(PyLong_CheckExact(operand2));
1115
+
1116
+ #ifdef _MSC_VER
1117
+ #pragma warning(push)
1118
+ #pragma warning(disable : 4101)
1119
+ #endif
1120
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1121
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1122
+ #ifdef _MSC_VER
1123
+ #pragma warning(pop)
1124
+ #endif
1125
+
1126
+ // No inplace number slot nb_inplace_xor available for this type.
1127
+
1128
+ {
1129
+ // Slot1 ignored on purpose, type2 takes precedence.
1130
+ binaryfunc slot2 = NULL;
1131
+
1132
+ if (!(0)) {
1133
+ // Different types, need to consider second value slot.
1134
+
1135
+ slot2 = PyLong_Type.tp_as_number->nb_xor;
1136
+ }
1137
+
1138
+ if (slot2 != NULL) {
1139
+ PyObject *x = slot2(*operand1, operand2);
1140
+
1141
+ if (x != Py_NotImplemented) {
1142
+ obj_result = x;
1143
+ goto exit_inplace_result_object;
1144
+ }
1145
+
1146
+ Py_DECREF_IMMORTAL(x);
1147
+ }
1148
+
1149
+ // Statically recognized that coercion is not possible with these types
1150
+
1151
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: 'int' and 'long'");
1152
+ goto exit_inplace_exception;
1153
+ }
1154
+
1155
+ exit_inplace_result_object:
1156
+ if (unlikely(obj_result == NULL)) {
1157
+ return false;
1158
+ }
1159
+
1160
+ // We got an object handed, that we have to release.
1161
+ Py_DECREF(*operand1);
1162
+
1163
+ // That's our return value then. As we use a dedicated variable, it's
1164
+ // OK that way.
1165
+ *operand1 = obj_result;
1166
+
1167
+ return true;
1168
+
1169
+ exit_inplace_exception:
1170
+ return false;
1171
+ }
1172
+
1173
+ bool INPLACE_OPERATION_BITXOR_INT_LONG(PyObject **operand1, PyObject *operand2) {
1174
+ return _INPLACE_OPERATION_BITXOR_INT_LONG(operand1, operand2);
1175
+ }
1176
+ #endif
1177
+
1178
+ /* Code referring to "SET" corresponds to Python 'set' and "SET" to Python 'set'. */
1179
+ static inline bool _INPLACE_OPERATION_BITXOR_SET_SET(PyObject **operand1, PyObject *operand2) {
1180
+ assert(operand1); // Pointer must be non-null.
1181
+
1182
+ CHECK_OBJECT(*operand1);
1183
+ assert(PySet_CheckExact(*operand1));
1184
+ CHECK_OBJECT(operand2);
1185
+ assert(PySet_CheckExact(operand2));
1186
+
1187
+ // Not every code path will make use of all possible results.
1188
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1189
+
1190
+ PyObject *x = PySet_Type.tp_as_number->nb_inplace_xor(*operand1, operand2);
1191
+
1192
+ assert(x != Py_NotImplemented);
1193
+
1194
+ obj_result = x;
1195
+ goto exit_result_object;
1196
+
1197
+ exit_result_object:
1198
+ if (unlikely(obj_result == NULL)) {
1199
+ goto exit_result_exception;
1200
+ }
1201
+ // We got an object handed, that we have to release.
1202
+ Py_DECREF(*operand1);
1203
+
1204
+ *operand1 = obj_result;
1205
+ goto exit_result_ok;
1206
+
1207
+ exit_result_ok:
1208
+ return true;
1209
+
1210
+ exit_result_exception:
1211
+ return false;
1212
+ }
1213
+
1214
+ bool INPLACE_OPERATION_BITXOR_SET_SET(PyObject **operand1, PyObject *operand2) {
1215
+ return _INPLACE_OPERATION_BITXOR_SET_SET(operand1, operand2);
1216
+ }
1217
+
1218
+ /* Code referring to "OBJECT" corresponds to any Python object and "SET" to Python 'set'. */
1219
+ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITXOR_OBJECT_SET(PyObject **operand1, PyObject *operand2) {
1220
+ PyTypeObject *type1 = Py_TYPE(*operand1);
1221
+
1222
+ #ifdef _MSC_VER
1223
+ #pragma warning(push)
1224
+ #pragma warning(disable : 4101)
1225
+ #endif
1226
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1227
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1228
+ #ifdef _MSC_VER
1229
+ #pragma warning(pop)
1230
+ #endif
1231
+
1232
+ binaryfunc islot =
1233
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_inplace_xor : NULL;
1234
+
1235
+ if (islot != NULL) {
1236
+ PyObject *x = islot(*operand1, operand2);
1237
+
1238
+ if (x != Py_NotImplemented) {
1239
+ obj_result = x;
1240
+ goto exit_inplace_result_object;
1241
+ }
1242
+
1243
+ Py_DECREF_IMMORTAL(x);
1244
+ }
1245
+
1246
+ {
1247
+ binaryfunc slot1 =
1248
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_xor : NULL;
1249
+ binaryfunc slot2 = NULL;
1250
+
1251
+ if (!(type1 == &PySet_Type)) {
1252
+ // Different types, need to consider second value slot.
1253
+
1254
+ slot2 = PySet_Type.tp_as_number->nb_xor;
1255
+
1256
+ if (slot1 == slot2) {
1257
+ slot2 = NULL;
1258
+ }
1259
+ }
1260
+
1261
+ if (slot1 != NULL) {
1262
+ PyObject *x = slot1(*operand1, operand2);
1263
+
1264
+ if (x != Py_NotImplemented) {
1265
+ obj_result = x;
1266
+ goto exit_inplace_result_object;
1267
+ }
1268
+
1269
+ Py_DECREF_IMMORTAL(x);
1270
+ }
1271
+
1272
+ if (slot2 != NULL) {
1273
+ PyObject *x = slot2(*operand1, operand2);
1274
+
1275
+ if (x != Py_NotImplemented) {
1276
+ obj_result = x;
1277
+ goto exit_inplace_result_object;
1278
+ }
1279
+
1280
+ Py_DECREF_IMMORTAL(x);
1281
+ }
1282
+
1283
+ #if PYTHON_VERSION < 0x300
1284
+ if (!NEW_STYLE_NUMBER_TYPE(type1) || !0) {
1285
+ coercion c1 =
1286
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_coerce : NULL;
1287
+
1288
+ if (c1 != NULL) {
1289
+ PyObject *coerced1 = *operand1;
1290
+ PyObject *coerced2 = operand2;
1291
+
1292
+ int err = c1(&coerced1, &coerced2);
1293
+
1294
+ if (unlikely(err < 0)) {
1295
+ goto exit_inplace_exception;
1296
+ }
1297
+
1298
+ if (err == 0) {
1299
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
1300
+
1301
+ if (likely(mv == NULL)) {
1302
+ binaryfunc slot = mv->nb_xor;
1303
+
1304
+ if (likely(slot != NULL)) {
1305
+ PyObject *x = slot(coerced1, coerced2);
1306
+
1307
+ Py_DECREF(coerced1);
1308
+ Py_DECREF(coerced2);
1309
+
1310
+ obj_result = x;
1311
+ goto exit_inplace_result_object;
1312
+ }
1313
+ }
1314
+
1315
+ // nb_coerce took a reference.
1316
+ Py_DECREF(coerced1);
1317
+ Py_DECREF(coerced2);
1318
+ }
1319
+ }
1320
+ }
1321
+ #endif
1322
+
1323
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: '%s' and 'set'", type1->tp_name);
1324
+ goto exit_inplace_exception;
1325
+ }
1326
+
1327
+ exit_inplace_result_object:
1328
+ if (unlikely(obj_result == NULL)) {
1329
+ return false;
1330
+ }
1331
+
1332
+ // We got an object handed, that we have to release.
1333
+ Py_DECREF(*operand1);
1334
+
1335
+ // That's our return value then. As we use a dedicated variable, it's
1336
+ // OK that way.
1337
+ *operand1 = obj_result;
1338
+
1339
+ return true;
1340
+
1341
+ exit_inplace_exception:
1342
+ return false;
1343
+ }
1344
+ static inline bool _INPLACE_OPERATION_BITXOR_OBJECT_SET(PyObject **operand1, PyObject *operand2) {
1345
+ assert(operand1); // Pointer must be non-null.
1346
+
1347
+ CHECK_OBJECT(*operand1);
1348
+ CHECK_OBJECT(operand2);
1349
+ assert(PySet_CheckExact(operand2));
1350
+
1351
+ PyTypeObject *type1 = Py_TYPE(*operand1);
1352
+
1353
+ if (type1 == &PySet_Type) {
1354
+ // return _BINARY_OPERATION_BITXOR_SET_SET_INPLACE(operand1, operand2);
1355
+
1356
+ // Not every code path will make use of all possible results.
1357
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1358
+
1359
+ PyObject *x = PySet_Type.tp_as_number->nb_inplace_xor(*operand1, operand2);
1360
+
1361
+ assert(x != Py_NotImplemented);
1362
+
1363
+ obj_result = x;
1364
+ goto exit_result_object;
1365
+
1366
+ exit_result_object:
1367
+ if (unlikely(obj_result == NULL)) {
1368
+ goto exit_result_exception;
1369
+ }
1370
+ // We got an object handed, that we have to release.
1371
+ Py_DECREF(*operand1);
1372
+
1373
+ *operand1 = obj_result;
1374
+ goto exit_result_ok;
1375
+
1376
+ exit_result_ok:
1377
+ return true;
1378
+
1379
+ exit_result_exception:
1380
+ return false;
1381
+ }
1382
+
1383
+ return __INPLACE_OPERATION_BITXOR_OBJECT_SET(operand1, operand2);
1384
+ }
1385
+
1386
+ bool INPLACE_OPERATION_BITXOR_OBJECT_SET(PyObject **operand1, PyObject *operand2) {
1387
+ return _INPLACE_OPERATION_BITXOR_OBJECT_SET(operand1, operand2);
1388
+ }
1389
+
1390
+ /* Code referring to "SET" corresponds to Python 'set' and "OBJECT" to any Python object. */
1391
+ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITXOR_SET_OBJECT(PyObject **operand1, PyObject *operand2) {
1392
+ PyTypeObject *type2 = Py_TYPE(operand2);
1393
+
1394
+ #ifdef _MSC_VER
1395
+ #pragma warning(push)
1396
+ #pragma warning(disable : 4101)
1397
+ #endif
1398
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1399
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1400
+ #ifdef _MSC_VER
1401
+ #pragma warning(pop)
1402
+ #endif
1403
+
1404
+ binaryfunc islot = PySet_Type.tp_as_number->nb_inplace_xor;
1405
+
1406
+ if (islot != NULL) {
1407
+ PyObject *x = islot(*operand1, operand2);
1408
+
1409
+ if (x != Py_NotImplemented) {
1410
+ obj_result = x;
1411
+ goto exit_inplace_result_object;
1412
+ }
1413
+
1414
+ Py_DECREF_IMMORTAL(x);
1415
+ }
1416
+
1417
+ {
1418
+ binaryfunc slot1 = PySet_Type.tp_as_number->nb_xor;
1419
+ binaryfunc slot2 = NULL;
1420
+
1421
+ if (!(&PySet_Type == type2)) {
1422
+ // Different types, need to consider second value slot.
1423
+
1424
+ slot2 = (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_xor : NULL;
1425
+
1426
+ if (slot1 == slot2) {
1427
+ slot2 = NULL;
1428
+ }
1429
+ }
1430
+
1431
+ if (slot1 != NULL) {
1432
+ if (slot2 != NULL) {
1433
+ if (Nuitka_Type_IsSubtype(type2, &PySet_Type)) {
1434
+ PyObject *x = slot2(*operand1, operand2);
1435
+
1436
+ if (x != Py_NotImplemented) {
1437
+ obj_result = x;
1438
+ goto exit_inplace_result_object;
1439
+ }
1440
+
1441
+ Py_DECREF_IMMORTAL(x);
1442
+ slot2 = NULL;
1443
+ }
1444
+ }
1445
+
1446
+ PyObject *x = slot1(*operand1, operand2);
1447
+
1448
+ if (x != Py_NotImplemented) {
1449
+ obj_result = x;
1450
+ goto exit_inplace_result_object;
1451
+ }
1452
+
1453
+ Py_DECREF_IMMORTAL(x);
1454
+ }
1455
+
1456
+ if (slot2 != NULL) {
1457
+ PyObject *x = slot2(*operand1, operand2);
1458
+
1459
+ if (x != Py_NotImplemented) {
1460
+ obj_result = x;
1461
+ goto exit_inplace_result_object;
1462
+ }
1463
+
1464
+ Py_DECREF_IMMORTAL(x);
1465
+ }
1466
+
1467
+ #if PYTHON_VERSION < 0x300
1468
+ if (!0 || !NEW_STYLE_NUMBER_TYPE(type2)) {
1469
+ coercion c2 =
1470
+ (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_coerce : NULL;
1471
+
1472
+ if (c2 != NULL) {
1473
+ PyObject *coerced1 = *operand1;
1474
+ PyObject *coerced2 = operand2;
1475
+
1476
+ int err = c2(&coerced2, &coerced1);
1477
+
1478
+ if (unlikely(err < 0)) {
1479
+ goto exit_inplace_exception;
1480
+ }
1481
+
1482
+ if (err == 0) {
1483
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
1484
+
1485
+ if (likely(mv == NULL)) {
1486
+ binaryfunc slot = mv->nb_xor;
1487
+
1488
+ if (likely(slot != NULL)) {
1489
+ PyObject *x = slot(coerced1, coerced2);
1490
+
1491
+ Py_DECREF(coerced1);
1492
+ Py_DECREF(coerced2);
1493
+
1494
+ obj_result = x;
1495
+ goto exit_inplace_result_object;
1496
+ }
1497
+ }
1498
+
1499
+ // nb_coerce took a reference.
1500
+ Py_DECREF(coerced1);
1501
+ Py_DECREF(coerced2);
1502
+ }
1503
+ }
1504
+ }
1505
+ #endif
1506
+
1507
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: 'set' and '%s'", type2->tp_name);
1508
+ goto exit_inplace_exception;
1509
+ }
1510
+
1511
+ exit_inplace_result_object:
1512
+ if (unlikely(obj_result == NULL)) {
1513
+ return false;
1514
+ }
1515
+
1516
+ // We got an object handed, that we have to release.
1517
+ Py_DECREF(*operand1);
1518
+
1519
+ // That's our return value then. As we use a dedicated variable, it's
1520
+ // OK that way.
1521
+ *operand1 = obj_result;
1522
+
1523
+ return true;
1524
+
1525
+ exit_inplace_exception:
1526
+ return false;
1527
+ }
1528
+ static inline bool _INPLACE_OPERATION_BITXOR_SET_OBJECT(PyObject **operand1, PyObject *operand2) {
1529
+ assert(operand1); // Pointer must be non-null.
1530
+
1531
+ CHECK_OBJECT(*operand1);
1532
+ assert(PySet_CheckExact(*operand1));
1533
+ CHECK_OBJECT(operand2);
1534
+
1535
+ PyTypeObject *type2 = Py_TYPE(operand2);
1536
+
1537
+ if (&PySet_Type == type2) {
1538
+ // return _BINARY_OPERATION_BITXOR_SET_SET_INPLACE(operand1, operand2);
1539
+
1540
+ // Not every code path will make use of all possible results.
1541
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1542
+
1543
+ PyObject *x = PySet_Type.tp_as_number->nb_inplace_xor(*operand1, operand2);
1544
+
1545
+ assert(x != Py_NotImplemented);
1546
+
1547
+ obj_result = x;
1548
+ goto exit_result_object;
1549
+
1550
+ exit_result_object:
1551
+ if (unlikely(obj_result == NULL)) {
1552
+ goto exit_result_exception;
1553
+ }
1554
+ // We got an object handed, that we have to release.
1555
+ Py_DECREF(*operand1);
1556
+
1557
+ *operand1 = obj_result;
1558
+ goto exit_result_ok;
1559
+
1560
+ exit_result_ok:
1561
+ return true;
1562
+
1563
+ exit_result_exception:
1564
+ return false;
1565
+ }
1566
+
1567
+ return __INPLACE_OPERATION_BITXOR_SET_OBJECT(operand1, operand2);
1568
+ }
1569
+
1570
+ bool INPLACE_OPERATION_BITXOR_SET_OBJECT(PyObject **operand1, PyObject *operand2) {
1571
+ return _INPLACE_OPERATION_BITXOR_SET_OBJECT(operand1, operand2);
1572
+ }
1573
+
1574
+ /* Code referring to "OBJECT" corresponds to any Python object and "OBJECT" to any Python object. */
1575
+ static inline bool _INPLACE_OPERATION_BITXOR_OBJECT_OBJECT(PyObject **operand1, PyObject *operand2) {
1576
+ assert(operand1); // Pointer must be non-null.
1577
+
1578
+ CHECK_OBJECT(*operand1);
1579
+ CHECK_OBJECT(operand2);
1580
+
1581
+ #if PYTHON_VERSION < 0x300
1582
+ if (PyInt_CheckExact(*operand1) && PyInt_CheckExact(operand2)) {
1583
+
1584
+ // Not every code path will make use of all possible results.
1585
+ #ifdef _MSC_VER
1586
+ #pragma warning(push)
1587
+ #pragma warning(disable : 4101)
1588
+ #endif
1589
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1590
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1591
+ NUITKA_MAY_BE_UNUSED long clong_result;
1592
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
1593
+ #ifdef _MSC_VER
1594
+ #pragma warning(pop)
1595
+ #endif
1596
+
1597
+ CHECK_OBJECT(*operand1);
1598
+ assert(PyInt_CheckExact(*operand1));
1599
+ CHECK_OBJECT(operand2);
1600
+ assert(PyInt_CheckExact(operand2));
1601
+
1602
+ const long a = PyInt_AS_LONG(*operand1);
1603
+ const long b = PyInt_AS_LONG(operand2);
1604
+
1605
+ const long r = a ^ b;
1606
+
1607
+ clong_result = r;
1608
+ goto exit_result_ok_clong;
1609
+
1610
+ exit_result_ok_clong:
1611
+
1612
+ // We got an object handed, that we have to release.
1613
+ Py_DECREF(*operand1);
1614
+
1615
+ // That's our return value then. As we use a dedicated variable, it's
1616
+ // OK that way.
1617
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
1618
+ goto exit_result_ok;
1619
+
1620
+ exit_result_ok:
1621
+ return true;
1622
+ }
1623
+ #endif
1624
+
1625
+ if (Py_TYPE(*operand1) == Py_TYPE(operand2)) {
1626
+ #if PYTHON_VERSION >= 0x300
1627
+ if (PyLong_CheckExact(operand2)) {
1628
+ return _INPLACE_OPERATION_BITXOR_LONG_LONG(operand1, operand2);
1629
+ }
1630
+ #endif
1631
+ }
1632
+
1633
+ PyTypeObject *type1 = Py_TYPE(*operand1);
1634
+ PyTypeObject *type2 = Py_TYPE(operand2);
1635
+
1636
+ #ifdef _MSC_VER
1637
+ #pragma warning(push)
1638
+ #pragma warning(disable : 4101)
1639
+ #endif
1640
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1641
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1642
+ #ifdef _MSC_VER
1643
+ #pragma warning(pop)
1644
+ #endif
1645
+
1646
+ binaryfunc islot =
1647
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_inplace_xor : NULL;
1648
+
1649
+ if (islot != NULL) {
1650
+ PyObject *x = islot(*operand1, operand2);
1651
+
1652
+ if (x != Py_NotImplemented) {
1653
+ obj_result = x;
1654
+ goto exit_inplace_result_object;
1655
+ }
1656
+
1657
+ Py_DECREF_IMMORTAL(x);
1658
+ }
1659
+
1660
+ {
1661
+ binaryfunc slot1 =
1662
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_xor : NULL;
1663
+ binaryfunc slot2 = NULL;
1664
+
1665
+ if (!(type1 == type2)) {
1666
+ // Different types, need to consider second value slot.
1667
+
1668
+ slot2 = (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_xor : NULL;
1669
+
1670
+ if (slot1 == slot2) {
1671
+ slot2 = NULL;
1672
+ }
1673
+ }
1674
+
1675
+ if (slot1 != NULL) {
1676
+ if (slot2 != NULL) {
1677
+ if (Nuitka_Type_IsSubtype(type2, type1)) {
1678
+ PyObject *x = slot2(*operand1, operand2);
1679
+
1680
+ if (x != Py_NotImplemented) {
1681
+ obj_result = x;
1682
+ goto exit_inplace_result_object;
1683
+ }
1684
+
1685
+ Py_DECREF_IMMORTAL(x);
1686
+ slot2 = NULL;
1687
+ }
1688
+ }
1689
+
1690
+ PyObject *x = slot1(*operand1, operand2);
1691
+
1692
+ if (x != Py_NotImplemented) {
1693
+ obj_result = x;
1694
+ goto exit_inplace_result_object;
1695
+ }
1696
+
1697
+ Py_DECREF_IMMORTAL(x);
1698
+ }
1699
+
1700
+ if (slot2 != NULL) {
1701
+ PyObject *x = slot2(*operand1, operand2);
1702
+
1703
+ if (x != Py_NotImplemented) {
1704
+ obj_result = x;
1705
+ goto exit_inplace_result_object;
1706
+ }
1707
+
1708
+ Py_DECREF_IMMORTAL(x);
1709
+ }
1710
+
1711
+ #if PYTHON_VERSION < 0x300
1712
+ if (!NEW_STYLE_NUMBER_TYPE(type1) || !NEW_STYLE_NUMBER_TYPE(type2)) {
1713
+ coercion c1 =
1714
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_coerce : NULL;
1715
+
1716
+ if (c1 != NULL) {
1717
+ PyObject *coerced1 = *operand1;
1718
+ PyObject *coerced2 = operand2;
1719
+
1720
+ int err = c1(&coerced1, &coerced2);
1721
+
1722
+ if (unlikely(err < 0)) {
1723
+ goto exit_inplace_exception;
1724
+ }
1725
+
1726
+ if (err == 0) {
1727
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
1728
+
1729
+ if (likely(mv == NULL)) {
1730
+ binaryfunc slot = mv->nb_xor;
1731
+
1732
+ if (likely(slot != NULL)) {
1733
+ PyObject *x = slot(coerced1, coerced2);
1734
+
1735
+ Py_DECREF(coerced1);
1736
+ Py_DECREF(coerced2);
1737
+
1738
+ obj_result = x;
1739
+ goto exit_inplace_result_object;
1740
+ }
1741
+ }
1742
+
1743
+ // nb_coerce took a reference.
1744
+ Py_DECREF(coerced1);
1745
+ Py_DECREF(coerced2);
1746
+ }
1747
+ }
1748
+ coercion c2 =
1749
+ (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_coerce : NULL;
1750
+
1751
+ if (c2 != NULL) {
1752
+ PyObject *coerced1 = *operand1;
1753
+ PyObject *coerced2 = operand2;
1754
+
1755
+ int err = c2(&coerced2, &coerced1);
1756
+
1757
+ if (unlikely(err < 0)) {
1758
+ goto exit_inplace_exception;
1759
+ }
1760
+
1761
+ if (err == 0) {
1762
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
1763
+
1764
+ if (likely(mv == NULL)) {
1765
+ binaryfunc slot = mv->nb_xor;
1766
+
1767
+ if (likely(slot != NULL)) {
1768
+ PyObject *x = slot(coerced1, coerced2);
1769
+
1770
+ Py_DECREF(coerced1);
1771
+ Py_DECREF(coerced2);
1772
+
1773
+ obj_result = x;
1774
+ goto exit_inplace_result_object;
1775
+ }
1776
+ }
1777
+
1778
+ // nb_coerce took a reference.
1779
+ Py_DECREF(coerced1);
1780
+ Py_DECREF(coerced2);
1781
+ }
1782
+ }
1783
+ }
1784
+ #endif
1785
+
1786
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for ^=: '%s' and '%s'", type1->tp_name,
1787
+ type2->tp_name);
1788
+ goto exit_inplace_exception;
1789
+ }
1790
+
1791
+ exit_inplace_result_object:
1792
+ if (unlikely(obj_result == NULL)) {
1793
+ return false;
1794
+ }
1795
+
1796
+ // We got an object handed, that we have to release.
1797
+ Py_DECREF(*operand1);
1798
+
1799
+ // That's our return value then. As we use a dedicated variable, it's
1800
+ // OK that way.
1801
+ *operand1 = obj_result;
1802
+
1803
+ return true;
1804
+
1805
+ exit_inplace_exception:
1806
+ return false;
1807
+ }
1808
+
1809
+ bool INPLACE_OPERATION_BITXOR_OBJECT_OBJECT(PyObject **operand1, PyObject *operand2) {
1810
+ return _INPLACE_OPERATION_BITXOR_OBJECT_OBJECT(operand1, operand2);
1811
+ }
1812
+
1813
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1814
+ // integrates with CPython, but also works on its own.
1815
+ //
1816
+ // Licensed under the Apache License, Version 2.0 (the "License");
1817
+ // you may not use this file except in compliance with the License.
1818
+ // You may obtain a copy of the License at
1819
+ //
1820
+ // http://www.apache.org/licenses/LICENSE-2.0
1821
+ //
1822
+ // Unless required by applicable law or agreed to in writing, software
1823
+ // distributed under the License is distributed on an "AS IS" BASIS,
1824
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1825
+ // See the License for the specific language governing permissions and
1826
+ // limitations under the License.