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