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,2406 @@
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 HelperOperationBinary.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
+ #include "HelpersOperationBinaryDivmodUtils.c"
11
+ /* C helpers for type specialized "divmod" (DIVMOD) operations */
12
+
13
+ #if PYTHON_VERSION < 0x300
14
+ /* Code referring to "INT" corresponds to Python2 'int' and "INT" to Python2 'int'. */
15
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_INT_INT(PyObject *operand1, PyObject *operand2) {
16
+ CHECK_OBJECT(operand1);
17
+ assert(PyInt_CheckExact(operand1));
18
+ CHECK_OBJECT(operand2);
19
+ assert(PyInt_CheckExact(operand2));
20
+
21
+ PyObject *result;
22
+
23
+ // Not every code path will make use of all possible results.
24
+ #ifdef _MSC_VER
25
+ #pragma warning(push)
26
+ #pragma warning(disable : 4101)
27
+ #endif
28
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
29
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
30
+ NUITKA_MAY_BE_UNUSED long clong_result;
31
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
32
+ #ifdef _MSC_VER
33
+ #pragma warning(pop)
34
+ #endif
35
+
36
+ CHECK_OBJECT(operand1);
37
+ assert(PyInt_CheckExact(operand1));
38
+ CHECK_OBJECT(operand2);
39
+ assert(PyInt_CheckExact(operand2));
40
+
41
+ const long a = PyInt_AS_LONG(operand1);
42
+ const long b = PyInt_AS_LONG(operand2);
43
+
44
+ if (unlikely(b == 0)) {
45
+ PyThreadState *tstate = PyThreadState_GET();
46
+
47
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "integer division or modulo by zero");
48
+ goto exit_result_exception;
49
+ }
50
+
51
+ if (likely(b != -1 || !UNARY_NEG_WOULD_OVERFLOW(a))) {
52
+ long a_div_b = a / b;
53
+ long a_mod_b = (long)(a - (unsigned long)a_div_b * b);
54
+
55
+ if (a_mod_b && (b ^ a_mod_b) < 0) {
56
+ a_mod_b += b;
57
+ a_div_b -= 1;
58
+ }
59
+
60
+ PyObject *r = Py_BuildValue("(ll)", a_div_b, a_mod_b);
61
+ obj_result = r;
62
+ goto exit_result_object;
63
+ }
64
+
65
+ {
66
+ PyObject *operand1_object = operand1;
67
+ PyObject *operand2_object = operand2;
68
+
69
+ PyObject *r = PyLong_Type.tp_as_number->nb_divmod(operand1_object, operand2_object);
70
+ assert(r != Py_NotImplemented);
71
+
72
+ obj_result = r;
73
+ goto exit_result_object;
74
+ }
75
+
76
+ exit_result_object:
77
+ if (unlikely(obj_result == NULL)) {
78
+ goto exit_result_exception;
79
+ }
80
+ result = obj_result;
81
+ goto exit_result_ok;
82
+
83
+ exit_result_ok:
84
+ return result;
85
+
86
+ exit_result_exception:
87
+ return NULL;
88
+ }
89
+
90
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_INT_INT(PyObject *operand1, PyObject *operand2) {
91
+ return _BINARY_OPERATION_DIVMOD_OBJECT_INT_INT(operand1, operand2);
92
+ }
93
+ #endif
94
+
95
+ #if PYTHON_VERSION < 0x300
96
+ /* Code referring to "OBJECT" corresponds to any Python object and "INT" to Python2 'int'. */
97
+ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_INT(PyObject *operand1,
98
+ PyObject *operand2) {
99
+ PyTypeObject *type1 = Py_TYPE(operand1);
100
+
101
+ #ifdef _MSC_VER
102
+ #pragma warning(push)
103
+ #pragma warning(disable : 4101)
104
+ #endif
105
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
106
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
107
+ #ifdef _MSC_VER
108
+ #pragma warning(pop)
109
+ #endif
110
+
111
+ binaryfunc slot1 =
112
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_divmod : NULL;
113
+ binaryfunc slot2 = NULL;
114
+
115
+ if (!(type1 == &PyInt_Type)) {
116
+ // Different types, need to consider second value slot.
117
+
118
+ slot2 = PyInt_Type.tp_as_number->nb_divmod;
119
+
120
+ if (slot1 == slot2) {
121
+ slot2 = NULL;
122
+ }
123
+ }
124
+
125
+ if (slot1 != NULL) {
126
+ PyObject *x = slot1(operand1, operand2);
127
+
128
+ if (x != Py_NotImplemented) {
129
+ obj_result = x;
130
+ goto exit_binary_result_object;
131
+ }
132
+
133
+ Py_DECREF_IMMORTAL(x);
134
+ }
135
+
136
+ if (slot2 != NULL) {
137
+ PyObject *x = slot2(operand1, operand2);
138
+
139
+ if (x != Py_NotImplemented) {
140
+ obj_result = x;
141
+ goto exit_binary_result_object;
142
+ }
143
+
144
+ Py_DECREF_IMMORTAL(x);
145
+ }
146
+
147
+ #if PYTHON_VERSION < 0x300
148
+ if (!NEW_STYLE_NUMBER_TYPE(type1) || !1) {
149
+ coercion c1 =
150
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_coerce : NULL;
151
+
152
+ if (c1 != NULL) {
153
+ PyObject *coerced1 = operand1;
154
+ PyObject *coerced2 = operand2;
155
+
156
+ int err = c1(&coerced1, &coerced2);
157
+
158
+ if (unlikely(err < 0)) {
159
+ goto exit_binary_exception;
160
+ }
161
+
162
+ if (err == 0) {
163
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
164
+
165
+ if (likely(mv == NULL)) {
166
+ binaryfunc slot = mv->nb_divmod;
167
+
168
+ if (likely(slot != NULL)) {
169
+ PyObject *x = slot(coerced1, coerced2);
170
+
171
+ Py_DECREF(coerced1);
172
+ Py_DECREF(coerced2);
173
+
174
+ obj_result = x;
175
+ goto exit_binary_result_object;
176
+ }
177
+ }
178
+
179
+ // nb_coerce took a reference.
180
+ Py_DECREF(coerced1);
181
+ Py_DECREF(coerced2);
182
+ }
183
+ }
184
+ coercion c2 = PyInt_Type.tp_as_number->nb_coerce;
185
+
186
+ if (c2 != NULL) {
187
+ PyObject *coerced1 = operand1;
188
+ PyObject *coerced2 = operand2;
189
+
190
+ int err = c2(&coerced2, &coerced1);
191
+
192
+ if (unlikely(err < 0)) {
193
+ goto exit_binary_exception;
194
+ }
195
+
196
+ if (err == 0) {
197
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
198
+
199
+ if (likely(mv == NULL)) {
200
+ binaryfunc slot = mv->nb_divmod;
201
+
202
+ if (likely(slot != NULL)) {
203
+ PyObject *x = slot(coerced1, coerced2);
204
+
205
+ Py_DECREF(coerced1);
206
+ Py_DECREF(coerced2);
207
+
208
+ obj_result = x;
209
+ goto exit_binary_result_object;
210
+ }
211
+ }
212
+
213
+ // nb_coerce took a reference.
214
+ Py_DECREF(coerced1);
215
+ Py_DECREF(coerced2);
216
+ }
217
+ }
218
+ }
219
+ #endif
220
+
221
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): '%s' and 'int'", type1->tp_name);
222
+ goto exit_binary_exception;
223
+
224
+ exit_binary_result_object:
225
+ return obj_result;
226
+
227
+ exit_binary_exception:
228
+ return NULL;
229
+ }
230
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_INT(PyObject *operand1, PyObject *operand2) {
231
+ CHECK_OBJECT(operand1);
232
+ CHECK_OBJECT(operand2);
233
+ assert(PyInt_CheckExact(operand2));
234
+
235
+ PyTypeObject *type1 = Py_TYPE(operand1);
236
+
237
+ if (type1 == &PyInt_Type) {
238
+ PyObject *result;
239
+
240
+ // return _BINARY_OPERATION_DIVMOD_OBJECT_INT_INT(operand1, operand2);
241
+
242
+ // Not every code path will make use of all possible results.
243
+ #ifdef _MSC_VER
244
+ #pragma warning(push)
245
+ #pragma warning(disable : 4101)
246
+ #endif
247
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
248
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
249
+ NUITKA_MAY_BE_UNUSED long clong_result;
250
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
251
+ #ifdef _MSC_VER
252
+ #pragma warning(pop)
253
+ #endif
254
+
255
+ CHECK_OBJECT(operand1);
256
+ assert(PyInt_CheckExact(operand1));
257
+ CHECK_OBJECT(operand2);
258
+ assert(PyInt_CheckExact(operand2));
259
+
260
+ const long a = PyInt_AS_LONG(operand1);
261
+ const long b = PyInt_AS_LONG(operand2);
262
+
263
+ if (unlikely(b == 0)) {
264
+ PyThreadState *tstate = PyThreadState_GET();
265
+
266
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "integer division or modulo by zero");
267
+ goto exit_result_exception;
268
+ }
269
+
270
+ if (likely(b != -1 || !UNARY_NEG_WOULD_OVERFLOW(a))) {
271
+ long a_div_b = a / b;
272
+ long a_mod_b = (long)(a - (unsigned long)a_div_b * b);
273
+
274
+ if (a_mod_b && (b ^ a_mod_b) < 0) {
275
+ a_mod_b += b;
276
+ a_div_b -= 1;
277
+ }
278
+
279
+ PyObject *r = Py_BuildValue("(ll)", a_div_b, a_mod_b);
280
+ obj_result = r;
281
+ goto exit_result_object;
282
+ }
283
+
284
+ {
285
+ PyObject *operand1_object = operand1;
286
+ PyObject *operand2_object = operand2;
287
+
288
+ PyObject *r = PyLong_Type.tp_as_number->nb_divmod(operand1_object, operand2_object);
289
+ assert(r != Py_NotImplemented);
290
+
291
+ obj_result = r;
292
+ goto exit_result_object;
293
+ }
294
+
295
+ exit_result_object:
296
+ if (unlikely(obj_result == NULL)) {
297
+ goto exit_result_exception;
298
+ }
299
+ result = obj_result;
300
+ goto exit_result_ok;
301
+
302
+ exit_result_ok:
303
+ return result;
304
+
305
+ exit_result_exception:
306
+ return NULL;
307
+ }
308
+
309
+ return __BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_INT(operand1, operand2);
310
+ }
311
+
312
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_INT(PyObject *operand1, PyObject *operand2) {
313
+ return _BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_INT(operand1, operand2);
314
+ }
315
+ #endif
316
+
317
+ #if PYTHON_VERSION < 0x300
318
+ /* Code referring to "INT" corresponds to Python2 'int' and "OBJECT" to any Python object. */
319
+ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_DIVMOD_OBJECT_INT_OBJECT(PyObject *operand1,
320
+ PyObject *operand2) {
321
+ PyTypeObject *type2 = Py_TYPE(operand2);
322
+
323
+ #ifdef _MSC_VER
324
+ #pragma warning(push)
325
+ #pragma warning(disable : 4101)
326
+ #endif
327
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
328
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
329
+ #ifdef _MSC_VER
330
+ #pragma warning(pop)
331
+ #endif
332
+
333
+ binaryfunc slot1 = PyInt_Type.tp_as_number->nb_divmod;
334
+ binaryfunc slot2 = NULL;
335
+
336
+ if (!(&PyInt_Type == type2)) {
337
+ // Different types, need to consider second value slot.
338
+
339
+ slot2 = (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_divmod : NULL;
340
+
341
+ if (slot1 == slot2) {
342
+ slot2 = NULL;
343
+ }
344
+ }
345
+
346
+ if (slot1 != NULL) {
347
+ if (slot2 != NULL) {
348
+ if (Nuitka_Type_IsSubtype(type2, &PyInt_Type)) {
349
+ PyObject *x = slot2(operand1, operand2);
350
+
351
+ if (x != Py_NotImplemented) {
352
+ obj_result = x;
353
+ goto exit_binary_result_object;
354
+ }
355
+
356
+ Py_DECREF_IMMORTAL(x);
357
+ slot2 = NULL;
358
+ }
359
+ }
360
+
361
+ PyObject *x = slot1(operand1, operand2);
362
+
363
+ if (x != Py_NotImplemented) {
364
+ obj_result = x;
365
+ goto exit_binary_result_object;
366
+ }
367
+
368
+ Py_DECREF_IMMORTAL(x);
369
+ }
370
+
371
+ if (slot2 != NULL) {
372
+ PyObject *x = slot2(operand1, operand2);
373
+
374
+ if (x != Py_NotImplemented) {
375
+ obj_result = x;
376
+ goto exit_binary_result_object;
377
+ }
378
+
379
+ Py_DECREF_IMMORTAL(x);
380
+ }
381
+
382
+ #if PYTHON_VERSION < 0x300
383
+ if (!1 || !NEW_STYLE_NUMBER_TYPE(type2)) {
384
+ coercion c1 = PyInt_Type.tp_as_number->nb_coerce;
385
+
386
+ if (c1 != NULL) {
387
+ PyObject *coerced1 = operand1;
388
+ PyObject *coerced2 = operand2;
389
+
390
+ int err = c1(&coerced1, &coerced2);
391
+
392
+ if (unlikely(err < 0)) {
393
+ goto exit_binary_exception;
394
+ }
395
+
396
+ if (err == 0) {
397
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
398
+
399
+ if (likely(mv == NULL)) {
400
+ binaryfunc slot = mv->nb_divmod;
401
+
402
+ if (likely(slot != NULL)) {
403
+ PyObject *x = slot(coerced1, coerced2);
404
+
405
+ Py_DECREF(coerced1);
406
+ Py_DECREF(coerced2);
407
+
408
+ obj_result = x;
409
+ goto exit_binary_result_object;
410
+ }
411
+ }
412
+
413
+ // nb_coerce took a reference.
414
+ Py_DECREF(coerced1);
415
+ Py_DECREF(coerced2);
416
+ }
417
+ }
418
+ coercion c2 =
419
+ (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_coerce : NULL;
420
+
421
+ if (c2 != NULL) {
422
+ PyObject *coerced1 = operand1;
423
+ PyObject *coerced2 = operand2;
424
+
425
+ int err = c2(&coerced2, &coerced1);
426
+
427
+ if (unlikely(err < 0)) {
428
+ goto exit_binary_exception;
429
+ }
430
+
431
+ if (err == 0) {
432
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
433
+
434
+ if (likely(mv == NULL)) {
435
+ binaryfunc slot = mv->nb_divmod;
436
+
437
+ if (likely(slot != NULL)) {
438
+ PyObject *x = slot(coerced1, coerced2);
439
+
440
+ Py_DECREF(coerced1);
441
+ Py_DECREF(coerced2);
442
+
443
+ obj_result = x;
444
+ goto exit_binary_result_object;
445
+ }
446
+ }
447
+
448
+ // nb_coerce took a reference.
449
+ Py_DECREF(coerced1);
450
+ Py_DECREF(coerced2);
451
+ }
452
+ }
453
+ }
454
+ #endif
455
+
456
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'int' and '%s'", type2->tp_name);
457
+ goto exit_binary_exception;
458
+
459
+ exit_binary_result_object:
460
+ return obj_result;
461
+
462
+ exit_binary_exception:
463
+ return NULL;
464
+ }
465
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_INT_OBJECT(PyObject *operand1, PyObject *operand2) {
466
+ CHECK_OBJECT(operand1);
467
+ assert(PyInt_CheckExact(operand1));
468
+ CHECK_OBJECT(operand2);
469
+
470
+ PyTypeObject *type2 = Py_TYPE(operand2);
471
+
472
+ if (&PyInt_Type == type2) {
473
+ PyObject *result;
474
+
475
+ // return _BINARY_OPERATION_DIVMOD_OBJECT_INT_INT(operand1, operand2);
476
+
477
+ // Not every code path will make use of all possible results.
478
+ #ifdef _MSC_VER
479
+ #pragma warning(push)
480
+ #pragma warning(disable : 4101)
481
+ #endif
482
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
483
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
484
+ NUITKA_MAY_BE_UNUSED long clong_result;
485
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
486
+ #ifdef _MSC_VER
487
+ #pragma warning(pop)
488
+ #endif
489
+
490
+ CHECK_OBJECT(operand1);
491
+ assert(PyInt_CheckExact(operand1));
492
+ CHECK_OBJECT(operand2);
493
+ assert(PyInt_CheckExact(operand2));
494
+
495
+ const long a = PyInt_AS_LONG(operand1);
496
+ const long b = PyInt_AS_LONG(operand2);
497
+
498
+ if (unlikely(b == 0)) {
499
+ PyThreadState *tstate = PyThreadState_GET();
500
+
501
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "integer division or modulo by zero");
502
+ goto exit_result_exception;
503
+ }
504
+
505
+ if (likely(b != -1 || !UNARY_NEG_WOULD_OVERFLOW(a))) {
506
+ long a_div_b = a / b;
507
+ long a_mod_b = (long)(a - (unsigned long)a_div_b * b);
508
+
509
+ if (a_mod_b && (b ^ a_mod_b) < 0) {
510
+ a_mod_b += b;
511
+ a_div_b -= 1;
512
+ }
513
+
514
+ PyObject *r = Py_BuildValue("(ll)", a_div_b, a_mod_b);
515
+ obj_result = r;
516
+ goto exit_result_object;
517
+ }
518
+
519
+ {
520
+ PyObject *operand1_object = operand1;
521
+ PyObject *operand2_object = operand2;
522
+
523
+ PyObject *r = PyLong_Type.tp_as_number->nb_divmod(operand1_object, operand2_object);
524
+ assert(r != Py_NotImplemented);
525
+
526
+ obj_result = r;
527
+ goto exit_result_object;
528
+ }
529
+
530
+ exit_result_object:
531
+ if (unlikely(obj_result == NULL)) {
532
+ goto exit_result_exception;
533
+ }
534
+ result = obj_result;
535
+ goto exit_result_ok;
536
+
537
+ exit_result_ok:
538
+ return result;
539
+
540
+ exit_result_exception:
541
+ return NULL;
542
+ }
543
+
544
+ return __BINARY_OPERATION_DIVMOD_OBJECT_INT_OBJECT(operand1, operand2);
545
+ }
546
+
547
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_INT_OBJECT(PyObject *operand1, PyObject *operand2) {
548
+ return _BINARY_OPERATION_DIVMOD_OBJECT_INT_OBJECT(operand1, operand2);
549
+ }
550
+ #endif
551
+
552
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "LONG" to Python2 'long', Python3 'int'. */
553
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_LONG_LONG(PyObject *operand1, PyObject *operand2) {
554
+ CHECK_OBJECT(operand1);
555
+ assert(PyLong_CheckExact(operand1));
556
+ CHECK_OBJECT(operand2);
557
+ assert(PyLong_CheckExact(operand2));
558
+
559
+ PyObject *result;
560
+
561
+ // Not every code path will make use of all possible results.
562
+ #ifdef _MSC_VER
563
+ #pragma warning(push)
564
+ #pragma warning(disable : 4101)
565
+ #endif
566
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
567
+ NUITKA_MAY_BE_UNUSED long clong_result;
568
+ #ifdef _MSC_VER
569
+ #pragma warning(pop)
570
+ #endif
571
+
572
+ PyObject *x = PyLong_Type.tp_as_number->nb_divmod(operand1, operand2);
573
+ assert(x != Py_NotImplemented);
574
+
575
+ obj_result = x;
576
+ goto exit_result_object;
577
+
578
+ exit_result_object:
579
+ if (unlikely(obj_result == NULL)) {
580
+ goto exit_result_exception;
581
+ }
582
+ result = obj_result;
583
+ goto exit_result_ok;
584
+
585
+ exit_result_ok:
586
+ return result;
587
+
588
+ exit_result_exception:
589
+ return NULL;
590
+ }
591
+
592
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_LONG_LONG(PyObject *operand1, PyObject *operand2) {
593
+ return _BINARY_OPERATION_DIVMOD_OBJECT_LONG_LONG(operand1, operand2);
594
+ }
595
+
596
+ /* Code referring to "OBJECT" corresponds to any Python object and "LONG" to Python2 'long', Python3 'int'. */
597
+ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_LONG(PyObject *operand1,
598
+ PyObject *operand2) {
599
+ PyTypeObject *type1 = Py_TYPE(operand1);
600
+
601
+ #ifdef _MSC_VER
602
+ #pragma warning(push)
603
+ #pragma warning(disable : 4101)
604
+ #endif
605
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
606
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
607
+ #ifdef _MSC_VER
608
+ #pragma warning(pop)
609
+ #endif
610
+
611
+ binaryfunc slot1 =
612
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_divmod : NULL;
613
+ binaryfunc slot2 = NULL;
614
+
615
+ if (!(type1 == &PyLong_Type)) {
616
+ // Different types, need to consider second value slot.
617
+
618
+ slot2 = PyLong_Type.tp_as_number->nb_divmod;
619
+
620
+ if (slot1 == slot2) {
621
+ slot2 = NULL;
622
+ }
623
+ }
624
+
625
+ if (slot1 != NULL) {
626
+ PyObject *x = slot1(operand1, operand2);
627
+
628
+ if (x != Py_NotImplemented) {
629
+ obj_result = x;
630
+ goto exit_binary_result_object;
631
+ }
632
+
633
+ Py_DECREF_IMMORTAL(x);
634
+ }
635
+
636
+ if (slot2 != NULL) {
637
+ PyObject *x = slot2(operand1, operand2);
638
+
639
+ if (x != Py_NotImplemented) {
640
+ obj_result = x;
641
+ goto exit_binary_result_object;
642
+ }
643
+
644
+ Py_DECREF_IMMORTAL(x);
645
+ }
646
+
647
+ #if PYTHON_VERSION < 0x300
648
+ if (!NEW_STYLE_NUMBER_TYPE(type1) || !1) {
649
+ coercion c1 =
650
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_coerce : NULL;
651
+
652
+ if (c1 != NULL) {
653
+ PyObject *coerced1 = operand1;
654
+ PyObject *coerced2 = operand2;
655
+
656
+ int err = c1(&coerced1, &coerced2);
657
+
658
+ if (unlikely(err < 0)) {
659
+ goto exit_binary_exception;
660
+ }
661
+
662
+ if (err == 0) {
663
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
664
+
665
+ if (likely(mv == NULL)) {
666
+ binaryfunc slot = mv->nb_divmod;
667
+
668
+ if (likely(slot != NULL)) {
669
+ PyObject *x = slot(coerced1, coerced2);
670
+
671
+ Py_DECREF(coerced1);
672
+ Py_DECREF(coerced2);
673
+
674
+ obj_result = x;
675
+ goto exit_binary_result_object;
676
+ }
677
+ }
678
+
679
+ // nb_coerce took a reference.
680
+ Py_DECREF(coerced1);
681
+ Py_DECREF(coerced2);
682
+ }
683
+ }
684
+ coercion c2 = PyLong_Type.tp_as_number->nb_coerce;
685
+
686
+ if (c2 != NULL) {
687
+ PyObject *coerced1 = operand1;
688
+ PyObject *coerced2 = operand2;
689
+
690
+ int err = c2(&coerced2, &coerced1);
691
+
692
+ if (unlikely(err < 0)) {
693
+ goto exit_binary_exception;
694
+ }
695
+
696
+ if (err == 0) {
697
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
698
+
699
+ if (likely(mv == NULL)) {
700
+ binaryfunc slot = mv->nb_divmod;
701
+
702
+ if (likely(slot != NULL)) {
703
+ PyObject *x = slot(coerced1, coerced2);
704
+
705
+ Py_DECREF(coerced1);
706
+ Py_DECREF(coerced2);
707
+
708
+ obj_result = x;
709
+ goto exit_binary_result_object;
710
+ }
711
+ }
712
+
713
+ // nb_coerce took a reference.
714
+ Py_DECREF(coerced1);
715
+ Py_DECREF(coerced2);
716
+ }
717
+ }
718
+ }
719
+ #endif
720
+
721
+ #if PYTHON_VERSION < 0x300
722
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): '%s' and 'long'", type1->tp_name);
723
+ #else
724
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): '%s' and 'int'", type1->tp_name);
725
+ #endif
726
+ goto exit_binary_exception;
727
+
728
+ exit_binary_result_object:
729
+ return obj_result;
730
+
731
+ exit_binary_exception:
732
+ return NULL;
733
+ }
734
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_LONG(PyObject *operand1, PyObject *operand2) {
735
+ CHECK_OBJECT(operand1);
736
+ CHECK_OBJECT(operand2);
737
+ assert(PyLong_CheckExact(operand2));
738
+
739
+ PyTypeObject *type1 = Py_TYPE(operand1);
740
+
741
+ if (type1 == &PyLong_Type) {
742
+ PyObject *result;
743
+
744
+ // return _BINARY_OPERATION_DIVMOD_OBJECT_LONG_LONG(operand1, operand2);
745
+
746
+ // Not every code path will make use of all possible results.
747
+ #ifdef _MSC_VER
748
+ #pragma warning(push)
749
+ #pragma warning(disable : 4101)
750
+ #endif
751
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
752
+ NUITKA_MAY_BE_UNUSED long clong_result;
753
+ #ifdef _MSC_VER
754
+ #pragma warning(pop)
755
+ #endif
756
+
757
+ PyObject *x = PyLong_Type.tp_as_number->nb_divmod(operand1, operand2);
758
+ assert(x != Py_NotImplemented);
759
+
760
+ obj_result = x;
761
+ goto exit_result_object;
762
+
763
+ exit_result_object:
764
+ if (unlikely(obj_result == NULL)) {
765
+ goto exit_result_exception;
766
+ }
767
+ result = obj_result;
768
+ goto exit_result_ok;
769
+
770
+ exit_result_ok:
771
+ return result;
772
+
773
+ exit_result_exception:
774
+ return NULL;
775
+ }
776
+
777
+ return __BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_LONG(operand1, operand2);
778
+ }
779
+
780
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_LONG(PyObject *operand1, PyObject *operand2) {
781
+ return _BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_LONG(operand1, operand2);
782
+ }
783
+
784
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "OBJECT" to any Python object. */
785
+ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_DIVMOD_OBJECT_LONG_OBJECT(PyObject *operand1,
786
+ PyObject *operand2) {
787
+ PyTypeObject *type2 = Py_TYPE(operand2);
788
+
789
+ #ifdef _MSC_VER
790
+ #pragma warning(push)
791
+ #pragma warning(disable : 4101)
792
+ #endif
793
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
794
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
795
+ #ifdef _MSC_VER
796
+ #pragma warning(pop)
797
+ #endif
798
+
799
+ binaryfunc slot1 = PyLong_Type.tp_as_number->nb_divmod;
800
+ binaryfunc slot2 = NULL;
801
+
802
+ if (!(&PyLong_Type == type2)) {
803
+ // Different types, need to consider second value slot.
804
+
805
+ slot2 = (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_divmod : NULL;
806
+
807
+ if (slot1 == slot2) {
808
+ slot2 = NULL;
809
+ }
810
+ }
811
+
812
+ if (slot1 != NULL) {
813
+ if (slot2 != NULL) {
814
+ if (Nuitka_Type_IsSubtype(type2, &PyLong_Type)) {
815
+ PyObject *x = slot2(operand1, operand2);
816
+
817
+ if (x != Py_NotImplemented) {
818
+ obj_result = x;
819
+ goto exit_binary_result_object;
820
+ }
821
+
822
+ Py_DECREF_IMMORTAL(x);
823
+ slot2 = NULL;
824
+ }
825
+ }
826
+
827
+ PyObject *x = slot1(operand1, operand2);
828
+
829
+ if (x != Py_NotImplemented) {
830
+ obj_result = x;
831
+ goto exit_binary_result_object;
832
+ }
833
+
834
+ Py_DECREF_IMMORTAL(x);
835
+ }
836
+
837
+ if (slot2 != NULL) {
838
+ PyObject *x = slot2(operand1, operand2);
839
+
840
+ if (x != Py_NotImplemented) {
841
+ obj_result = x;
842
+ goto exit_binary_result_object;
843
+ }
844
+
845
+ Py_DECREF_IMMORTAL(x);
846
+ }
847
+
848
+ #if PYTHON_VERSION < 0x300
849
+ if (!1 || !NEW_STYLE_NUMBER_TYPE(type2)) {
850
+ coercion c1 = PyLong_Type.tp_as_number->nb_coerce;
851
+
852
+ if (c1 != NULL) {
853
+ PyObject *coerced1 = operand1;
854
+ PyObject *coerced2 = operand2;
855
+
856
+ int err = c1(&coerced1, &coerced2);
857
+
858
+ if (unlikely(err < 0)) {
859
+ goto exit_binary_exception;
860
+ }
861
+
862
+ if (err == 0) {
863
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
864
+
865
+ if (likely(mv == NULL)) {
866
+ binaryfunc slot = mv->nb_divmod;
867
+
868
+ if (likely(slot != NULL)) {
869
+ PyObject *x = slot(coerced1, coerced2);
870
+
871
+ Py_DECREF(coerced1);
872
+ Py_DECREF(coerced2);
873
+
874
+ obj_result = x;
875
+ goto exit_binary_result_object;
876
+ }
877
+ }
878
+
879
+ // nb_coerce took a reference.
880
+ Py_DECREF(coerced1);
881
+ Py_DECREF(coerced2);
882
+ }
883
+ }
884
+ coercion c2 =
885
+ (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_coerce : NULL;
886
+
887
+ if (c2 != NULL) {
888
+ PyObject *coerced1 = operand1;
889
+ PyObject *coerced2 = operand2;
890
+
891
+ int err = c2(&coerced2, &coerced1);
892
+
893
+ if (unlikely(err < 0)) {
894
+ goto exit_binary_exception;
895
+ }
896
+
897
+ if (err == 0) {
898
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
899
+
900
+ if (likely(mv == NULL)) {
901
+ binaryfunc slot = mv->nb_divmod;
902
+
903
+ if (likely(slot != NULL)) {
904
+ PyObject *x = slot(coerced1, coerced2);
905
+
906
+ Py_DECREF(coerced1);
907
+ Py_DECREF(coerced2);
908
+
909
+ obj_result = x;
910
+ goto exit_binary_result_object;
911
+ }
912
+ }
913
+
914
+ // nb_coerce took a reference.
915
+ Py_DECREF(coerced1);
916
+ Py_DECREF(coerced2);
917
+ }
918
+ }
919
+ }
920
+ #endif
921
+
922
+ #if PYTHON_VERSION < 0x300
923
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'long' and '%s'", type2->tp_name);
924
+ #else
925
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'int' and '%s'", type2->tp_name);
926
+ #endif
927
+ goto exit_binary_exception;
928
+
929
+ exit_binary_result_object:
930
+ return obj_result;
931
+
932
+ exit_binary_exception:
933
+ return NULL;
934
+ }
935
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_LONG_OBJECT(PyObject *operand1, PyObject *operand2) {
936
+ CHECK_OBJECT(operand1);
937
+ assert(PyLong_CheckExact(operand1));
938
+ CHECK_OBJECT(operand2);
939
+
940
+ PyTypeObject *type2 = Py_TYPE(operand2);
941
+
942
+ if (&PyLong_Type == type2) {
943
+ PyObject *result;
944
+
945
+ // return _BINARY_OPERATION_DIVMOD_OBJECT_LONG_LONG(operand1, operand2);
946
+
947
+ // Not every code path will make use of all possible results.
948
+ #ifdef _MSC_VER
949
+ #pragma warning(push)
950
+ #pragma warning(disable : 4101)
951
+ #endif
952
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
953
+ NUITKA_MAY_BE_UNUSED long clong_result;
954
+ #ifdef _MSC_VER
955
+ #pragma warning(pop)
956
+ #endif
957
+
958
+ PyObject *x = PyLong_Type.tp_as_number->nb_divmod(operand1, operand2);
959
+ assert(x != Py_NotImplemented);
960
+
961
+ obj_result = x;
962
+ goto exit_result_object;
963
+
964
+ exit_result_object:
965
+ if (unlikely(obj_result == NULL)) {
966
+ goto exit_result_exception;
967
+ }
968
+ result = obj_result;
969
+ goto exit_result_ok;
970
+
971
+ exit_result_ok:
972
+ return result;
973
+
974
+ exit_result_exception:
975
+ return NULL;
976
+ }
977
+
978
+ return __BINARY_OPERATION_DIVMOD_OBJECT_LONG_OBJECT(operand1, operand2);
979
+ }
980
+
981
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_LONG_OBJECT(PyObject *operand1, PyObject *operand2) {
982
+ return _BINARY_OPERATION_DIVMOD_OBJECT_LONG_OBJECT(operand1, operand2);
983
+ }
984
+
985
+ /* Code referring to "FLOAT" corresponds to Python 'float' and "FLOAT" to Python 'float'. */
986
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_FLOAT(PyObject *operand1, PyObject *operand2) {
987
+ CHECK_OBJECT(operand1);
988
+ assert(PyFloat_CheckExact(operand1));
989
+ CHECK_OBJECT(operand2);
990
+ assert(PyFloat_CheckExact(operand2));
991
+
992
+ PyObject *result;
993
+
994
+ #ifdef _MSC_VER
995
+ #pragma warning(push)
996
+ #pragma warning(disable : 4101)
997
+ #endif
998
+ // Not every code path will make use of all possible results.
999
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1000
+ NUITKA_MAY_BE_UNUSED long clong_result;
1001
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
1002
+ #ifdef _MSC_VER
1003
+ #pragma warning(pop)
1004
+ #endif
1005
+
1006
+ CHECK_OBJECT(operand1);
1007
+ assert(PyFloat_CheckExact(operand1));
1008
+ CHECK_OBJECT(operand2);
1009
+ assert(PyFloat_CheckExact(operand2));
1010
+
1011
+ const double a = PyFloat_AS_DOUBLE(operand1);
1012
+ const double b = PyFloat_AS_DOUBLE(operand2);
1013
+
1014
+ if (unlikely(b == 0.0)) {
1015
+ PyThreadState *tstate = PyThreadState_GET();
1016
+
1017
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "float modulo");
1018
+ goto exit_result_exception;
1019
+ }
1020
+
1021
+ {
1022
+ double mod = fmod(a, b);
1023
+ double div = (a - mod) / b;
1024
+
1025
+ if (mod) {
1026
+ if ((b < 0) != (mod < 0)) {
1027
+ mod += b;
1028
+ div -= 1.0;
1029
+ }
1030
+ } else {
1031
+ mod = copysign(0.0, b);
1032
+ }
1033
+
1034
+ double floordiv;
1035
+ if (div) {
1036
+ floordiv = floor(div);
1037
+ if (div - floordiv > 0.5) {
1038
+ floordiv += 1.0;
1039
+ }
1040
+ } else {
1041
+ floordiv = copysign(0.0, a / b);
1042
+ }
1043
+
1044
+ PyObject *r = Py_BuildValue("(dd)", floordiv, mod);
1045
+
1046
+ obj_result = r;
1047
+ goto exit_result_object;
1048
+ }
1049
+
1050
+ exit_result_object:
1051
+ if (unlikely(obj_result == NULL)) {
1052
+ goto exit_result_exception;
1053
+ }
1054
+ result = obj_result;
1055
+ goto exit_result_ok;
1056
+
1057
+ exit_result_ok:
1058
+ return result;
1059
+
1060
+ exit_result_exception:
1061
+ return NULL;
1062
+ }
1063
+
1064
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_FLOAT(PyObject *operand1, PyObject *operand2) {
1065
+ return _BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_FLOAT(operand1, operand2);
1066
+ }
1067
+
1068
+ /* Code referring to "OBJECT" corresponds to any Python object and "FLOAT" to Python 'float'. */
1069
+ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_FLOAT(PyObject *operand1,
1070
+ PyObject *operand2) {
1071
+ PyTypeObject *type1 = Py_TYPE(operand1);
1072
+
1073
+ #ifdef _MSC_VER
1074
+ #pragma warning(push)
1075
+ #pragma warning(disable : 4101)
1076
+ #endif
1077
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1078
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1079
+ #ifdef _MSC_VER
1080
+ #pragma warning(pop)
1081
+ #endif
1082
+
1083
+ binaryfunc slot1 =
1084
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_divmod : NULL;
1085
+ binaryfunc slot2 = NULL;
1086
+
1087
+ if (!(type1 == &PyFloat_Type)) {
1088
+ // Different types, need to consider second value slot.
1089
+
1090
+ slot2 = PyFloat_Type.tp_as_number->nb_divmod;
1091
+
1092
+ if (slot1 == slot2) {
1093
+ slot2 = NULL;
1094
+ }
1095
+ }
1096
+
1097
+ if (slot1 != NULL) {
1098
+ PyObject *x = slot1(operand1, operand2);
1099
+
1100
+ if (x != Py_NotImplemented) {
1101
+ obj_result = x;
1102
+ goto exit_binary_result_object;
1103
+ }
1104
+
1105
+ Py_DECREF_IMMORTAL(x);
1106
+ }
1107
+
1108
+ if (slot2 != NULL) {
1109
+ PyObject *x = slot2(operand1, operand2);
1110
+
1111
+ if (x != Py_NotImplemented) {
1112
+ obj_result = x;
1113
+ goto exit_binary_result_object;
1114
+ }
1115
+
1116
+ Py_DECREF_IMMORTAL(x);
1117
+ }
1118
+
1119
+ #if PYTHON_VERSION < 0x300
1120
+ if (!NEW_STYLE_NUMBER_TYPE(type1) || !1) {
1121
+ coercion c1 =
1122
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_coerce : NULL;
1123
+
1124
+ if (c1 != NULL) {
1125
+ PyObject *coerced1 = operand1;
1126
+ PyObject *coerced2 = operand2;
1127
+
1128
+ int err = c1(&coerced1, &coerced2);
1129
+
1130
+ if (unlikely(err < 0)) {
1131
+ goto exit_binary_exception;
1132
+ }
1133
+
1134
+ if (err == 0) {
1135
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
1136
+
1137
+ if (likely(mv == NULL)) {
1138
+ binaryfunc slot = mv->nb_divmod;
1139
+
1140
+ if (likely(slot != NULL)) {
1141
+ PyObject *x = slot(coerced1, coerced2);
1142
+
1143
+ Py_DECREF(coerced1);
1144
+ Py_DECREF(coerced2);
1145
+
1146
+ obj_result = x;
1147
+ goto exit_binary_result_object;
1148
+ }
1149
+ }
1150
+
1151
+ // nb_coerce took a reference.
1152
+ Py_DECREF(coerced1);
1153
+ Py_DECREF(coerced2);
1154
+ }
1155
+ }
1156
+ coercion c2 = PyFloat_Type.tp_as_number->nb_coerce;
1157
+
1158
+ if (c2 != NULL) {
1159
+ PyObject *coerced1 = operand1;
1160
+ PyObject *coerced2 = operand2;
1161
+
1162
+ int err = c2(&coerced2, &coerced1);
1163
+
1164
+ if (unlikely(err < 0)) {
1165
+ goto exit_binary_exception;
1166
+ }
1167
+
1168
+ if (err == 0) {
1169
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
1170
+
1171
+ if (likely(mv == NULL)) {
1172
+ binaryfunc slot = mv->nb_divmod;
1173
+
1174
+ if (likely(slot != NULL)) {
1175
+ PyObject *x = slot(coerced1, coerced2);
1176
+
1177
+ Py_DECREF(coerced1);
1178
+ Py_DECREF(coerced2);
1179
+
1180
+ obj_result = x;
1181
+ goto exit_binary_result_object;
1182
+ }
1183
+ }
1184
+
1185
+ // nb_coerce took a reference.
1186
+ Py_DECREF(coerced1);
1187
+ Py_DECREF(coerced2);
1188
+ }
1189
+ }
1190
+ }
1191
+ #endif
1192
+
1193
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): '%s' and 'float'", type1->tp_name);
1194
+ goto exit_binary_exception;
1195
+
1196
+ exit_binary_result_object:
1197
+ return obj_result;
1198
+
1199
+ exit_binary_exception:
1200
+ return NULL;
1201
+ }
1202
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_FLOAT(PyObject *operand1, PyObject *operand2) {
1203
+ CHECK_OBJECT(operand1);
1204
+ CHECK_OBJECT(operand2);
1205
+ assert(PyFloat_CheckExact(operand2));
1206
+
1207
+ PyTypeObject *type1 = Py_TYPE(operand1);
1208
+
1209
+ if (type1 == &PyFloat_Type) {
1210
+ PyObject *result;
1211
+
1212
+ // return _BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_FLOAT(operand1, operand2);
1213
+
1214
+ #ifdef _MSC_VER
1215
+ #pragma warning(push)
1216
+ #pragma warning(disable : 4101)
1217
+ #endif
1218
+ // Not every code path will make use of all possible results.
1219
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1220
+ NUITKA_MAY_BE_UNUSED long clong_result;
1221
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
1222
+ #ifdef _MSC_VER
1223
+ #pragma warning(pop)
1224
+ #endif
1225
+
1226
+ CHECK_OBJECT(operand1);
1227
+ assert(PyFloat_CheckExact(operand1));
1228
+ CHECK_OBJECT(operand2);
1229
+ assert(PyFloat_CheckExact(operand2));
1230
+
1231
+ const double a = PyFloat_AS_DOUBLE(operand1);
1232
+ const double b = PyFloat_AS_DOUBLE(operand2);
1233
+
1234
+ if (unlikely(b == 0.0)) {
1235
+ PyThreadState *tstate = PyThreadState_GET();
1236
+
1237
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "float modulo");
1238
+ goto exit_result_exception;
1239
+ }
1240
+
1241
+ {
1242
+ double mod = fmod(a, b);
1243
+ double div = (a - mod) / b;
1244
+
1245
+ if (mod) {
1246
+ if ((b < 0) != (mod < 0)) {
1247
+ mod += b;
1248
+ div -= 1.0;
1249
+ }
1250
+ } else {
1251
+ mod = copysign(0.0, b);
1252
+ }
1253
+
1254
+ double floordiv;
1255
+ if (div) {
1256
+ floordiv = floor(div);
1257
+ if (div - floordiv > 0.5) {
1258
+ floordiv += 1.0;
1259
+ }
1260
+ } else {
1261
+ floordiv = copysign(0.0, a / b);
1262
+ }
1263
+
1264
+ PyObject *r = Py_BuildValue("(dd)", floordiv, mod);
1265
+
1266
+ obj_result = r;
1267
+ goto exit_result_object;
1268
+ }
1269
+
1270
+ exit_result_object:
1271
+ if (unlikely(obj_result == NULL)) {
1272
+ goto exit_result_exception;
1273
+ }
1274
+ result = obj_result;
1275
+ goto exit_result_ok;
1276
+
1277
+ exit_result_ok:
1278
+ return result;
1279
+
1280
+ exit_result_exception:
1281
+ return NULL;
1282
+ }
1283
+
1284
+ return __BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_FLOAT(operand1, operand2);
1285
+ }
1286
+
1287
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_FLOAT(PyObject *operand1, PyObject *operand2) {
1288
+ return _BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_FLOAT(operand1, operand2);
1289
+ }
1290
+
1291
+ /* Code referring to "FLOAT" corresponds to Python 'float' and "OBJECT" to any Python object. */
1292
+ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_OBJECT(PyObject *operand1,
1293
+ PyObject *operand2) {
1294
+ PyTypeObject *type2 = Py_TYPE(operand2);
1295
+
1296
+ #ifdef _MSC_VER
1297
+ #pragma warning(push)
1298
+ #pragma warning(disable : 4101)
1299
+ #endif
1300
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1301
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1302
+ #ifdef _MSC_VER
1303
+ #pragma warning(pop)
1304
+ #endif
1305
+
1306
+ binaryfunc slot1 = PyFloat_Type.tp_as_number->nb_divmod;
1307
+ binaryfunc slot2 = NULL;
1308
+
1309
+ if (!(&PyFloat_Type == type2)) {
1310
+ // Different types, need to consider second value slot.
1311
+
1312
+ slot2 = (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_divmod : NULL;
1313
+
1314
+ if (slot1 == slot2) {
1315
+ slot2 = NULL;
1316
+ }
1317
+ }
1318
+
1319
+ if (slot1 != NULL) {
1320
+ if (slot2 != NULL) {
1321
+ if (Nuitka_Type_IsSubtype(type2, &PyFloat_Type)) {
1322
+ PyObject *x = slot2(operand1, operand2);
1323
+
1324
+ if (x != Py_NotImplemented) {
1325
+ obj_result = x;
1326
+ goto exit_binary_result_object;
1327
+ }
1328
+
1329
+ Py_DECREF_IMMORTAL(x);
1330
+ slot2 = NULL;
1331
+ }
1332
+ }
1333
+
1334
+ PyObject *x = slot1(operand1, operand2);
1335
+
1336
+ if (x != Py_NotImplemented) {
1337
+ obj_result = x;
1338
+ goto exit_binary_result_object;
1339
+ }
1340
+
1341
+ Py_DECREF_IMMORTAL(x);
1342
+ }
1343
+
1344
+ if (slot2 != NULL) {
1345
+ PyObject *x = slot2(operand1, operand2);
1346
+
1347
+ if (x != Py_NotImplemented) {
1348
+ obj_result = x;
1349
+ goto exit_binary_result_object;
1350
+ }
1351
+
1352
+ Py_DECREF_IMMORTAL(x);
1353
+ }
1354
+
1355
+ #if PYTHON_VERSION < 0x300
1356
+ if (!1 || !NEW_STYLE_NUMBER_TYPE(type2)) {
1357
+ coercion c1 = PyFloat_Type.tp_as_number->nb_coerce;
1358
+
1359
+ if (c1 != NULL) {
1360
+ PyObject *coerced1 = operand1;
1361
+ PyObject *coerced2 = operand2;
1362
+
1363
+ int err = c1(&coerced1, &coerced2);
1364
+
1365
+ if (unlikely(err < 0)) {
1366
+ goto exit_binary_exception;
1367
+ }
1368
+
1369
+ if (err == 0) {
1370
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
1371
+
1372
+ if (likely(mv == NULL)) {
1373
+ binaryfunc slot = mv->nb_divmod;
1374
+
1375
+ if (likely(slot != NULL)) {
1376
+ PyObject *x = slot(coerced1, coerced2);
1377
+
1378
+ Py_DECREF(coerced1);
1379
+ Py_DECREF(coerced2);
1380
+
1381
+ obj_result = x;
1382
+ goto exit_binary_result_object;
1383
+ }
1384
+ }
1385
+
1386
+ // nb_coerce took a reference.
1387
+ Py_DECREF(coerced1);
1388
+ Py_DECREF(coerced2);
1389
+ }
1390
+ }
1391
+ coercion c2 =
1392
+ (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_coerce : NULL;
1393
+
1394
+ if (c2 != NULL) {
1395
+ PyObject *coerced1 = operand1;
1396
+ PyObject *coerced2 = operand2;
1397
+
1398
+ int err = c2(&coerced2, &coerced1);
1399
+
1400
+ if (unlikely(err < 0)) {
1401
+ goto exit_binary_exception;
1402
+ }
1403
+
1404
+ if (err == 0) {
1405
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
1406
+
1407
+ if (likely(mv == NULL)) {
1408
+ binaryfunc slot = mv->nb_divmod;
1409
+
1410
+ if (likely(slot != NULL)) {
1411
+ PyObject *x = slot(coerced1, coerced2);
1412
+
1413
+ Py_DECREF(coerced1);
1414
+ Py_DECREF(coerced2);
1415
+
1416
+ obj_result = x;
1417
+ goto exit_binary_result_object;
1418
+ }
1419
+ }
1420
+
1421
+ // nb_coerce took a reference.
1422
+ Py_DECREF(coerced1);
1423
+ Py_DECREF(coerced2);
1424
+ }
1425
+ }
1426
+ }
1427
+ #endif
1428
+
1429
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'float' and '%s'", type2->tp_name);
1430
+ goto exit_binary_exception;
1431
+
1432
+ exit_binary_result_object:
1433
+ return obj_result;
1434
+
1435
+ exit_binary_exception:
1436
+ return NULL;
1437
+ }
1438
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_OBJECT(PyObject *operand1, PyObject *operand2) {
1439
+ CHECK_OBJECT(operand1);
1440
+ assert(PyFloat_CheckExact(operand1));
1441
+ CHECK_OBJECT(operand2);
1442
+
1443
+ PyTypeObject *type2 = Py_TYPE(operand2);
1444
+
1445
+ if (&PyFloat_Type == type2) {
1446
+ PyObject *result;
1447
+
1448
+ // return _BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_FLOAT(operand1, operand2);
1449
+
1450
+ #ifdef _MSC_VER
1451
+ #pragma warning(push)
1452
+ #pragma warning(disable : 4101)
1453
+ #endif
1454
+ // Not every code path will make use of all possible results.
1455
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1456
+ NUITKA_MAY_BE_UNUSED long clong_result;
1457
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
1458
+ #ifdef _MSC_VER
1459
+ #pragma warning(pop)
1460
+ #endif
1461
+
1462
+ CHECK_OBJECT(operand1);
1463
+ assert(PyFloat_CheckExact(operand1));
1464
+ CHECK_OBJECT(operand2);
1465
+ assert(PyFloat_CheckExact(operand2));
1466
+
1467
+ const double a = PyFloat_AS_DOUBLE(operand1);
1468
+ const double b = PyFloat_AS_DOUBLE(operand2);
1469
+
1470
+ if (unlikely(b == 0.0)) {
1471
+ PyThreadState *tstate = PyThreadState_GET();
1472
+
1473
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "float modulo");
1474
+ goto exit_result_exception;
1475
+ }
1476
+
1477
+ {
1478
+ double mod = fmod(a, b);
1479
+ double div = (a - mod) / b;
1480
+
1481
+ if (mod) {
1482
+ if ((b < 0) != (mod < 0)) {
1483
+ mod += b;
1484
+ div -= 1.0;
1485
+ }
1486
+ } else {
1487
+ mod = copysign(0.0, b);
1488
+ }
1489
+
1490
+ double floordiv;
1491
+ if (div) {
1492
+ floordiv = floor(div);
1493
+ if (div - floordiv > 0.5) {
1494
+ floordiv += 1.0;
1495
+ }
1496
+ } else {
1497
+ floordiv = copysign(0.0, a / b);
1498
+ }
1499
+
1500
+ PyObject *r = Py_BuildValue("(dd)", floordiv, mod);
1501
+
1502
+ obj_result = r;
1503
+ goto exit_result_object;
1504
+ }
1505
+
1506
+ exit_result_object:
1507
+ if (unlikely(obj_result == NULL)) {
1508
+ goto exit_result_exception;
1509
+ }
1510
+ result = obj_result;
1511
+ goto exit_result_ok;
1512
+
1513
+ exit_result_ok:
1514
+ return result;
1515
+
1516
+ exit_result_exception:
1517
+ return NULL;
1518
+ }
1519
+
1520
+ return __BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_OBJECT(operand1, operand2);
1521
+ }
1522
+
1523
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_OBJECT(PyObject *operand1, PyObject *operand2) {
1524
+ return _BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_OBJECT(operand1, operand2);
1525
+ }
1526
+
1527
+ /* Code referring to "FLOAT" corresponds to Python 'float' and "LONG" to Python2 'long', Python3 'int'. */
1528
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_LONG(PyObject *operand1, PyObject *operand2) {
1529
+ CHECK_OBJECT(operand1);
1530
+ assert(PyFloat_CheckExact(operand1));
1531
+ CHECK_OBJECT(operand2);
1532
+ assert(PyLong_CheckExact(operand2));
1533
+
1534
+ #ifdef _MSC_VER
1535
+ #pragma warning(push)
1536
+ #pragma warning(disable : 4101)
1537
+ #endif
1538
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1539
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1540
+ #ifdef _MSC_VER
1541
+ #pragma warning(pop)
1542
+ #endif
1543
+
1544
+ binaryfunc slot1 = PyFloat_Type.tp_as_number->nb_divmod;
1545
+ // Slot2 ignored on purpose, type1 takes precedence.
1546
+
1547
+ if (slot1 != NULL) {
1548
+ PyObject *x = slot1(operand1, operand2);
1549
+
1550
+ if (x != Py_NotImplemented) {
1551
+ obj_result = x;
1552
+ goto exit_binary_result_object;
1553
+ }
1554
+
1555
+ Py_DECREF_IMMORTAL(x);
1556
+ }
1557
+
1558
+ // Statically recognized that coercion is not possible with these types
1559
+
1560
+ #if PYTHON_VERSION < 0x300
1561
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'float' and 'long'");
1562
+ #else
1563
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'float' and 'int'");
1564
+ #endif
1565
+ goto exit_binary_exception;
1566
+
1567
+ exit_binary_result_object:
1568
+ return obj_result;
1569
+
1570
+ exit_binary_exception:
1571
+ return NULL;
1572
+ }
1573
+
1574
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_LONG(PyObject *operand1, PyObject *operand2) {
1575
+ return _BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_LONG(operand1, operand2);
1576
+ }
1577
+
1578
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "FLOAT" to Python 'float'. */
1579
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_LONG_FLOAT(PyObject *operand1, PyObject *operand2) {
1580
+ CHECK_OBJECT(operand1);
1581
+ assert(PyLong_CheckExact(operand1));
1582
+ CHECK_OBJECT(operand2);
1583
+ assert(PyFloat_CheckExact(operand2));
1584
+
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
+ #ifdef _MSC_VER
1592
+ #pragma warning(pop)
1593
+ #endif
1594
+
1595
+ // Slot1 ignored on purpose, type2 takes precedence.
1596
+ binaryfunc slot2 = NULL;
1597
+
1598
+ if (!(0)) {
1599
+ // Different types, need to consider second value slot.
1600
+
1601
+ slot2 = PyFloat_Type.tp_as_number->nb_divmod;
1602
+ }
1603
+
1604
+ if (slot2 != NULL) {
1605
+ PyObject *x = slot2(operand1, operand2);
1606
+
1607
+ if (x != Py_NotImplemented) {
1608
+ obj_result = x;
1609
+ goto exit_binary_result_object;
1610
+ }
1611
+
1612
+ Py_DECREF_IMMORTAL(x);
1613
+ }
1614
+
1615
+ // Statically recognized that coercion is not possible with these types
1616
+
1617
+ #if PYTHON_VERSION < 0x300
1618
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'long' and 'float'");
1619
+ #else
1620
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'int' and 'float'");
1621
+ #endif
1622
+ goto exit_binary_exception;
1623
+
1624
+ exit_binary_result_object:
1625
+ return obj_result;
1626
+
1627
+ exit_binary_exception:
1628
+ return NULL;
1629
+ }
1630
+
1631
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_LONG_FLOAT(PyObject *operand1, PyObject *operand2) {
1632
+ return _BINARY_OPERATION_DIVMOD_OBJECT_LONG_FLOAT(operand1, operand2);
1633
+ }
1634
+
1635
+ #if PYTHON_VERSION < 0x300
1636
+ /* Code referring to "FLOAT" corresponds to Python 'float' and "INT" to Python2 'int'. */
1637
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_INT(PyObject *operand1, PyObject *operand2) {
1638
+ CHECK_OBJECT(operand1);
1639
+ assert(PyFloat_CheckExact(operand1));
1640
+ CHECK_OBJECT(operand2);
1641
+ assert(PyInt_CheckExact(operand2));
1642
+
1643
+ #ifdef _MSC_VER
1644
+ #pragma warning(push)
1645
+ #pragma warning(disable : 4101)
1646
+ #endif
1647
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1648
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1649
+ #ifdef _MSC_VER
1650
+ #pragma warning(pop)
1651
+ #endif
1652
+
1653
+ binaryfunc slot1 = PyFloat_Type.tp_as_number->nb_divmod;
1654
+ // Slot2 ignored on purpose, type1 takes precedence.
1655
+
1656
+ if (slot1 != NULL) {
1657
+ PyObject *x = slot1(operand1, operand2);
1658
+
1659
+ if (x != Py_NotImplemented) {
1660
+ obj_result = x;
1661
+ goto exit_binary_result_object;
1662
+ }
1663
+
1664
+ Py_DECREF_IMMORTAL(x);
1665
+ }
1666
+
1667
+ // Statically recognized that coercion is not possible with these types
1668
+
1669
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'float' and 'int'");
1670
+ goto exit_binary_exception;
1671
+
1672
+ exit_binary_result_object:
1673
+ return obj_result;
1674
+
1675
+ exit_binary_exception:
1676
+ return NULL;
1677
+ }
1678
+
1679
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_INT(PyObject *operand1, PyObject *operand2) {
1680
+ return _BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_INT(operand1, operand2);
1681
+ }
1682
+ #endif
1683
+
1684
+ #if PYTHON_VERSION < 0x300
1685
+ /* Code referring to "INT" corresponds to Python2 'int' and "FLOAT" to Python 'float'. */
1686
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_INT_FLOAT(PyObject *operand1, PyObject *operand2) {
1687
+ CHECK_OBJECT(operand1);
1688
+ assert(PyInt_CheckExact(operand1));
1689
+ CHECK_OBJECT(operand2);
1690
+ assert(PyFloat_CheckExact(operand2));
1691
+
1692
+ #ifdef _MSC_VER
1693
+ #pragma warning(push)
1694
+ #pragma warning(disable : 4101)
1695
+ #endif
1696
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1697
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1698
+ #ifdef _MSC_VER
1699
+ #pragma warning(pop)
1700
+ #endif
1701
+
1702
+ // Slot1 ignored on purpose, type2 takes precedence.
1703
+ binaryfunc slot2 = NULL;
1704
+
1705
+ if (!(0)) {
1706
+ // Different types, need to consider second value slot.
1707
+
1708
+ slot2 = PyFloat_Type.tp_as_number->nb_divmod;
1709
+ }
1710
+
1711
+ if (slot2 != NULL) {
1712
+ PyObject *x = slot2(operand1, operand2);
1713
+
1714
+ if (x != Py_NotImplemented) {
1715
+ obj_result = x;
1716
+ goto exit_binary_result_object;
1717
+ }
1718
+
1719
+ Py_DECREF_IMMORTAL(x);
1720
+ }
1721
+
1722
+ // Statically recognized that coercion is not possible with these types
1723
+
1724
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'int' and 'float'");
1725
+ goto exit_binary_exception;
1726
+
1727
+ exit_binary_result_object:
1728
+ return obj_result;
1729
+
1730
+ exit_binary_exception:
1731
+ return NULL;
1732
+ }
1733
+
1734
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_INT_FLOAT(PyObject *operand1, PyObject *operand2) {
1735
+ return _BINARY_OPERATION_DIVMOD_OBJECT_INT_FLOAT(operand1, operand2);
1736
+ }
1737
+ #endif
1738
+
1739
+ #if PYTHON_VERSION < 0x300
1740
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "INT" to Python2 'int'. */
1741
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_LONG_INT(PyObject *operand1, PyObject *operand2) {
1742
+ CHECK_OBJECT(operand1);
1743
+ assert(PyLong_CheckExact(operand1));
1744
+ CHECK_OBJECT(operand2);
1745
+ assert(PyInt_CheckExact(operand2));
1746
+
1747
+ #ifdef _MSC_VER
1748
+ #pragma warning(push)
1749
+ #pragma warning(disable : 4101)
1750
+ #endif
1751
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1752
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1753
+ #ifdef _MSC_VER
1754
+ #pragma warning(pop)
1755
+ #endif
1756
+
1757
+ binaryfunc slot1 = PyLong_Type.tp_as_number->nb_divmod;
1758
+ // Slot2 ignored on purpose, type1 takes precedence.
1759
+
1760
+ if (slot1 != NULL) {
1761
+ PyObject *x = slot1(operand1, operand2);
1762
+
1763
+ if (x != Py_NotImplemented) {
1764
+ obj_result = x;
1765
+ goto exit_binary_result_object;
1766
+ }
1767
+
1768
+ Py_DECREF_IMMORTAL(x);
1769
+ }
1770
+
1771
+ // Statically recognized that coercion is not possible with these types
1772
+
1773
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'long' and 'int'");
1774
+ goto exit_binary_exception;
1775
+
1776
+ exit_binary_result_object:
1777
+ return obj_result;
1778
+
1779
+ exit_binary_exception:
1780
+ return NULL;
1781
+ }
1782
+
1783
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_LONG_INT(PyObject *operand1, PyObject *operand2) {
1784
+ return _BINARY_OPERATION_DIVMOD_OBJECT_LONG_INT(operand1, operand2);
1785
+ }
1786
+ #endif
1787
+
1788
+ #if PYTHON_VERSION < 0x300
1789
+ /* Code referring to "INT" corresponds to Python2 'int' and "LONG" to Python2 'long', Python3 'int'. */
1790
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_INT_LONG(PyObject *operand1, PyObject *operand2) {
1791
+ CHECK_OBJECT(operand1);
1792
+ assert(PyInt_CheckExact(operand1));
1793
+ CHECK_OBJECT(operand2);
1794
+ assert(PyLong_CheckExact(operand2));
1795
+
1796
+ #ifdef _MSC_VER
1797
+ #pragma warning(push)
1798
+ #pragma warning(disable : 4101)
1799
+ #endif
1800
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1801
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1802
+ #ifdef _MSC_VER
1803
+ #pragma warning(pop)
1804
+ #endif
1805
+
1806
+ // Slot1 ignored on purpose, type2 takes precedence.
1807
+ binaryfunc slot2 = NULL;
1808
+
1809
+ if (!(0)) {
1810
+ // Different types, need to consider second value slot.
1811
+
1812
+ slot2 = PyLong_Type.tp_as_number->nb_divmod;
1813
+ }
1814
+
1815
+ if (slot2 != NULL) {
1816
+ PyObject *x = slot2(operand1, operand2);
1817
+
1818
+ if (x != Py_NotImplemented) {
1819
+ obj_result = x;
1820
+ goto exit_binary_result_object;
1821
+ }
1822
+
1823
+ Py_DECREF_IMMORTAL(x);
1824
+ }
1825
+
1826
+ // Statically recognized that coercion is not possible with these types
1827
+
1828
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): 'int' and 'long'");
1829
+ goto exit_binary_exception;
1830
+
1831
+ exit_binary_result_object:
1832
+ return obj_result;
1833
+
1834
+ exit_binary_exception:
1835
+ return NULL;
1836
+ }
1837
+
1838
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_INT_LONG(PyObject *operand1, PyObject *operand2) {
1839
+ return _BINARY_OPERATION_DIVMOD_OBJECT_INT_LONG(operand1, operand2);
1840
+ }
1841
+ #endif
1842
+
1843
+ #if PYTHON_VERSION < 0x300
1844
+ /* Code referring to "INT" corresponds to Python2 'int' and "CLONG" to C platform long value. */
1845
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_INT_CLONG(PyObject *operand1, long operand2) {
1846
+ CHECK_OBJECT(operand1);
1847
+ assert(PyInt_CheckExact(operand1));
1848
+
1849
+ PyObject *result;
1850
+
1851
+ // Not every code path will make use of all possible results.
1852
+ #ifdef _MSC_VER
1853
+ #pragma warning(push)
1854
+ #pragma warning(disable : 4101)
1855
+ #endif
1856
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1857
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1858
+ NUITKA_MAY_BE_UNUSED long clong_result;
1859
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
1860
+ #ifdef _MSC_VER
1861
+ #pragma warning(pop)
1862
+ #endif
1863
+
1864
+ CHECK_OBJECT(operand1);
1865
+ assert(PyInt_CheckExact(operand1));
1866
+
1867
+ const long a = PyInt_AS_LONG(operand1);
1868
+ const long b = operand2;
1869
+
1870
+ if (unlikely(b == 0)) {
1871
+ PyThreadState *tstate = PyThreadState_GET();
1872
+
1873
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "integer division or modulo by zero");
1874
+ goto exit_result_exception;
1875
+ }
1876
+
1877
+ if (likely(b != -1 || !UNARY_NEG_WOULD_OVERFLOW(a))) {
1878
+ long a_div_b = a / b;
1879
+ long a_mod_b = (long)(a - (unsigned long)a_div_b * b);
1880
+
1881
+ if (a_mod_b && (b ^ a_mod_b) < 0) {
1882
+ a_mod_b += b;
1883
+ a_div_b -= 1;
1884
+ }
1885
+
1886
+ PyObject *r = Py_BuildValue("(ll)", a_div_b, a_mod_b);
1887
+ obj_result = r;
1888
+ goto exit_result_object;
1889
+ }
1890
+
1891
+ {
1892
+ PyObject *operand1_object = operand1;
1893
+ PyObject *operand2_object = Nuitka_PyLong_FromLong(operand2);
1894
+
1895
+ PyObject *r = PyLong_Type.tp_as_number->nb_divmod(operand1_object, operand2_object);
1896
+ assert(r != Py_NotImplemented);
1897
+
1898
+ Py_DECREF(operand2_object);
1899
+
1900
+ obj_result = r;
1901
+ goto exit_result_object;
1902
+ }
1903
+
1904
+ exit_result_object:
1905
+ if (unlikely(obj_result == NULL)) {
1906
+ goto exit_result_exception;
1907
+ }
1908
+ result = obj_result;
1909
+ goto exit_result_ok;
1910
+
1911
+ exit_result_ok:
1912
+ return result;
1913
+
1914
+ exit_result_exception:
1915
+ return NULL;
1916
+ }
1917
+
1918
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_INT_CLONG(PyObject *operand1, long operand2) {
1919
+ return _BINARY_OPERATION_DIVMOD_OBJECT_INT_CLONG(operand1, operand2);
1920
+ }
1921
+ #endif
1922
+
1923
+ #if PYTHON_VERSION < 0x300
1924
+ /* Code referring to "CLONG" corresponds to C platform long value and "INT" to Python2 'int'. */
1925
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_CLONG_INT(long operand1, PyObject *operand2) {
1926
+
1927
+ CHECK_OBJECT(operand2);
1928
+ assert(PyInt_CheckExact(operand2));
1929
+
1930
+ PyObject *result;
1931
+
1932
+ // Not every code path will make use of all possible results.
1933
+ #ifdef _MSC_VER
1934
+ #pragma warning(push)
1935
+ #pragma warning(disable : 4101)
1936
+ #endif
1937
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
1938
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
1939
+ NUITKA_MAY_BE_UNUSED long clong_result;
1940
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
1941
+ #ifdef _MSC_VER
1942
+ #pragma warning(pop)
1943
+ #endif
1944
+
1945
+ CHECK_OBJECT(operand2);
1946
+ assert(PyInt_CheckExact(operand2));
1947
+
1948
+ const long a = operand1;
1949
+ const long b = PyInt_AS_LONG(operand2);
1950
+
1951
+ if (unlikely(b == 0)) {
1952
+ PyThreadState *tstate = PyThreadState_GET();
1953
+
1954
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "integer division or modulo by zero");
1955
+ goto exit_result_exception;
1956
+ }
1957
+
1958
+ if (likely(b != -1 || !UNARY_NEG_WOULD_OVERFLOW(a))) {
1959
+ long a_div_b = a / b;
1960
+ long a_mod_b = (long)(a - (unsigned long)a_div_b * b);
1961
+
1962
+ if (a_mod_b && (b ^ a_mod_b) < 0) {
1963
+ a_mod_b += b;
1964
+ a_div_b -= 1;
1965
+ }
1966
+
1967
+ PyObject *r = Py_BuildValue("(ll)", a_div_b, a_mod_b);
1968
+ obj_result = r;
1969
+ goto exit_result_object;
1970
+ }
1971
+
1972
+ {
1973
+ PyObject *operand1_object = Nuitka_PyLong_FromLong(operand1);
1974
+ PyObject *operand2_object = operand2;
1975
+
1976
+ PyObject *r = PyLong_Type.tp_as_number->nb_divmod(operand1_object, operand2_object);
1977
+ assert(r != Py_NotImplemented);
1978
+
1979
+ Py_DECREF(operand1_object);
1980
+
1981
+ obj_result = r;
1982
+ goto exit_result_object;
1983
+ }
1984
+
1985
+ exit_result_object:
1986
+ if (unlikely(obj_result == NULL)) {
1987
+ goto exit_result_exception;
1988
+ }
1989
+ result = obj_result;
1990
+ goto exit_result_ok;
1991
+
1992
+ exit_result_ok:
1993
+ return result;
1994
+
1995
+ exit_result_exception:
1996
+ return NULL;
1997
+ }
1998
+
1999
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_CLONG_INT(long operand1, PyObject *operand2) {
2000
+ return _BINARY_OPERATION_DIVMOD_OBJECT_CLONG_INT(operand1, operand2);
2001
+ }
2002
+ #endif
2003
+
2004
+ /* Code referring to "FLOAT" corresponds to Python 'float' and "CFLOAT" to C platform float value. */
2005
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_CFLOAT(PyObject *operand1, double operand2) {
2006
+ CHECK_OBJECT(operand1);
2007
+ assert(PyFloat_CheckExact(operand1));
2008
+
2009
+ PyObject *result;
2010
+
2011
+ #ifdef _MSC_VER
2012
+ #pragma warning(push)
2013
+ #pragma warning(disable : 4101)
2014
+ #endif
2015
+ // Not every code path will make use of all possible results.
2016
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
2017
+ NUITKA_MAY_BE_UNUSED long clong_result;
2018
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
2019
+ #ifdef _MSC_VER
2020
+ #pragma warning(pop)
2021
+ #endif
2022
+
2023
+ CHECK_OBJECT(operand1);
2024
+ assert(PyFloat_CheckExact(operand1));
2025
+
2026
+ const double a = PyFloat_AS_DOUBLE(operand1);
2027
+ const double b = operand2;
2028
+
2029
+ if (unlikely(b == 0.0)) {
2030
+ PyThreadState *tstate = PyThreadState_GET();
2031
+
2032
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "float modulo");
2033
+ goto exit_result_exception;
2034
+ }
2035
+
2036
+ {
2037
+ double mod = fmod(a, b);
2038
+ double div = (a - mod) / b;
2039
+
2040
+ if (mod) {
2041
+ if ((b < 0) != (mod < 0)) {
2042
+ mod += b;
2043
+ div -= 1.0;
2044
+ }
2045
+ } else {
2046
+ mod = copysign(0.0, b);
2047
+ }
2048
+
2049
+ double floordiv;
2050
+ if (div) {
2051
+ floordiv = floor(div);
2052
+ if (div - floordiv > 0.5) {
2053
+ floordiv += 1.0;
2054
+ }
2055
+ } else {
2056
+ floordiv = copysign(0.0, a / b);
2057
+ }
2058
+
2059
+ PyObject *r = Py_BuildValue("(dd)", floordiv, mod);
2060
+
2061
+ obj_result = r;
2062
+ goto exit_result_object;
2063
+ }
2064
+
2065
+ exit_result_object:
2066
+ if (unlikely(obj_result == NULL)) {
2067
+ goto exit_result_exception;
2068
+ }
2069
+ result = obj_result;
2070
+ goto exit_result_ok;
2071
+
2072
+ exit_result_ok:
2073
+ return result;
2074
+
2075
+ exit_result_exception:
2076
+ return NULL;
2077
+ }
2078
+
2079
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_CFLOAT(PyObject *operand1, double operand2) {
2080
+ return _BINARY_OPERATION_DIVMOD_OBJECT_FLOAT_CFLOAT(operand1, operand2);
2081
+ }
2082
+
2083
+ /* Code referring to "CFLOAT" corresponds to C platform float value and "FLOAT" to Python 'float'. */
2084
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_CFLOAT_FLOAT(double operand1, PyObject *operand2) {
2085
+
2086
+ CHECK_OBJECT(operand2);
2087
+ assert(PyFloat_CheckExact(operand2));
2088
+
2089
+ PyObject *result;
2090
+
2091
+ #ifdef _MSC_VER
2092
+ #pragma warning(push)
2093
+ #pragma warning(disable : 4101)
2094
+ #endif
2095
+ // Not every code path will make use of all possible results.
2096
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
2097
+ NUITKA_MAY_BE_UNUSED long clong_result;
2098
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
2099
+ #ifdef _MSC_VER
2100
+ #pragma warning(pop)
2101
+ #endif
2102
+
2103
+ CHECK_OBJECT(operand2);
2104
+ assert(PyFloat_CheckExact(operand2));
2105
+
2106
+ const double a = operand1;
2107
+ const double b = PyFloat_AS_DOUBLE(operand2);
2108
+
2109
+ if (unlikely(b == 0.0)) {
2110
+ PyThreadState *tstate = PyThreadState_GET();
2111
+
2112
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "float modulo");
2113
+ goto exit_result_exception;
2114
+ }
2115
+
2116
+ {
2117
+ double mod = fmod(a, b);
2118
+ double div = (a - mod) / b;
2119
+
2120
+ if (mod) {
2121
+ if ((b < 0) != (mod < 0)) {
2122
+ mod += b;
2123
+ div -= 1.0;
2124
+ }
2125
+ } else {
2126
+ mod = copysign(0.0, b);
2127
+ }
2128
+
2129
+ double floordiv;
2130
+ if (div) {
2131
+ floordiv = floor(div);
2132
+ if (div - floordiv > 0.5) {
2133
+ floordiv += 1.0;
2134
+ }
2135
+ } else {
2136
+ floordiv = copysign(0.0, a / b);
2137
+ }
2138
+
2139
+ PyObject *r = Py_BuildValue("(dd)", floordiv, mod);
2140
+
2141
+ obj_result = r;
2142
+ goto exit_result_object;
2143
+ }
2144
+
2145
+ exit_result_object:
2146
+ if (unlikely(obj_result == NULL)) {
2147
+ goto exit_result_exception;
2148
+ }
2149
+ result = obj_result;
2150
+ goto exit_result_ok;
2151
+
2152
+ exit_result_ok:
2153
+ return result;
2154
+
2155
+ exit_result_exception:
2156
+ return NULL;
2157
+ }
2158
+
2159
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_CFLOAT_FLOAT(double operand1, PyObject *operand2) {
2160
+ return _BINARY_OPERATION_DIVMOD_OBJECT_CFLOAT_FLOAT(operand1, operand2);
2161
+ }
2162
+
2163
+ /* Code referring to "OBJECT" corresponds to any Python object and "OBJECT" to any Python object. */
2164
+ static PyObject *_BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_OBJECT(PyObject *operand1, PyObject *operand2) {
2165
+ CHECK_OBJECT(operand1);
2166
+ CHECK_OBJECT(operand2);
2167
+
2168
+ #if PYTHON_VERSION < 0x300
2169
+ if (PyInt_CheckExact(operand1) && PyInt_CheckExact(operand2)) {
2170
+ PyObject *result;
2171
+
2172
+ // Not every code path will make use of all possible results.
2173
+ #ifdef _MSC_VER
2174
+ #pragma warning(push)
2175
+ #pragma warning(disable : 4101)
2176
+ #endif
2177
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
2178
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
2179
+ NUITKA_MAY_BE_UNUSED long clong_result;
2180
+ NUITKA_MAY_BE_UNUSED double cfloat_result;
2181
+ #ifdef _MSC_VER
2182
+ #pragma warning(pop)
2183
+ #endif
2184
+
2185
+ CHECK_OBJECT(operand1);
2186
+ assert(PyInt_CheckExact(operand1));
2187
+ CHECK_OBJECT(operand2);
2188
+ assert(PyInt_CheckExact(operand2));
2189
+
2190
+ const long a = PyInt_AS_LONG(operand1);
2191
+ const long b = PyInt_AS_LONG(operand2);
2192
+
2193
+ if (unlikely(b == 0)) {
2194
+ PyThreadState *tstate = PyThreadState_GET();
2195
+
2196
+ SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ZeroDivisionError, "integer division or modulo by zero");
2197
+ goto exit_result_exception;
2198
+ }
2199
+
2200
+ if (likely(b != -1 || !UNARY_NEG_WOULD_OVERFLOW(a))) {
2201
+ long a_div_b = a / b;
2202
+ long a_mod_b = (long)(a - (unsigned long)a_div_b * b);
2203
+
2204
+ if (a_mod_b && (b ^ a_mod_b) < 0) {
2205
+ a_mod_b += b;
2206
+ a_div_b -= 1;
2207
+ }
2208
+
2209
+ PyObject *r = Py_BuildValue("(ll)", a_div_b, a_mod_b);
2210
+ obj_result = r;
2211
+ goto exit_result_object;
2212
+ }
2213
+
2214
+ {
2215
+ PyObject *operand1_object = operand1;
2216
+ PyObject *operand2_object = operand2;
2217
+
2218
+ PyObject *r = PyLong_Type.tp_as_number->nb_divmod(operand1_object, operand2_object);
2219
+ assert(r != Py_NotImplemented);
2220
+
2221
+ obj_result = r;
2222
+ goto exit_result_object;
2223
+ }
2224
+
2225
+ exit_result_object:
2226
+ if (unlikely(obj_result == NULL)) {
2227
+ goto exit_result_exception;
2228
+ }
2229
+ result = obj_result;
2230
+ goto exit_result_ok;
2231
+
2232
+ exit_result_ok:
2233
+ return result;
2234
+
2235
+ exit_result_exception:
2236
+ return NULL;
2237
+ }
2238
+ #endif
2239
+
2240
+ PyTypeObject *type1 = Py_TYPE(operand1);
2241
+ PyTypeObject *type2 = Py_TYPE(operand2);
2242
+
2243
+ #ifdef _MSC_VER
2244
+ #pragma warning(push)
2245
+ #pragma warning(disable : 4101)
2246
+ #endif
2247
+ NUITKA_MAY_BE_UNUSED bool cbool_result;
2248
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
2249
+ #ifdef _MSC_VER
2250
+ #pragma warning(pop)
2251
+ #endif
2252
+
2253
+ binaryfunc slot1 =
2254
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_divmod : NULL;
2255
+ binaryfunc slot2 = NULL;
2256
+
2257
+ if (!(type1 == type2)) {
2258
+ // Different types, need to consider second value slot.
2259
+
2260
+ slot2 = (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_divmod : NULL;
2261
+
2262
+ if (slot1 == slot2) {
2263
+ slot2 = NULL;
2264
+ }
2265
+ }
2266
+
2267
+ if (slot1 != NULL) {
2268
+ if (slot2 != NULL) {
2269
+ if (Nuitka_Type_IsSubtype(type2, type1)) {
2270
+ PyObject *x = slot2(operand1, operand2);
2271
+
2272
+ if (x != Py_NotImplemented) {
2273
+ obj_result = x;
2274
+ goto exit_binary_result_object;
2275
+ }
2276
+
2277
+ Py_DECREF_IMMORTAL(x);
2278
+ slot2 = NULL;
2279
+ }
2280
+ }
2281
+
2282
+ PyObject *x = slot1(operand1, operand2);
2283
+
2284
+ if (x != Py_NotImplemented) {
2285
+ obj_result = x;
2286
+ goto exit_binary_result_object;
2287
+ }
2288
+
2289
+ Py_DECREF_IMMORTAL(x);
2290
+ }
2291
+
2292
+ if (slot2 != NULL) {
2293
+ PyObject *x = slot2(operand1, operand2);
2294
+
2295
+ if (x != Py_NotImplemented) {
2296
+ obj_result = x;
2297
+ goto exit_binary_result_object;
2298
+ }
2299
+
2300
+ Py_DECREF_IMMORTAL(x);
2301
+ }
2302
+
2303
+ #if PYTHON_VERSION < 0x300
2304
+ if (!NEW_STYLE_NUMBER_TYPE(type1) || !NEW_STYLE_NUMBER_TYPE(type2)) {
2305
+ coercion c1 =
2306
+ (type1->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type1)) ? type1->tp_as_number->nb_coerce : NULL;
2307
+
2308
+ if (c1 != NULL) {
2309
+ PyObject *coerced1 = operand1;
2310
+ PyObject *coerced2 = operand2;
2311
+
2312
+ int err = c1(&coerced1, &coerced2);
2313
+
2314
+ if (unlikely(err < 0)) {
2315
+ goto exit_binary_exception;
2316
+ }
2317
+
2318
+ if (err == 0) {
2319
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
2320
+
2321
+ if (likely(mv == NULL)) {
2322
+ binaryfunc slot = mv->nb_divmod;
2323
+
2324
+ if (likely(slot != NULL)) {
2325
+ PyObject *x = slot(coerced1, coerced2);
2326
+
2327
+ Py_DECREF(coerced1);
2328
+ Py_DECREF(coerced2);
2329
+
2330
+ obj_result = x;
2331
+ goto exit_binary_result_object;
2332
+ }
2333
+ }
2334
+
2335
+ // nb_coerce took a reference.
2336
+ Py_DECREF(coerced1);
2337
+ Py_DECREF(coerced2);
2338
+ }
2339
+ }
2340
+ coercion c2 =
2341
+ (type2->tp_as_number != NULL && NEW_STYLE_NUMBER_TYPE(type2)) ? type2->tp_as_number->nb_coerce : NULL;
2342
+
2343
+ if (c2 != NULL) {
2344
+ PyObject *coerced1 = operand1;
2345
+ PyObject *coerced2 = operand2;
2346
+
2347
+ int err = c2(&coerced2, &coerced1);
2348
+
2349
+ if (unlikely(err < 0)) {
2350
+ goto exit_binary_exception;
2351
+ }
2352
+
2353
+ if (err == 0) {
2354
+ PyNumberMethods *mv = Py_TYPE(coerced1)->tp_as_number;
2355
+
2356
+ if (likely(mv == NULL)) {
2357
+ binaryfunc slot = mv->nb_divmod;
2358
+
2359
+ if (likely(slot != NULL)) {
2360
+ PyObject *x = slot(coerced1, coerced2);
2361
+
2362
+ Py_DECREF(coerced1);
2363
+ Py_DECREF(coerced2);
2364
+
2365
+ obj_result = x;
2366
+ goto exit_binary_result_object;
2367
+ }
2368
+ }
2369
+
2370
+ // nb_coerce took a reference.
2371
+ Py_DECREF(coerced1);
2372
+ Py_DECREF(coerced2);
2373
+ }
2374
+ }
2375
+ }
2376
+ #endif
2377
+
2378
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for divmod(): '%s' and '%s'", type1->tp_name,
2379
+ type2->tp_name);
2380
+ goto exit_binary_exception;
2381
+
2382
+ exit_binary_result_object:
2383
+ return obj_result;
2384
+
2385
+ exit_binary_exception:
2386
+ return NULL;
2387
+ }
2388
+
2389
+ PyObject *BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_OBJECT(PyObject *operand1, PyObject *operand2) {
2390
+ return _BINARY_OPERATION_DIVMOD_OBJECT_OBJECT_OBJECT(operand1, operand2);
2391
+ }
2392
+
2393
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
2394
+ // integrates with CPython, but also works on its own.
2395
+ //
2396
+ // Licensed under the Apache License, Version 2.0 (the "License");
2397
+ // you may not use this file except in compliance with the License.
2398
+ // You may obtain a copy of the License at
2399
+ //
2400
+ // http://www.apache.org/licenses/LICENSE-2.0
2401
+ //
2402
+ // Unless required by applicable law or agreed to in writing, software
2403
+ // distributed under the License is distributed on an "AS IS" BASIS,
2404
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2405
+ // See the License for the specific language governing permissions and
2406
+ // limitations under the License.