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