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