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