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