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