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,1928 @@
1
+ # Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+
4
+ """ C type descriptions. For specific or general C types, provide code generation help.
5
+
6
+ """
7
+
8
+ import math
9
+ from abc import abstractmethod
10
+
11
+ from nuitka.__past__ import long
12
+ from nuitka.code_generation.BinaryOperationHelperDefinitions import (
13
+ isCommutativeType,
14
+ )
15
+ from nuitka.code_generation.Namify import namifyConstant
16
+ from nuitka.utils.SlotMetaClasses import getMetaClassBase
17
+
18
+
19
+ class TypeDescBase(getMetaClassBase("Type", require_slots=False)):
20
+ # To be overloaded
21
+ type_name = None
22
+ type_desc = None
23
+ type_decl = None
24
+
25
+ python_requirement = None
26
+
27
+ def __init__(self):
28
+ assert self.type_name
29
+ assert self.type_desc
30
+ assert self.type_decl
31
+
32
+ def __repr__(self):
33
+ return "<%s %s %s>" % (self.__class__.__name__, self.type_name, self.type_desc)
34
+
35
+ @classmethod
36
+ def getHelperCodeName(cls):
37
+ return cls.type_name.upper()
38
+
39
+ @classmethod
40
+ def getTypeName2(cls):
41
+ return cls.type_name
42
+
43
+ @classmethod
44
+ def getTypeName3(cls):
45
+ return cls.type_name
46
+
47
+ @classmethod
48
+ def getVariableDecl(cls, variable_name):
49
+ if cls.type_decl.endswith("*"):
50
+ return cls.type_decl + variable_name
51
+ else:
52
+ return cls.type_decl + " " + variable_name
53
+
54
+ @classmethod
55
+ def getTypeDecl(cls):
56
+ return cls.type_decl
57
+
58
+ @classmethod
59
+ def getCheckValueCode(cls, operand):
60
+ return "CHECK_OBJECT(%s);" % operand
61
+
62
+ @classmethod
63
+ def getTypeValueExpression(cls, operand):
64
+ return "Py_TYPE(%s)" % operand
65
+
66
+ def getTypeNameExpression(self, type_name):
67
+ if self is object_desc:
68
+ return "%s->tp_name" % type_name
69
+
70
+ if self.getTypeName2() == self.getTypeName3():
71
+ return '"%s"' % self.getTypeName2()
72
+
73
+ if self.python_requirement == "PYTHON_VERSION < 0x300":
74
+ return '"%s"' % self.getTypeName2()
75
+ elif self.python_requirement == "PYTHON_VERSION >= 0x300":
76
+ return '"%s"' % self.getTypeName3()
77
+ elif self.python_requirement is None:
78
+ return '(PYTHON_VERSION < 0x300 ? "%s" : "%s")' % (
79
+ self.getTypeName2(),
80
+ self.getTypeName3(),
81
+ )
82
+ else:
83
+ assert False, self.python_requirement
84
+
85
+ def getTypeValueVariableExpression(self, type_name):
86
+ if self is object_desc:
87
+ return type_name
88
+ else:
89
+ return self.getTypeValueExpression(None)
90
+
91
+ @abstractmethod
92
+ def getNewStyleNumberTypeCheckExpression(self, operand):
93
+ pass
94
+
95
+ @staticmethod
96
+ def needsIndexConversion():
97
+ return True
98
+
99
+ def isKnownToNotCoerce(self, right):
100
+ if right is self and right is not object_desc:
101
+ return True
102
+
103
+ if self in (int_desc, long_desc, float_desc):
104
+ if right in (
105
+ str_desc,
106
+ unicode_desc,
107
+ tuple_desc,
108
+ list_desc,
109
+ set_desc,
110
+ dict_desc,
111
+ bytes_desc,
112
+ ):
113
+ return True
114
+
115
+ if (
116
+ self.getNewStyleNumberTypeCheckExpression("dummy") == "1"
117
+ and right.getNewStyleNumberTypeCheckExpression("dummy") == "1"
118
+ ):
119
+ return True
120
+
121
+ if self is not object_desc:
122
+ return not self.hasSlot("nb_coerce")
123
+ else:
124
+ return False
125
+
126
+ def getMostSpecificType(self, right):
127
+ if self is not object_desc:
128
+ return self
129
+ else:
130
+ return right
131
+
132
+ def getLeastSpecificType(self, right):
133
+ if self is object_desc:
134
+ return self
135
+ else:
136
+ return right
137
+
138
+ @classmethod
139
+ def hasOneOrBothType(cls, right, type_name):
140
+ # At least one match
141
+ if type_name not in (cls.type_name, right.type_name):
142
+ return False
143
+
144
+ # Two matches perfect.
145
+ if cls.type_name == right.type_name:
146
+ return True
147
+
148
+ if "object" not in (cls.type_name, right.type_name):
149
+ return False
150
+
151
+ return True
152
+
153
+ @classmethod
154
+ def mayBothHaveType(cls, right, type_name):
155
+ return cls.type_name in (type_name, "object") and right.type_name in (
156
+ type_name,
157
+ "object",
158
+ )
159
+
160
+ @classmethod
161
+ def getTypeCheckExactExpression(cls, operand):
162
+ if cls.type_name == "str":
163
+ return "PyStr_CheckExact(%s)" % operand
164
+ elif cls.type_name == "dict":
165
+ return "PyDict_CheckExact(%s)" % operand
166
+ else:
167
+ assert False, cls
168
+
169
+ @classmethod
170
+ def getIntCheckExpression(cls, operand):
171
+ if cls.type_name == "int":
172
+ return "1"
173
+ elif cls.type_name == "object":
174
+ return "PyInt_CheckExact(%s)" % operand
175
+ else:
176
+ return "0"
177
+
178
+ @classmethod
179
+ def getLongCheckExpression(cls, operand):
180
+ if cls.type_name == "long":
181
+ return "1"
182
+ elif cls.type_name == "object":
183
+ return "PyLong_CheckExact(%s)" % operand
184
+ else:
185
+ return "0"
186
+
187
+ @classmethod
188
+ def getStringCheckExpression(cls, operand):
189
+ if cls.type_name == "str":
190
+ return "1"
191
+ elif cls.type_name == "object":
192
+ return "PyString_CheckExact(%s)" % operand
193
+ else:
194
+ return "0"
195
+
196
+ @classmethod
197
+ def getBytesCheckExpression(cls, operand):
198
+ if cls.type_name == "bytes":
199
+ return "1"
200
+ elif cls.type_name == "object":
201
+ return "PyBytes_CheckExact(%s)" % operand
202
+ else:
203
+ return "0"
204
+
205
+ @classmethod
206
+ def getUnicodeCheckExpression(cls, operand):
207
+ if cls.type_name == "unicode":
208
+ return "1"
209
+ elif cls.type_name == "object":
210
+ return "PyUnicode_CheckExact(%s)" % operand
211
+ else:
212
+ return "0"
213
+
214
+ @classmethod
215
+ def getFloatCheckExpression(cls, operand):
216
+ if cls.type_name == "float":
217
+ return "1"
218
+ elif cls.type_name == "object":
219
+ return "PyFloat_CheckExact(%s)" % operand
220
+ else:
221
+ return "0"
222
+
223
+ @classmethod
224
+ def getListCheckExpression(cls, operand):
225
+ if cls.type_name == "list":
226
+ return "1"
227
+ elif cls.type_name == "object":
228
+ return "PyList_CheckExact(%s)" % operand
229
+ else:
230
+ return "0"
231
+
232
+ def getSequenceCheckExpression(self, operand, right):
233
+ # Dictionaries are not really sequences despite slots.
234
+ if self.type_name == "dict":
235
+ return "0"
236
+ elif self.type_name == "object":
237
+ if right.type_name == "tuple":
238
+ return "(PyTuple_CheckExact(%s) || PySequence_Check(%s))" % (
239
+ operand,
240
+ operand,
241
+ )
242
+ else:
243
+ return "PySequence_Check(%s)" % operand
244
+ elif self.hasSlot("sq_item"):
245
+ return "1"
246
+ else:
247
+ return "0"
248
+
249
+ def getInstanceCheckCode(self, operand):
250
+ # We do not yet specialize for instances, therefore everything but object is one.
251
+ if self.type_name == "object":
252
+ return "PyInstance_Check(%s)" % operand
253
+ else:
254
+ return "0"
255
+
256
+ def getIndexCheckExpression(self, operand):
257
+ if self.hasSlot("nb_index"):
258
+ return "1"
259
+ elif self.type_name == "object":
260
+ return "Nuitka_Index_Check(%s)" % operand
261
+ else:
262
+ return "0"
263
+
264
+ def getSaneTypeCheckCode(self, operand):
265
+ # Is the type known to behave well for comparisons and object identity, e.g. not float.
266
+ if self.type_name == "object":
267
+ return "IS_SANE_TYPE(Py_TYPE(%s))" % operand
268
+ elif self in (str_desc, int_desc, long_desc, list_desc, tuple_desc):
269
+ return "1"
270
+ elif self in (float_desc,):
271
+ return "0"
272
+ else:
273
+ # Detect types not yet annotated.
274
+ assert False, self
275
+ return "0"
276
+
277
+ def getTypeIdenticalCheckExpression(self, other, type1, type2):
278
+ if self is object_desc or other is object_desc:
279
+ return "%s == %s" % (
280
+ self.getTypeValueExpression(None) if self is not object_desc else type1,
281
+ (
282
+ other.getTypeValueExpression(None)
283
+ if other is not object_desc
284
+ else type2
285
+ ),
286
+ )
287
+ elif self is other:
288
+ return "1"
289
+ else:
290
+ return "0"
291
+
292
+ def getTypeNonIdenticalCheckExpression(self, other, type1, type2):
293
+ if self is object_desc or other is object_desc:
294
+ return "%s != %s" % (
295
+ self.getTypeValueExpression(None) if self is not object_desc else type1,
296
+ (
297
+ other.getTypeValueExpression(None)
298
+ if other is not object_desc
299
+ else type2
300
+ ),
301
+ )
302
+ elif self is other:
303
+ return "0"
304
+ else:
305
+ return "1"
306
+
307
+ def getTypeSubTypeCheckExpression(self, other, type2, type1):
308
+ return "Nuitka_Type_IsSubtype(%s, %s)" % (
309
+ other.getTypeValueExpression(None) if other is not object_desc else type2,
310
+ self.getTypeValueExpression(None) if self is not object_desc else type1,
311
+ )
312
+
313
+ def getRealSubTypeCheckCode(self, other, type2, type1):
314
+ # Our concrete types, cannot be subtypes of any other type.
315
+ if other is object_desc:
316
+ return "Nuitka_Type_IsSubtype(%s, %s)" % (
317
+ type2,
318
+ self.getTypeValueExpression(None) if self is not object_desc else type1,
319
+ )
320
+ else:
321
+ return 0
322
+
323
+ @abstractmethod
324
+ def hasSlot(self, slot):
325
+ pass
326
+
327
+ @staticmethod
328
+ def hasPreferredSlot(right, slot):
329
+ # Virtual method, pylint: disable=unused-argument
330
+ return False
331
+
332
+ def _getSlotValueExpression(self, operand, slot):
333
+ if slot.startswith("nb_"):
334
+ return "(%s) ? %s : NULL" % (
335
+ operand
336
+ + "->tp_as_number != NULL && "
337
+ + self.getNewStyleNumberTypeCheckExpression(operand),
338
+ operand + "->tp_as_number->" + slot,
339
+ )
340
+ elif slot.startswith("sq_"):
341
+ return "%s ? %s : NULL" % (
342
+ operand + "->tp_as_sequence" + " != NULL",
343
+ operand + "->tp_as_sequence->" + slot,
344
+ )
345
+ elif slot == "tp_richcompare":
346
+ # Try to detect fallbacks, this needs version specific management
347
+ # for at least "LONG", maybe others. spell-checker: ignore RICHCOMPARE
348
+
349
+ assert self is object_desc, self
350
+ return "TP_RICHCOMPARE(%s)" % operand
351
+ elif slot == "tp_compare":
352
+ return operand + "->tp_compare"
353
+ else:
354
+ assert False, slot
355
+
356
+ @staticmethod
357
+ def getSlotType(slot):
358
+ if slot in ("nb_power", "nb_inplace_power"):
359
+ return "ternaryfunc"
360
+ elif slot in ("sq_repeat", "sq_inplace_repeat"):
361
+ return "ssizeargfunc"
362
+ else:
363
+ return "binaryfunc"
364
+
365
+ @staticmethod
366
+ def getSlotCallExpression(nb_slot, slot_var, operand1, operand2):
367
+ if nb_slot in ("nb_power", "nb_inplace_power"):
368
+ return "%s(%s, %s, Py_None)" % (slot_var, operand1, operand2)
369
+ else:
370
+ return "%s(%s, %s)" % (slot_var, operand1, operand2)
371
+
372
+ def getSlotValueExpression(self, operand, slot):
373
+ assert (
374
+ "inplace_" not in slot
375
+ or not self.hasSlot(slot)
376
+ or self in (set_desc, list_desc)
377
+ ), self.hasSlot
378
+
379
+ if not self.hasSlot(slot):
380
+ return "NULL"
381
+
382
+ return self._getSlotValueExpression(operand, slot)
383
+
384
+ def getSlotValueCheckExpression(self, operand, slot):
385
+ # Virtual method, pylint: disable=unused-argument
386
+ return "true" if self.hasSlot(slot) else "false"
387
+
388
+ @abstractmethod
389
+ def getNoSequenceSlotAccessTestCode(self, type_name):
390
+ pass
391
+
392
+ @staticmethod
393
+ def getOperationErrorMessageName(operator, inplace):
394
+ operator = operator.replace("%", "%%")
395
+
396
+ if operator == "**" and not inplace:
397
+ return "** or pow()"
398
+ elif operator == "divmod":
399
+ assert not inplace
400
+ return "divmod()"
401
+
402
+ assert "=" not in operator, operator
403
+
404
+ if inplace:
405
+ operator = operator + "="
406
+
407
+ return operator
408
+
409
+ def getReturnUnorderableTypeErrorCode(
410
+ self, operator, left, right, operand1, operand2
411
+ ):
412
+ args = []
413
+
414
+ if left is object_desc:
415
+ args.append("%s->tp_name" % operand1)
416
+ if right is object_desc:
417
+ args.append("%s->tp_name" % operand2)
418
+
419
+ if args:
420
+ args = ", " + ", ".join(args)
421
+ else:
422
+ args = ""
423
+
424
+ if (
425
+ left.getTypeName2() != left.getTypeName3()
426
+ or right.getTypeName2() != right.getTypeName3()
427
+ ):
428
+ # TODO: The message for Python2, can it be triggered at all for non-objects?
429
+ return """\
430
+ #if PYTHON_VERSION < 0x300
431
+ PyErr_Format(PyExc_TypeError, "unorderable types: %(left_type2)s() %(operator)s %(right_type2)s()"%(args)s);
432
+ #elif PYTHON_VERSION < 0x360
433
+ PyErr_Format(PyExc_TypeError, "unorderable types: %(left_type3)s() %(operator)s %(right_type3)s()"%(args)s);
434
+ #else
435
+ PyErr_Format(PyExc_TypeError, "'%(operator)s' not supported between instances of '%(left_type3)s' and '%(right_type3)s'"%(args)s);
436
+ #endif
437
+ return %(return_value)s;""" % {
438
+ "operator": operator,
439
+ "left_type2": "%s" if left is object_desc else left.getTypeName2(),
440
+ "right_type2": "%s" if right is object_desc else right.getTypeName2(),
441
+ "left_type3": "%s" if left is object_desc else left.getTypeName3(),
442
+ "right_type3": "%s" if right is object_desc else right.getTypeName3(),
443
+ "args": args,
444
+ "return_value": self.getExceptionResultIndicatorValue(),
445
+ }
446
+ else:
447
+ return """\
448
+ #if PYTHON_VERSION < 0x360
449
+ PyErr_Format(PyExc_TypeError, "unorderable types: %(left_type)s() %(operator)s %(right_type)s()"%(args)s);
450
+ #else
451
+ PyErr_Format(PyExc_TypeError, "'%(operator)s' not supported between instances of '%(left_type)s' and '%(right_type)s'"%(args)s);
452
+ #endif
453
+ return %(return_value)s;""" % {
454
+ "operator": operator,
455
+ "left_type": "%s" if left is object_desc else left.getTypeName2(),
456
+ "right_type": "%s" if right is object_desc else right.getTypeName2(),
457
+ "args": args,
458
+ "return_value": self.getExceptionResultIndicatorValue(),
459
+ }
460
+
461
+ def hasSameTypeOperationSpecializationCode(self, other, nb_slot, sq_slot):
462
+ # Many cases, pylint: disable=too-many-branches,too-many-return-statements
463
+
464
+ candidate = self if self is not object_desc else other
465
+
466
+ # Both are objects, nothing to be done.
467
+ if candidate is object_desc:
468
+ assert self is object_desc
469
+ assert other is object_desc
470
+ return False
471
+
472
+ # Special case for sequence concat/repeats.
473
+ if (
474
+ sq_slot is not None
475
+ and not candidate.hasSlot(nb_slot)
476
+ and candidate.hasSlot(sq_slot)
477
+ ):
478
+ slot = sq_slot
479
+ else:
480
+ slot = nb_slot
481
+
482
+ if slot == "sq_repeat":
483
+ if candidate in (
484
+ list_desc,
485
+ tuple_desc,
486
+ set_desc,
487
+ dict_desc,
488
+ unicode_desc,
489
+ str_desc,
490
+ bytes_desc,
491
+ ):
492
+ # No repeat with themselves.
493
+ return False
494
+
495
+ if slot == "nb_remainder":
496
+ if candidate in (list_desc, tuple_desc, set_desc, dict_desc):
497
+ # No remainder with themselves.
498
+ return False
499
+
500
+ if slot == "nb_multiply":
501
+ if candidate in (
502
+ str_desc,
503
+ bytes_desc,
504
+ list_desc,
505
+ tuple_desc,
506
+ set_desc,
507
+ dict_desc,
508
+ ):
509
+ # No multiply with themselves.
510
+ return False
511
+
512
+ if slot == "nb_add":
513
+ # Tuple and list, etc. use sq_concat.
514
+ # TODO: What about unicode_desc
515
+ if candidate in (
516
+ str_desc,
517
+ bytes_desc,
518
+ tuple_desc,
519
+ list_desc,
520
+ set_desc,
521
+ dict_desc,
522
+ ):
523
+ # No add with themselves.
524
+ return False
525
+
526
+ if slot in ("nb_and", "nb_or", "nb_xor"):
527
+ if candidate in (
528
+ str_desc,
529
+ bytes_desc,
530
+ unicode_desc,
531
+ list_desc,
532
+ tuple_desc,
533
+ dict_desc,
534
+ float_desc,
535
+ ):
536
+ return False
537
+
538
+ if slot in ("nb_lshift", "nb_rshift"):
539
+ if candidate in (
540
+ str_desc,
541
+ bytes_desc,
542
+ unicode_desc,
543
+ tuple_desc,
544
+ list_desc,
545
+ set_desc,
546
+ dict_desc,
547
+ float_desc,
548
+ ):
549
+ return False
550
+
551
+ if slot == "nb_matrix_multiply":
552
+ # Nobody has it for anything
553
+ return False
554
+
555
+ return True
556
+
557
+ def hasSimilarTypeSpecializationCode(self, other):
558
+ return other in related_types.get(self, ())
559
+
560
+ def getSameTypeType(self, other):
561
+ if self is object_desc:
562
+ return other
563
+ elif other is object_desc:
564
+ return self
565
+ else:
566
+ return object_desc
567
+
568
+ def isSimilarOrSameTypesAsOneOf(self, other):
569
+ assert other is not None
570
+
571
+ if self is other or other in related_types.get(self, ()):
572
+ return True
573
+
574
+ return False
575
+
576
+ def hasTypeSpecializationCode(self, other, nb_slot, sq_slot):
577
+ if self is object_desc and other is object_desc:
578
+ return False
579
+
580
+ if self is other:
581
+ return self.hasSameTypeOperationSpecializationCode(
582
+ other=other,
583
+ nb_slot=nb_slot,
584
+ sq_slot=sq_slot,
585
+ )
586
+
587
+ return self.hasSimilarTypeSpecializationCode(
588
+ other=other,
589
+ )
590
+
591
+ def getTypeComparisonSpecializationHelper(
592
+ self, other, op_code, target, operand1, operand2
593
+ ):
594
+ candidate1 = self if self is not object_desc else other
595
+ candidate2 = other if other is not object_desc else self
596
+
597
+ if candidate1 is object_desc:
598
+ return "", None, None, None, None, None
599
+
600
+ if long_desc in (candidate1, candidate2) and int_desc in (
601
+ candidate1,
602
+ candidate2,
603
+ ):
604
+ if candidate1 == int_desc:
605
+ operand1 = int_desc.getAsLongValueExpression(operand1)
606
+ candidate1 = c_long_desc
607
+ elif candidate2 == int_desc:
608
+ operand2 = int_desc.getAsLongValueExpression(operand1)
609
+ candidate2 = c_long_desc
610
+ else:
611
+ assert False
612
+
613
+ if (
614
+ target is n_bool_desc
615
+ and candidate1 is candidate2
616
+ and candidate1 not in (tuple_desc, list_desc)
617
+ ):
618
+ target = c_bool_desc
619
+
620
+ return (
621
+ "COMPARE_%s_%s_%s_%s"
622
+ % (
623
+ op_code,
624
+ target.getHelperCodeName(),
625
+ candidate1.getHelperCodeName(),
626
+ candidate2.getHelperCodeName(),
627
+ ),
628
+ target,
629
+ candidate1,
630
+ candidate2,
631
+ operand1,
632
+ operand2,
633
+ )
634
+
635
+ def getTypeComparisonSpecializationCode(
636
+ self, other, op_code, target, operand1, operand2
637
+ ):
638
+ if (
639
+ target is n_bool_desc
640
+ and self not in (tuple_desc, list_desc)
641
+ and other not in (tuple_desc, list_desc)
642
+ ):
643
+ helper_target = c_bool_desc
644
+ else:
645
+ helper_target = target
646
+
647
+ (
648
+ helper_name,
649
+ _helper_target,
650
+ _type_desc1,
651
+ _type_desc2,
652
+ operand1,
653
+ operand2,
654
+ ) = self.getTypeComparisonSpecializationHelper(
655
+ other=other,
656
+ op_code=op_code,
657
+ target=helper_target,
658
+ operand1=operand1,
659
+ operand2=operand2,
660
+ )
661
+
662
+ if not helper_name:
663
+ return ""
664
+
665
+ assert helper_name != "COMPARE_GE_NBOOL_INT_INT"
666
+
667
+ if helper_target is target:
668
+ return "return %s(%s, %s);" % (
669
+ helper_name,
670
+ operand1,
671
+ operand2,
672
+ )
673
+ else:
674
+ return "return %s(%s, %s) ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE;" % (
675
+ helper_name,
676
+ operand1,
677
+ operand2,
678
+ )
679
+
680
+ @staticmethod
681
+ def getTakeReferenceStatement(operand, immortal):
682
+ return "%s(%s);" % (
683
+ ("Py_INCREF_IMMORTAL" if immortal else "Py_INCREF"),
684
+ operand,
685
+ )
686
+
687
+ @classmethod
688
+ def hasReferenceCounting(cls):
689
+ return True
690
+
691
+ @classmethod
692
+ def getReturnFromObjectExpressionCode(
693
+ cls, operand, take_ref=False, check_exception=True
694
+ ):
695
+ if check_exception and not (cls.type_name == "object" and not take_ref):
696
+ r = """if (unlikely(%s == NULL)) { return %s; }\n\n""" % (
697
+ operand,
698
+ cls.getExceptionResultIndicatorValue(),
699
+ )
700
+ else:
701
+ r = ""
702
+
703
+ return r + cls._getReturnFromObjectExpressionCode(
704
+ operand=operand, take_ref=take_ref
705
+ )
706
+
707
+ @classmethod
708
+ def getAssignFromObjectExpressionCode(cls, result, operand, take_ref=False):
709
+ if cls.type_name == "object":
710
+ if take_ref:
711
+ return "Py_INCREF(%s); %s = %s;" % (operand, result, operand)
712
+ else:
713
+ return "%s = %s;" % (result, operand)
714
+ elif cls.isDualType():
715
+ ref_taking = "Py_INCREF(%s); " if take_ref else ""
716
+
717
+ return "%sSET_NILONG_OBJECT_VALUE(%s, %s);" % (ref_taking, result, operand)
718
+ else:
719
+ if take_ref:
720
+ return """%s = %s; """ % (
721
+ result,
722
+ cls.getToValueFromObjectExpression(operand),
723
+ )
724
+ else:
725
+ return """%s = %s; Py_DECREF(%s); """ % (
726
+ result,
727
+ cls.getToValueFromObjectExpression(operand),
728
+ operand,
729
+ )
730
+
731
+ @classmethod
732
+ def _getReturnFromObjectExpressionCode(cls, operand, take_ref):
733
+ if cls.type_name == "object":
734
+ if take_ref:
735
+ return "Py_INCREF(%s); return %s;" % (operand, operand)
736
+ else:
737
+ return "return %s;" % operand
738
+ else:
739
+ if take_ref:
740
+ return """{ %s r = %s; return r; }""" % (
741
+ cls.getTypeDecl(),
742
+ cls.getToValueFromObjectExpression(operand),
743
+ )
744
+ else:
745
+ return """{ %s r = %s; Py_DECREF(%s); return r; }""" % (
746
+ cls.getTypeDecl(),
747
+ cls.getToValueFromObjectExpression(operand),
748
+ operand,
749
+ )
750
+
751
+ @classmethod
752
+ def getReturnFromLongExpressionCode(cls, operand):
753
+ if cls.type_name == "object":
754
+ # Pick one specific.
755
+ # return "return PyInt_FromLong(%s);" % operand
756
+ assert False
757
+ elif cls.type_name == "nbool":
758
+ return "return %s;" % cls.getToValueFromBoolExpression("%s != 0" % operand)
759
+ else:
760
+ assert False, cls
761
+
762
+ @classmethod
763
+ def getAssignFromLongExpressionCode(cls, result, operand):
764
+ if cls.type_name == "object":
765
+ # Need to not use that, but pick one.
766
+ assert False
767
+ elif cls.type_name == "int":
768
+ return "%s = Nuitka_PyInt_FromLong(%s);" % (result, operand)
769
+ elif cls.type_name == "long":
770
+ return "%s = Nuitka_LongFromCLong(%s);" % (result, operand)
771
+ elif cls.type_name == "nbool":
772
+ return "%s = %s;" % (
773
+ result,
774
+ cls.getToValueFromBoolExpression("%s != 0" % operand),
775
+ )
776
+ elif cls.type_name == "nilong":
777
+ return "SET_NILONG_C_VALUE(%s, %s);" % (result, operand)
778
+ else:
779
+ assert False, cls
780
+
781
+ @classmethod
782
+ def getAssignFromBoolExpressionCode(cls, result, operand, give_ref):
783
+ if cls.type_name == "object":
784
+ code = "%s = BOOL_FROM(%s);" % (result, operand)
785
+ if give_ref:
786
+ code += "Py_INCREF_IMMORTAL(%s);" % result
787
+
788
+ return code
789
+ elif cls.type_name == "nbool":
790
+ return "%s = %s;" % (
791
+ result,
792
+ cls.getToValueFromBoolExpression("%s" % operand),
793
+ )
794
+ else:
795
+ assert False, cls
796
+
797
+ @classmethod
798
+ def getReturnFromFloatExpressionCode(cls, operand):
799
+ if cls.type_name == "object":
800
+ return "return MAKE_FLOAT_FROM_DOUBLE(%s);" % operand
801
+ elif cls.type_name == "nbool":
802
+ return "return %s;" % cls.getToValueFromBoolExpression(
803
+ "%s == 0.0" % operand
804
+ )
805
+ elif cls.type_name == "float":
806
+ return "return %s;" % operand
807
+ else:
808
+ assert False, cls
809
+
810
+ @classmethod
811
+ def getAssignFromFloatExpressionCode(cls, result, operand):
812
+ if cls.type_name in ("object", "int", "float"):
813
+ return "%s = MAKE_FLOAT_FROM_DOUBLE(%s);" % (result, operand)
814
+ elif cls.type_name == "nbool":
815
+ return "%s = %s;" % (
816
+ result,
817
+ cls.getToValueFromBoolExpression("%s != 0.0" % operand),
818
+ )
819
+ elif cls.type_name == "float":
820
+ return "%s = %s;" % (result, operand)
821
+ else:
822
+ assert False, cls
823
+
824
+ @classmethod
825
+ def getReturnFromFloatConstantCode(cls, value):
826
+ if cls.type_name == "object":
827
+ const_name = "const_" + namifyConstant(value)
828
+
829
+ return "Py_INCREF(%(const_name)s); return %(const_name)s;" % {
830
+ "const_name": const_name
831
+ }
832
+ elif cls.type_name in ("nbool", "float"):
833
+ return cls.getReturnFromFloatExpressionCode(value)
834
+ else:
835
+ assert False, cls
836
+
837
+ @classmethod
838
+ def getAssignFromFloatConstantCode(cls, result, value):
839
+ if value == "nan":
840
+ value = float(value)
841
+
842
+ if cls.type_name in ("object", "int"):
843
+ # TODO: Type checks for value are needed for "int".
844
+
845
+ const_name = "const_" + namifyConstant(value)
846
+
847
+ return "Py_INCREF(%(const_name)s); %(result)s = %(const_name)s;" % {
848
+ "result": result,
849
+ "const_name": const_name,
850
+ }
851
+ elif cls.type_name in ("nbool", "float"):
852
+ if math.isnan(value):
853
+ value = "Py_NAN"
854
+
855
+ return cls.getAssignFromFloatExpressionCode(result, value)
856
+ else:
857
+ assert False, cls
858
+
859
+ @classmethod
860
+ def getReturnFromIntConstantCode(cls, value):
861
+ if cls.type_name == "object":
862
+ const_name = "const_" + namifyConstant(value)
863
+
864
+ return "Py_INCREF(%(const_name)s); return %(const_name)s;" % {
865
+ "const_name": const_name
866
+ }
867
+ elif cls.type_name in ("nbool", "float"):
868
+ return cls.getReturnFromLongExpressionCode(value)
869
+ else:
870
+ assert False, cls
871
+
872
+ @classmethod
873
+ def getAssignFromIntConstantCode(cls, result, value):
874
+ if cls.type_name in ("object", "int"):
875
+ const_name = "const_" + namifyConstant(value)
876
+
877
+ return "Py_INCREF(%(const_name)s); %(result)s = %(const_name)s;" % {
878
+ "result": result,
879
+ "const_name": const_name,
880
+ }
881
+ elif cls.type_name in ("nbool", "float"):
882
+ return cls.getAssignFromLongExpressionCode(result, value)
883
+ else:
884
+ assert False, (cls, cls.type_name)
885
+
886
+ @classmethod
887
+ def getAssignFromLongConstantCode(cls, result, value):
888
+ if cls.type_name in ("object", "long"):
889
+ if str is bytes:
890
+ # Cannot put "L" in Jinja code for constant value.
891
+ value = long(value)
892
+
893
+ # The only on we surely know right now.
894
+ assert value == 0
895
+
896
+ # TODO: This works for small constants only and only for Python3.
897
+ const_name2 = "const_" + namifyConstant(value)
898
+ const_name3 = "Nuitka_Long_GetSmallValue(%s)" % value
899
+
900
+ assert -5 >= value < 256, value
901
+
902
+ return """\
903
+ #if PYTHON_VERSION < 0x300
904
+ %(result)s = %(const_name2)s;
905
+ #else
906
+ %(result)s = %(const_name3)s;
907
+ #endif
908
+ Py_INCREF(%(result)s);""" % {
909
+ "result": result,
910
+ "const_name2": const_name2,
911
+ "const_name3": const_name3,
912
+ }
913
+ elif cls.type_name in ("nbool", "float"):
914
+ return cls.getAssignFromLongExpressionCode(result, value)
915
+ else:
916
+ assert False, (cls, cls.type_name)
917
+
918
+ @classmethod
919
+ def getAssignConversionCode(cls, result, left, value):
920
+ def _getObjectObject():
921
+ code = "%s = %s;" % (result, value)
922
+ code += cls.getTakeReferenceStatement(result, immortal=False)
923
+
924
+ return code
925
+
926
+ if cls is left:
927
+ return _getObjectObject()
928
+ else:
929
+ if cls.type_name in ("object", "float"):
930
+ if left.type_name in ("int", "float"):
931
+ return _getObjectObject()
932
+ elif left.type_name == "clong":
933
+ return cls.getAssignFromLongExpressionCode(result, value)
934
+ else:
935
+ assert False, left.type_name
936
+ elif cls.type_name == "nbool":
937
+ if left.type_name == "int":
938
+ return "%s = %s;" % (
939
+ result,
940
+ cls.getToValueFromBoolExpression(
941
+ "%s != 0" % left.getAsLongValueExpression(value)
942
+ ),
943
+ )
944
+ elif left.type_name == "float":
945
+ return "%s = %s;" % (
946
+ result,
947
+ cls.getToValueFromBoolExpression(
948
+ "%s != 0.0" % left.getAsDoubleValueExpression(value)
949
+ ),
950
+ )
951
+ else:
952
+ assert False, left.type_name
953
+ else:
954
+ assert False, cls.type_name
955
+
956
+ @classmethod
957
+ def isDualType(cls):
958
+ return False
959
+
960
+ @classmethod
961
+ def isCommutativeType(cls):
962
+ return isCommutativeType(cls.getHelperCodeName())
963
+
964
+
965
+ class ConcreteTypeBase(TypeDescBase):
966
+ type_decl = "PyObject *"
967
+
968
+ def _getSlotValueExpression(self, operand, slot):
969
+ if slot.startswith("nb_"):
970
+ return self.getTypeValueExpression(operand)[1:] + ".tp_as_number->" + slot
971
+ elif slot.startswith("sq_"):
972
+ return self.getTypeValueExpression(operand)[1:] + ".tp_as_sequence->" + slot
973
+ elif slot.startswith("tp_"):
974
+ return self.getTypeValueExpression(operand)[1:] + "." + slot
975
+ else:
976
+ assert False, slot
977
+
978
+ def getCheckValueCode(self, operand):
979
+ return """\
980
+ CHECK_OBJECT(%(operand)s);
981
+ assert(%(type_name)s_CheckExact(%(operand)s));""" % {
982
+ "operand": operand,
983
+ "type_name": self.getTypeValueExpression(operand)[1:].split("_")[0],
984
+ }
985
+
986
+ @abstractmethod
987
+ def getTypeValueExpression(self, operand):
988
+ pass
989
+
990
+ @staticmethod
991
+ def getTakeReferenceStatement(operand, immortal):
992
+ return ""
993
+
994
+
995
+ class ConcreteNonSequenceTypeBase(ConcreteTypeBase):
996
+ """Base class for concrete types that are not sequences."""
997
+
998
+ # Base classes can be abstract, pylint: disable=abstract-method
999
+
1000
+ def getNoSequenceSlotAccessTestCode(self, type_name):
1001
+ """Test if type has no sequence slots at all."""
1002
+ return "true"
1003
+
1004
+
1005
+ class ConcreteSequenceTypeBase(ConcreteTypeBase):
1006
+ """Base class for concrete types that are sequences."""
1007
+
1008
+ # Base classes can be abstract, pylint: disable=abstract-method
1009
+
1010
+ def getNoSequenceSlotAccessTestCode(self, type_name):
1011
+ """Test if type has no sequence slots at all."""
1012
+ return "false"
1013
+
1014
+
1015
+ class IntDesc(ConcreteNonSequenceTypeBase):
1016
+ type_name = "int"
1017
+ type_desc = "Python2 'int'"
1018
+
1019
+ python_requirement = "PYTHON_VERSION < 0x300"
1020
+
1021
+ @classmethod
1022
+ def getTypeValueExpression(cls, operand):
1023
+ return "&PyInt_Type"
1024
+
1025
+ @classmethod
1026
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1027
+ return "1"
1028
+
1029
+ def hasSlot(self, slot):
1030
+ if slot.startswith("nb_inplace"):
1031
+ return False
1032
+ elif slot.startswith("nb_"):
1033
+ return slot != "nb_matrix_multiply"
1034
+ elif slot.startswith("sq_"):
1035
+ return False
1036
+ elif slot == "tp_richcompare":
1037
+ return False
1038
+ elif slot == "tp_compare":
1039
+ return True
1040
+ else:
1041
+ assert False
1042
+
1043
+ @staticmethod
1044
+ def needsIndexConversion():
1045
+ return False
1046
+
1047
+ @staticmethod
1048
+ def getAsLongValueExpression(operand):
1049
+ return "PyInt_AS_LONG(%s)" % operand
1050
+
1051
+ @staticmethod
1052
+ def getAsObjectValueExpression(operand):
1053
+ return operand
1054
+
1055
+ @staticmethod
1056
+ def releaseAsObjectValueStatement(operand):
1057
+ # Virtual method, pylint: disable=unused-argument
1058
+ return ""
1059
+
1060
+
1061
+ int_desc = IntDesc()
1062
+
1063
+
1064
+ class StrDesc(ConcreteSequenceTypeBase):
1065
+ type_name = "str"
1066
+ type_desc = "Python2 'str'"
1067
+
1068
+ python_requirement = "PYTHON_VERSION < 0x300"
1069
+
1070
+ @classmethod
1071
+ def getTypeValueExpression(cls, operand):
1072
+ return "&PyString_Type"
1073
+
1074
+ @classmethod
1075
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1076
+ return "1"
1077
+
1078
+ def hasSlot(self, slot):
1079
+ if slot.startswith("nb_"):
1080
+ return slot == "nb_remainder"
1081
+ elif slot.startswith("sq_"):
1082
+ return "ass" not in slot and "inplace" not in slot
1083
+ elif slot == "tp_richcompare":
1084
+ return True
1085
+ elif slot == "tp_compare":
1086
+ return False
1087
+ else:
1088
+ assert False, (self, slot)
1089
+
1090
+ def hasPreferredSlot(self, right, slot):
1091
+ if slot == "nb_multiply":
1092
+ return right in (int_desc, long_desc)
1093
+
1094
+ return False
1095
+
1096
+
1097
+ str_desc = StrDesc()
1098
+
1099
+
1100
+ class UnicodeDesc(ConcreteSequenceTypeBase):
1101
+ type_name = "unicode"
1102
+ type_desc = "Python2 'unicode', Python3 'str'"
1103
+
1104
+ @classmethod
1105
+ def getTypeName3(cls):
1106
+ return "str"
1107
+
1108
+ @classmethod
1109
+ def getTypeValueExpression(cls, operand):
1110
+ return "&PyUnicode_Type"
1111
+
1112
+ @classmethod
1113
+ def getCheckValueCode(cls, operand):
1114
+ return """\
1115
+ CHECK_OBJECT(%(operand)s);
1116
+ assert(PyUnicode_CheckExact(%(operand)s));""" % {
1117
+ "operand": operand
1118
+ }
1119
+
1120
+ @classmethod
1121
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1122
+ return "1"
1123
+
1124
+ def hasSlot(self, slot):
1125
+ if slot.startswith("nb_"):
1126
+ return slot == "nb_remainder"
1127
+ elif slot.startswith("sq_"):
1128
+ return "ass" not in slot and "inplace" not in slot
1129
+ elif slot == "tp_richcompare":
1130
+ return True
1131
+ elif slot == "tp_compare":
1132
+ return True
1133
+ else:
1134
+ assert False, slot
1135
+
1136
+ def hasPreferredSlot(self, right, slot):
1137
+ # TODO: Same applies to bytearray once we add it.
1138
+ if slot == "sq_concat" and right is str_desc:
1139
+ return True
1140
+
1141
+ if slot == "nb_multiply":
1142
+ return right in (int_desc, long_desc)
1143
+
1144
+ return False
1145
+
1146
+
1147
+ unicode_desc = UnicodeDesc()
1148
+
1149
+
1150
+ class FloatDesc(ConcreteNonSequenceTypeBase):
1151
+ type_name = "float"
1152
+ type_desc = "Python 'float'"
1153
+
1154
+ @classmethod
1155
+ def getTypeValueExpression(cls, operand):
1156
+ return "&PyFloat_Type"
1157
+
1158
+ @staticmethod
1159
+ def getAsDoubleValueExpression(operand):
1160
+ return "PyFloat_AS_DOUBLE(%s)" % operand
1161
+
1162
+ def hasSlot(self, slot):
1163
+ if slot.startswith("nb_inplace"):
1164
+ return False
1165
+ elif slot.startswith("nb_"):
1166
+ return slot != "nb_matrix_multiply"
1167
+ elif slot.startswith("sq_"):
1168
+ return False
1169
+ elif slot == "tp_richcompare":
1170
+ return True
1171
+ elif slot == "tp_compare":
1172
+ return False
1173
+ else:
1174
+ assert False, slot
1175
+
1176
+ @classmethod
1177
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1178
+ return "1"
1179
+
1180
+ def hasPreferredSlot(self, right, slot):
1181
+ if right in (int_desc, long_desc):
1182
+ return True
1183
+
1184
+ return False
1185
+
1186
+
1187
+ float_desc = FloatDesc()
1188
+
1189
+
1190
+ class TupleDesc(ConcreteSequenceTypeBase):
1191
+ type_name = "tuple"
1192
+ type_desc = "Python 'tuple'"
1193
+
1194
+ @classmethod
1195
+ def getTypeValueExpression(cls, operand):
1196
+ return "&PyTuple_Type"
1197
+
1198
+ def hasSlot(self, slot):
1199
+ if slot.startswith("nb_"):
1200
+ return False
1201
+ elif slot.startswith("sq_"):
1202
+ return "ass" not in slot and "inplace" not in slot
1203
+ elif slot == "tp_richcompare":
1204
+ return True
1205
+ elif slot == "tp_compare":
1206
+ return False
1207
+ else:
1208
+ assert False, slot
1209
+
1210
+ @classmethod
1211
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1212
+ return "0"
1213
+
1214
+ def hasPreferredSlot(self, right, slot):
1215
+ if slot == "nb_multiply":
1216
+ return right in (int_desc, long_desc)
1217
+
1218
+ return False
1219
+
1220
+
1221
+ tuple_desc = TupleDesc()
1222
+
1223
+
1224
+ class ListDesc(ConcreteSequenceTypeBase):
1225
+ type_name = "list"
1226
+ type_desc = "Python 'list'"
1227
+
1228
+ @classmethod
1229
+ def getTypeValueExpression(cls, operand):
1230
+ return "&PyList_Type"
1231
+
1232
+ def hasSlot(self, slot):
1233
+ if slot.startswith("nb_"):
1234
+ return False
1235
+ elif slot.startswith("sq_"):
1236
+ return True
1237
+ elif slot == "tp_richcompare":
1238
+ return True
1239
+ elif slot == "tp_compare":
1240
+ return False
1241
+ else:
1242
+ assert False, slot
1243
+
1244
+ @classmethod
1245
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1246
+ return "0"
1247
+
1248
+ def hasPreferredSlot(self, right, slot):
1249
+ if slot == "nb_multiply":
1250
+ return right in (int_desc, long_desc)
1251
+
1252
+ return False
1253
+
1254
+
1255
+ list_desc = ListDesc()
1256
+
1257
+
1258
+ class SetDesc(ConcreteSequenceTypeBase):
1259
+ type_name = "set"
1260
+ type_desc = "Python 'set'"
1261
+
1262
+ @classmethod
1263
+ def getTypeValueExpression(cls, operand):
1264
+ return "&PySet_Type"
1265
+
1266
+ def hasSlot(self, slot):
1267
+ if slot.startswith("nb_inplace_"):
1268
+ return slot in (
1269
+ "nb_inplace_subtract",
1270
+ "nb_inplace_and",
1271
+ "nb_inplace_or",
1272
+ "nb_inplace_xor",
1273
+ )
1274
+ elif slot.startswith("nb_"):
1275
+ return slot in ("nb_subtract", "nb_and", "nb_or", "nb_xor")
1276
+ elif slot.startswith("sq_"):
1277
+ return True
1278
+ else:
1279
+ assert False, slot
1280
+
1281
+ @classmethod
1282
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1283
+ return "0"
1284
+
1285
+
1286
+ set_desc = SetDesc()
1287
+
1288
+
1289
+ class DictDesc(ConcreteSequenceTypeBase):
1290
+ type_name = "dict"
1291
+ type_desc = "Python 'dict'"
1292
+
1293
+ @classmethod
1294
+ def getTypeValueExpression(cls, operand):
1295
+ return "&PyDict_Type"
1296
+
1297
+ def hasSlot(self, slot):
1298
+ if slot.startswith("nb_"):
1299
+ return False
1300
+ elif slot.startswith("sq_"):
1301
+ return True
1302
+ else:
1303
+ assert False, slot
1304
+
1305
+ @classmethod
1306
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1307
+ return "0"
1308
+
1309
+
1310
+ dict_desc = DictDesc()
1311
+
1312
+
1313
+ class BytesDesc(ConcreteSequenceTypeBase):
1314
+ type_name = "bytes"
1315
+ type_desc = "Python3 'bytes'"
1316
+
1317
+ python_requirement = "PYTHON_VERSION >= 0x300"
1318
+
1319
+ @classmethod
1320
+ def getTypeValueExpression(cls, operand):
1321
+ return "&PyBytes_Type"
1322
+
1323
+ def hasSlot(self, slot):
1324
+ if slot.startswith("nb_"):
1325
+ return slot == "nb_remainder"
1326
+ elif slot.startswith("sq_"):
1327
+ return "ass" not in slot and slot != "sq_slice" and "inplace" not in slot
1328
+ elif slot == "tp_richcompare":
1329
+ return True
1330
+ elif slot == "tp_compare":
1331
+ return False
1332
+ else:
1333
+ assert False, slot
1334
+
1335
+ @classmethod
1336
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1337
+ return "0"
1338
+
1339
+ def hasPreferredSlot(self, right, slot):
1340
+ if slot == "nb_multiply":
1341
+ return right in (int_desc, long_desc)
1342
+
1343
+ return False
1344
+
1345
+
1346
+ bytes_desc = BytesDesc()
1347
+
1348
+
1349
+ class LongDesc(ConcreteNonSequenceTypeBase):
1350
+ type_name = "long"
1351
+ type_desc = "Python2 'long', Python3 'int'"
1352
+
1353
+ @classmethod
1354
+ def getTypeName3(cls):
1355
+ return "int"
1356
+
1357
+ @classmethod
1358
+ def getTypeValueExpression(cls, operand):
1359
+ return "&PyLong_Type"
1360
+
1361
+ def hasSlot(self, slot):
1362
+ if slot.startswith("nb_inplace_"):
1363
+ return False
1364
+ elif slot.startswith("nb_"):
1365
+ return slot != "nb_matrix_multiply"
1366
+ elif slot.startswith("sq_"):
1367
+ return False
1368
+ elif slot == "tp_richcompare":
1369
+ assert False
1370
+ # For Python3 it's there though
1371
+ return False
1372
+ elif slot == "tp_compare":
1373
+ # For Python2 it's tp_compare though
1374
+ return True
1375
+ else:
1376
+ assert False, slot
1377
+
1378
+ def getSlotValueExpression(self, operand, slot):
1379
+ # Python2 long does have "tp_compare", Python3 does have "tp_richcompare",
1380
+ # therefore create code that makes this a conditional expression on the
1381
+ # Python version
1382
+ if slot == "tp_richcompare":
1383
+ return "(PYTHON_VERSION < 0x300 ? NULL : PyLong_Type.tp_richcompare)"
1384
+
1385
+ return ConcreteTypeBase.getSlotValueExpression(self, operand=operand, slot=slot)
1386
+
1387
+ @classmethod
1388
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1389
+ return "1"
1390
+
1391
+ @staticmethod
1392
+ def needsIndexConversion():
1393
+ return False
1394
+
1395
+ def hasPreferredSlot(self, right, slot):
1396
+ if right is int_desc:
1397
+ return True
1398
+
1399
+ return False
1400
+
1401
+ @staticmethod
1402
+ def getLongValueSizeExpression(operand):
1403
+ return "Nuitka_LongGetSignedDigitSize(%s_long_object)" % operand
1404
+
1405
+ @staticmethod
1406
+ def getLongValueIsNegativeTestExpression(operand):
1407
+ return "Nuitka_LongIsNegative(%s_long_object)" % operand
1408
+
1409
+ @staticmethod
1410
+ def getLongValueDigitCountExpression(operand):
1411
+ return "Nuitka_LongGetDigitSize(%s_long_object)" % operand
1412
+
1413
+ @staticmethod
1414
+ def getLongValueDigitExpression(operand, index):
1415
+ return "Nuitka_LongGetDigitPointer(%s_long_object)[%s]" % (operand, index)
1416
+
1417
+ @staticmethod
1418
+ def getLongValueDigitsPointerExpression(operand):
1419
+ return "Nuitka_LongGetDigitPointer(%s_long_object)" % operand
1420
+
1421
+ @staticmethod
1422
+ def getLongValueMediumValueExpression(operand):
1423
+ return "MEDIUM_VALUE(%s_long_object)" % (operand)
1424
+
1425
+
1426
+ long_desc = LongDesc()
1427
+
1428
+
1429
+ class ObjectDesc(TypeDescBase):
1430
+ type_name = "object"
1431
+ type_desc = "any Python object"
1432
+ type_decl = "PyObject *"
1433
+
1434
+ def hasSlot(self, slot):
1435
+ # Don't want to get asked, we cannot know.
1436
+ assert False
1437
+
1438
+ def getIndexCheckExpression(self, operand):
1439
+ return "Nuitka_Index_Check(%s)" % operand
1440
+
1441
+ def getNewStyleNumberTypeCheckExpression(self, operand):
1442
+ return "NEW_STYLE_NUMBER_TYPE(%s)" % operand
1443
+
1444
+ def getSlotValueExpression(self, operand, slot):
1445
+ # Always check.
1446
+ return self._getSlotValueExpression(operand, slot)
1447
+
1448
+ def getSlotValueCheckExpression(self, operand, slot):
1449
+ return "(%s) != NULL" % self._getSlotValueExpression(operand, slot)
1450
+
1451
+ @staticmethod
1452
+ def getToValueFromBoolExpression(operand):
1453
+ return "BOOL_FROM(%s)" % operand
1454
+
1455
+ @staticmethod
1456
+ def getToValueFromObjectExpression(operand):
1457
+ return operand
1458
+
1459
+ @staticmethod
1460
+ def getExceptionResultIndicatorValue():
1461
+ return "NULL"
1462
+
1463
+ def getNoSequenceSlotAccessTestCode(self, type_name):
1464
+ return "%s->tp_as_sequence == NULL" % type_name
1465
+
1466
+ @classmethod
1467
+ def getDualValidityCheckCode(cls, value_choice, operand):
1468
+ # Virtual method, pylint: disable=unused-argument
1469
+ assert value_choice == "C", value_choice
1470
+ return "false"
1471
+
1472
+
1473
+ object_desc = ObjectDesc()
1474
+
1475
+
1476
+ class ConcreteCTypeBase(TypeDescBase):
1477
+ """Base class for non-Python (C) concrete types."""
1478
+
1479
+ def hasSlot(self, slot):
1480
+ return False
1481
+
1482
+ def getNoSequenceSlotAccessTestCode(self, type_name):
1483
+ assert False, self
1484
+
1485
+ def getNewStyleNumberTypeCheckExpression(self, operand):
1486
+ # We don't have that.
1487
+ assert False, self
1488
+
1489
+ @classmethod
1490
+ def hasReferenceCounting(cls):
1491
+ return False
1492
+
1493
+ @staticmethod
1494
+ def hasPreferredSlot(right, slot):
1495
+ return False
1496
+
1497
+ @classmethod
1498
+ def isDualType(cls):
1499
+ return False
1500
+
1501
+ @classmethod
1502
+ def getDualValidityCheckCode(cls, value_choice, operand):
1503
+ # Virtual method, pylint: disable=unused-argument
1504
+ assert value_choice == "C", value_choice
1505
+ return "true"
1506
+
1507
+ def getDualType(self, value_choice):
1508
+ assert value_choice == "C", value_choice
1509
+ return self
1510
+
1511
+ @classmethod
1512
+ def getDualTypeAccessCode(cls, value_choice, operand):
1513
+ assert value_choice == "C", (value_choice, cls)
1514
+ return operand
1515
+
1516
+
1517
+ class CLongDesc(ConcreteCTypeBase):
1518
+ type_name = "clong"
1519
+ type_desc = "C platform long value"
1520
+ type_decl = "long"
1521
+
1522
+ @classmethod
1523
+ def getCheckValueCode(cls, operand):
1524
+ return ""
1525
+
1526
+ @classmethod
1527
+ def getTypeValueExpression(cls, operand):
1528
+ return "NULL"
1529
+
1530
+ @classmethod
1531
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1532
+ return "0"
1533
+
1534
+ @staticmethod
1535
+ def getAsLongValueExpression(operand):
1536
+ return operand
1537
+
1538
+ @staticmethod
1539
+ def getAsObjectValueExpression(operand):
1540
+ return "Nuitka_PyLong_FromLong(%s)" % operand
1541
+
1542
+ @staticmethod
1543
+ def releaseAsObjectValueStatement(operand):
1544
+ return "Py_DECREF(%s);" % operand
1545
+
1546
+ @staticmethod
1547
+ def getLongValueSizeExpression(operand):
1548
+ return "%s_size" % operand
1549
+
1550
+ @staticmethod
1551
+ def getLongValueIsNegativeTestExpression(operand):
1552
+ return "%s_is_negative" % operand
1553
+
1554
+ @staticmethod
1555
+ def getLongValueDigitCountExpression(operand):
1556
+ return "%s_digit_count" % operand
1557
+
1558
+ @staticmethod
1559
+ def getLongValueDigitExpression(operand, index):
1560
+ return "%s_digits[%s]" % (operand, index)
1561
+
1562
+ @staticmethod
1563
+ def getLongValueDigitsPointerExpression(operand):
1564
+ return "%s_digits" % operand
1565
+
1566
+ @staticmethod
1567
+ def getLongValueMediumValueExpression(operand):
1568
+ # spell-checker: disable=sdigit
1569
+ return "(sdigit)%s" % (operand)
1570
+
1571
+
1572
+ c_long_desc = CLongDesc()
1573
+
1574
+
1575
+ class CDigitDesc(CLongDesc):
1576
+ type_name = "digit"
1577
+ type_desc = "C platform digit value for long Python objects"
1578
+ type_decl = "long"
1579
+
1580
+ @classmethod
1581
+ def getCheckValueCode(cls, operand):
1582
+ return "assert(Py_ABS(%s) < (1 << PyLong_SHIFT));" % operand
1583
+
1584
+ @staticmethod
1585
+ def getAsLongValueExpression(operand):
1586
+ return "(long)(%s)" % operand
1587
+
1588
+ @staticmethod
1589
+ def getLongValueDigitCountExpression(operand):
1590
+ # Can be 0 or 1.
1591
+ return "(%s == 0 ? 0 : 1)" % operand
1592
+
1593
+ @staticmethod
1594
+ def getLongValueSizeExpression(operand):
1595
+ return (
1596
+ "(Py_ssize_t)((%(operand)s == 0) ? 0 : ((%(operand)s < 0 ) ? -1 : 1))"
1597
+ % {"operand": operand}
1598
+ )
1599
+
1600
+ @staticmethod
1601
+ def getLongValueIsNegativeTestExpression(operand):
1602
+ return "%s < 0" % operand
1603
+
1604
+ @staticmethod
1605
+ def getLongValueDigitExpression(operand, index):
1606
+ return "(digit)Py_ABS(%s)" % operand
1607
+
1608
+ @staticmethod
1609
+ def getLongValueDigitsPointerExpression(operand):
1610
+ return "(digit *)&%s" % operand
1611
+
1612
+
1613
+ c_digit_desc = CDigitDesc()
1614
+
1615
+
1616
+ class CBoolDesc(ConcreteCTypeBase):
1617
+ type_name = "cbool"
1618
+ type_desc = "C platform bool value"
1619
+ type_decl = "bool"
1620
+
1621
+ @classmethod
1622
+ def getCheckValueCode(cls, operand):
1623
+ return ""
1624
+
1625
+ @classmethod
1626
+ def getTypeValueExpression(cls, operand):
1627
+ return "NULL"
1628
+
1629
+ @classmethod
1630
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1631
+ return "0"
1632
+
1633
+ @staticmethod
1634
+ def getAsLongValueExpression(operand):
1635
+ return operand
1636
+
1637
+ @staticmethod
1638
+ def getAsObjectValueExpression(operand):
1639
+ return "BOOL_FROM(%s)" % operand
1640
+
1641
+ @staticmethod
1642
+ def getToValueFromBoolExpression(operand):
1643
+ return operand
1644
+
1645
+ @staticmethod
1646
+ def getToValueFromObjectExpression(operand):
1647
+ return "CHECK_IF_TRUE(%s) == 1" % operand
1648
+
1649
+ @staticmethod
1650
+ def getTakeReferenceStatement(operand, immortal):
1651
+ return ""
1652
+
1653
+ @staticmethod
1654
+ def getExceptionResultIndicatorValue():
1655
+ return "false"
1656
+
1657
+
1658
+ c_bool_desc = CBoolDesc()
1659
+
1660
+
1661
+ class NBoolDesc(ConcreteCTypeBase):
1662
+ type_name = "nbool"
1663
+ type_desc = "Nuitka C bool value"
1664
+ type_decl = "nuitka_bool"
1665
+
1666
+ @classmethod
1667
+ def getCheckValueCode(cls, operand):
1668
+ return ""
1669
+
1670
+ @classmethod
1671
+ def getTypeValueExpression(cls, operand):
1672
+ return "NULL"
1673
+
1674
+ @classmethod
1675
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1676
+ return "0"
1677
+
1678
+ @staticmethod
1679
+ def getAsLongValueExpression(operand):
1680
+ return operand
1681
+
1682
+ @staticmethod
1683
+ def getAsObjectValueExpression(operand):
1684
+ return "BOOL_FROM(%s)" % operand
1685
+
1686
+ @staticmethod
1687
+ def getToValueFromBoolExpression(operand):
1688
+ return "%s ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE" % operand
1689
+
1690
+ @classmethod
1691
+ def getToValueFromObjectExpression(cls, operand):
1692
+ # TODO: Seems wrong, int return values only happen to match nuitka_bool here
1693
+ return cls.getToValueFromBoolExpression("CHECK_IF_TRUE(%s)" % operand)
1694
+
1695
+ @staticmethod
1696
+ def getTakeReferenceStatement(operand, immortal):
1697
+ return ""
1698
+
1699
+ @staticmethod
1700
+ def getExceptionResultIndicatorValue():
1701
+ return "NUITKA_BOOL_EXCEPTION"
1702
+
1703
+
1704
+ n_bool_desc = NBoolDesc()
1705
+
1706
+
1707
+ class DualTypeBase(ConcreteCTypeBase):
1708
+ @classmethod
1709
+ def getDualValidityCheckCode(cls, value_choice, operand):
1710
+ if value_choice == "C":
1711
+ helper = "IS_%s_C_VALUE_VALID" % cls.type_name.upper()
1712
+ elif value_choice == "Python":
1713
+ helper = "IS_%s_OBJECT_VALUE_VALID" % cls.type_name.upper()
1714
+ else:
1715
+ assert False
1716
+
1717
+ return "%s(%s)" % (helper, operand)
1718
+
1719
+ @classmethod
1720
+ def getDualType(cls, value_choice):
1721
+ if value_choice == "C":
1722
+ return cls.type_dual_types[1]
1723
+ elif value_choice == "Python":
1724
+ return cls.type_dual_types[0]
1725
+ else:
1726
+ assert False
1727
+
1728
+ @classmethod
1729
+ def getDualTypeAccessCode(cls, value_choice, operand):
1730
+ if value_choice == "C":
1731
+ return "%s->c_value" % operand
1732
+ elif value_choice == "Python":
1733
+ return "%s->python_value" % operand
1734
+ else:
1735
+ assert False
1736
+
1737
+ @classmethod
1738
+ def getSetDualValueCode(cls, value_choice, target, value):
1739
+ if value_choice == "C":
1740
+ helper = "SET_%s_C_VALUE" % cls.type_name.upper()
1741
+ elif value_choice == "Python":
1742
+ helper = "SET_%s_OBJECT_VALUE" % cls.type_name.upper()
1743
+ else:
1744
+ assert False
1745
+
1746
+ return "%s(%s, %s);" % (helper, target, value)
1747
+
1748
+ @classmethod
1749
+ def isDualType(cls):
1750
+ return True
1751
+
1752
+ @classmethod
1753
+ def getDualTypeEnsurePythonObjectCode(cls, operand):
1754
+ return "ENFORCE_%s_OBJECT_VALUE(%s);" % (cls.type_name.upper(), operand)
1755
+
1756
+
1757
+ class NILongDesc(DualTypeBase):
1758
+ type_name = "nilong"
1759
+ type_desc = "Nuitka int/long/C long value"
1760
+ type_decl = "nuitka_ilong *"
1761
+
1762
+ type_dual_types = long_desc, c_long_desc
1763
+
1764
+ @classmethod
1765
+ def getCheckValueCode(cls, operand):
1766
+ return "CHECK_NILONG_OBJECT(%s);" % operand
1767
+
1768
+ @classmethod
1769
+ def getTypeValueExpression(cls, operand):
1770
+ assert False
1771
+ return "NULL"
1772
+
1773
+ @classmethod
1774
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1775
+ return "0"
1776
+
1777
+ @staticmethod
1778
+ def getAsLongValueExpression(operand):
1779
+ return "GET_NILONG_C_VALUE(%s)" % operand
1780
+
1781
+ @staticmethod
1782
+ def getAsObjectValueExpression(operand):
1783
+ return "GET_NILONG_OBJECT_VALUE(%s)" % operand
1784
+
1785
+ @staticmethod
1786
+ def getToValueFromBoolExpression(operand):
1787
+ assert False
1788
+ return "%s ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE" % operand
1789
+
1790
+ @classmethod
1791
+ def getToValueFromObjectExpression(cls, operand):
1792
+ # TODO: Seems wrong, int return values only happen to match nuitka_bool here
1793
+ return cls.getToValueFromBoolExpression("CHECK_IF_TRUE(%s)" % operand)
1794
+
1795
+ @staticmethod
1796
+ def getTakeReferenceStatement(operand, immortal):
1797
+ assert False
1798
+ return ""
1799
+
1800
+ @staticmethod
1801
+ def getExceptionResultIndicatorValue():
1802
+ assert False
1803
+ return "NUITKA_BOOL_EXCEPTION"
1804
+
1805
+
1806
+ n_ilong_desc = NILongDesc()
1807
+
1808
+
1809
+ class NVoidDesc(ConcreteCTypeBase):
1810
+ type_name = "nvoid"
1811
+ type_desc = "Nuitka C void value"
1812
+ type_decl = "nuitka_void"
1813
+
1814
+ @classmethod
1815
+ def getCheckValueCode(cls, operand):
1816
+ return ""
1817
+
1818
+ @classmethod
1819
+ def getTypeValueExpression(cls, operand):
1820
+ return "NULL"
1821
+
1822
+ @classmethod
1823
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1824
+ return "0"
1825
+
1826
+ @staticmethod
1827
+ def getAsLongValueExpression(operand):
1828
+ assert False
1829
+
1830
+ return operand
1831
+
1832
+ @staticmethod
1833
+ def getAsObjectValueExpression(operand):
1834
+ assert False
1835
+
1836
+ return "BOOL_FROM(%s)" % operand
1837
+
1838
+ @staticmethod
1839
+ def getToValueFromBoolExpression(operand):
1840
+ # All values are the same, pylint: disable=unused-argument
1841
+ return "NUITKA_VOID_OK"
1842
+
1843
+ @classmethod
1844
+ def getToValueFromObjectExpression(cls, operand):
1845
+ # All values are the same, pylint: disable=unused-argument
1846
+ return "NUITKA_VOID_OK"
1847
+
1848
+ @staticmethod
1849
+ def getTakeReferenceStatement(operand, immortal):
1850
+ return ""
1851
+
1852
+ @staticmethod
1853
+ def getExceptionResultIndicatorValue():
1854
+ return "NUITKA_VOID_EXCEPTION"
1855
+
1856
+
1857
+ nvoid_desc = NVoidDesc()
1858
+
1859
+
1860
+ class CFloatDesc(ConcreteCTypeBase):
1861
+ type_name = "cfloat"
1862
+ type_desc = "C platform float value"
1863
+ type_decl = "double"
1864
+
1865
+ @classmethod
1866
+ def getCheckValueCode(cls, operand):
1867
+ return ""
1868
+
1869
+ @classmethod
1870
+ def getTypeValueExpression(cls, operand):
1871
+ return "NULL"
1872
+
1873
+ @classmethod
1874
+ def getNewStyleNumberTypeCheckExpression(cls, operand):
1875
+ return "0"
1876
+
1877
+ @staticmethod
1878
+ def getAsLongValueExpression(operand):
1879
+ return operand
1880
+
1881
+ @staticmethod
1882
+ def getAsDoubleValueExpression(operand):
1883
+ return operand
1884
+
1885
+ @staticmethod
1886
+ def getAsObjectValueExpression(operand):
1887
+ return "MAKE_FLOAT_FROM_DOUBLE(%s)" % operand
1888
+
1889
+ @staticmethod
1890
+ def releaseAsObjectValueStatement(operand):
1891
+ return "Py_DECREF(%s);" % operand
1892
+
1893
+
1894
+ c_float_desc = CFloatDesc()
1895
+
1896
+
1897
+ related_types = {}
1898
+
1899
+
1900
+ def _addRelatedTypes(type_desc_1, type_desc_2):
1901
+ if type_desc_1 not in related_types:
1902
+ related_types[type_desc_1] = set()
1903
+ if type_desc_2 not in related_types:
1904
+ related_types[type_desc_2] = set()
1905
+
1906
+ related_types[type_desc_1].add(type_desc_2)
1907
+ related_types[type_desc_2].add(type_desc_1)
1908
+
1909
+
1910
+ _addRelatedTypes(int_desc, c_long_desc)
1911
+ _addRelatedTypes(long_desc, c_digit_desc)
1912
+ _addRelatedTypes(long_desc, c_long_desc)
1913
+ _addRelatedTypes(float_desc, c_float_desc)
1914
+
1915
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
1916
+ # integrates with CPython, but also works on its own.
1917
+ #
1918
+ # Licensed under the Apache License, Version 2.0 (the "License");
1919
+ # you may not use this file except in compliance with the License.
1920
+ # You may obtain a copy of the License at
1921
+ #
1922
+ # http://www.apache.org/licenses/LICENSE-2.0
1923
+ #
1924
+ # Unless required by applicable law or agreed to in writing, software
1925
+ # distributed under the License is distributed on an "AS IS" BASIS,
1926
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1927
+ # See the License for the specific language governing permissions and
1928
+ # limitations under the License.