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,1487 @@
1
+ // Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /** Providing access to the constants binary blob.
4
+ *
5
+ * There are multiple ways, the constants binary is accessed, and its
6
+ * definition depends on how that is done.
7
+ *
8
+ * This deals with loading the resource from a DLL under Windows.
9
+ *
10
+ */
11
+
12
+ // This file is included from another C file, help IDEs to still parse it on
13
+ // its own.
14
+ #ifdef __IDE_ONLY__
15
+ #include "nuitka/prelude.h"
16
+ #endif
17
+
18
+ #if _NUITKA_EXPERIMENTAL_WRITEABLE_CONSTANTS
19
+ #define CONST_CONSTANT
20
+ #else
21
+ #define CONST_CONSTANT const
22
+ #endif
23
+
24
+ #if defined(_NUITKA_CONSTANTS_FROM_LINKER)
25
+ // Symbol as provided by the linker, different for C++ and C11 mode.
26
+ #ifdef __cplusplus
27
+ extern "C" CONST_CONSTANT unsigned char constant_bin_data[];
28
+ #else
29
+ extern CONST_CONSTANT unsigned char constant_bin_data[0];
30
+ #endif
31
+
32
+ unsigned char const *constant_bin = &constant_bin_data[0];
33
+
34
+ #elif defined(_NUITKA_CONSTANTS_FROM_CODE)
35
+ #ifdef __cplusplus
36
+ extern "C" CONST_CONSTANT unsigned char constant_bin_data[];
37
+ #else
38
+ extern CONST_CONSTANT unsigned char constant_bin_data[];
39
+ #endif
40
+
41
+ unsigned char const *constant_bin = &constant_bin_data[0];
42
+ #else
43
+ // Symbol to be assigned locally.
44
+ unsigned char const *constant_bin = NULL;
45
+ #endif
46
+
47
+ #if defined(_NUITKA_CONSTANTS_FROM_INCBIN)
48
+ extern unsigned const char *getConstantsBlobData(void);
49
+ #endif
50
+
51
+ #if PYTHON_VERSION < 0x300
52
+ static PyObject *int_cache = NULL;
53
+ #endif
54
+
55
+ static PyObject *long_cache = NULL;
56
+
57
+ static PyObject *float_cache = NULL;
58
+
59
+ #if PYTHON_VERSION >= 0x300
60
+ static PyObject *bytes_cache = NULL;
61
+ #endif
62
+
63
+ #if PYTHON_VERSION < 0x300
64
+ static PyObject *unicode_cache = NULL;
65
+ #endif
66
+
67
+ static PyObject *tuple_cache = NULL;
68
+
69
+ static PyObject *list_cache = NULL;
70
+
71
+ static PyObject *dict_cache = NULL;
72
+
73
+ static PyObject *set_cache = NULL;
74
+
75
+ static PyObject *frozenset_cache = NULL;
76
+
77
+ // Use our own non-random hash for some of the things to be fast. This is inspired
78
+ // from the original Python2 hash func, but we are mostly using it on pointer values
79
+ static Py_hash_t Nuitka_FastHashBytes(const void *value, Py_ssize_t size) {
80
+ if (unlikely(size == 0)) {
81
+ return 0;
82
+ }
83
+
84
+ unsigned char *w = (unsigned char *)value;
85
+ long x = *w << 7;
86
+
87
+ while (--size >= 0) {
88
+ x = (1000003 * x) ^ *w++;
89
+ }
90
+
91
+ x ^= size;
92
+
93
+ // The value -1 is reserved for errors.
94
+ if (x == -1) {
95
+ x = -2;
96
+ }
97
+
98
+ return x;
99
+ }
100
+
101
+ static Py_hash_t our_list_hash(PyListObject *list) {
102
+ return Nuitka_FastHashBytes(&list->ob_item[0], Py_SIZE(list) * sizeof(PyObject *));
103
+ }
104
+
105
+ static PyObject *our_list_tp_richcompare(PyListObject *list1, PyListObject *list2, int op) {
106
+ assert(op == Py_EQ);
107
+
108
+ PyObject *result;
109
+
110
+ if (list1 == list2) {
111
+ result = Py_True;
112
+ } else if (Py_SIZE(list1) != Py_SIZE(list2)) {
113
+ result = Py_False;
114
+ } else if (memcmp(&list1->ob_item[0], &list2->ob_item[0], Py_SIZE(list1) * sizeof(PyObject *)) == 0) {
115
+ result = Py_True;
116
+ } else {
117
+ result = Py_False;
118
+ }
119
+
120
+ Py_INCREF_IMMORTAL(result);
121
+ return result;
122
+ }
123
+
124
+ static Py_hash_t our_tuple_hash(PyTupleObject *tuple) {
125
+ return Nuitka_FastHashBytes(&tuple->ob_item[0], Py_SIZE(tuple) * sizeof(PyObject *));
126
+ }
127
+
128
+ static PyObject *our_tuple_tp_richcompare(PyTupleObject *tuple1, PyTupleObject *tuple2, int op) {
129
+ assert(op == Py_EQ);
130
+
131
+ PyObject *result;
132
+
133
+ if (tuple1 == tuple2) {
134
+ result = Py_True;
135
+ } else if (Py_SIZE(tuple1) != Py_SIZE(tuple2)) {
136
+ result = Py_False;
137
+ } else if (memcmp(&tuple1->ob_item[0], &tuple2->ob_item[0], Py_SIZE(tuple1) * sizeof(PyObject *)) == 0) {
138
+ result = Py_True;
139
+ } else {
140
+ result = Py_False;
141
+ }
142
+
143
+ Py_INCREF_IMMORTAL(result);
144
+ return result;
145
+ }
146
+
147
+ static Py_hash_t our_set_hash(PyObject *set) {
148
+ Py_hash_t result = 0;
149
+ PyObject *key;
150
+ Py_ssize_t pos = 0;
151
+
152
+ #if PYTHON_VERSION < 0x300
153
+ // Same sized set, simply check if values are identical. Other reductions should
154
+ // make it identical, or else this won't have the effect intended.
155
+ while (_PySet_Next(set, &pos, &key)) {
156
+ result *= 1000003;
157
+ result ^= Nuitka_FastHashBytes(&key, sizeof(PyObject *));
158
+ }
159
+ #else
160
+ Py_hash_t unused;
161
+
162
+ while (_PySet_NextEntry(set, &pos, &key, &unused)) {
163
+ result *= 1000003;
164
+ result ^= Nuitka_FastHashBytes(&key, sizeof(PyObject *));
165
+ }
166
+ #endif
167
+
168
+ return result;
169
+ }
170
+
171
+ static PyObject *our_set_tp_richcompare(PyObject *set1, PyObject *set2, int op) {
172
+ assert(op == Py_EQ);
173
+
174
+ PyObject *result;
175
+
176
+ Py_ssize_t pos1 = 0, pos2 = 0;
177
+ PyObject *key1, *key2;
178
+
179
+ if (Py_SIZE(set1) != Py_SIZE(set2)) {
180
+ result = Py_False;
181
+ } else {
182
+ result = Py_True;
183
+
184
+ #if PYTHON_VERSION < 0x300
185
+ // Same sized set, simply check if values are identical. Other reductions should
186
+ // make it identical, or else this won't have the effect intended.
187
+ while (_PySet_Next(set1, &pos1, &key1)) {
188
+ {
189
+ NUITKA_MAY_BE_UNUSED int res = _PySet_Next(set2, &pos2, &key2);
190
+ assert(res != 0);
191
+ }
192
+
193
+ if (key1 != key2) {
194
+ result = Py_False;
195
+ break;
196
+ }
197
+ }
198
+ #else
199
+ Py_hash_t unused1, unused2;
200
+
201
+ // Same sized dictionary, simply check if values are identical. Other reductions should
202
+ // make it identical, or else this won't have the effect intended.
203
+ while (_PySet_NextEntry(set1, &pos1, &key1, &unused1)) {
204
+ {
205
+ NUITKA_MAY_BE_UNUSED int res = _PySet_NextEntry(set2, &pos2, &key2, &unused2);
206
+ assert(res != 0);
207
+ }
208
+
209
+ if (key1 != key2) {
210
+ result = Py_False;
211
+ break;
212
+ }
213
+ }
214
+ #endif
215
+ }
216
+
217
+ Py_INCREF_IMMORTAL(result);
218
+ return result;
219
+ }
220
+
221
+ static PyObject *our_float_tp_richcompare(PyFloatObject *a, PyFloatObject *b, int op) {
222
+ assert(op == Py_EQ);
223
+
224
+ PyObject *result;
225
+
226
+ // Avoid the C math when comparing, for it makes too many values equal or unequal.
227
+ if (memcmp(&a->ob_fval, &b->ob_fval, sizeof(b->ob_fval)) == 0) {
228
+ result = Py_True;
229
+ } else {
230
+ result = Py_False;
231
+ }
232
+
233
+ Py_INCREF_IMMORTAL(result);
234
+ return result;
235
+ }
236
+
237
+ static Py_hash_t our_dict_hash(PyObject *dict) {
238
+ Py_hash_t result = 0;
239
+
240
+ Py_ssize_t pos = 0;
241
+ PyObject *key, *value;
242
+
243
+ while (Nuitka_DictNext(dict, &pos, &key, &value)) {
244
+ result *= 1000003;
245
+ result ^= Nuitka_FastHashBytes(&key, sizeof(PyObject *));
246
+ result *= 1000003;
247
+ result ^= Nuitka_FastHashBytes(&value, sizeof(PyObject *));
248
+ }
249
+
250
+ return result;
251
+ }
252
+
253
+ static PyObject *our_dict_tp_richcompare(PyObject *a, PyObject *b, int op) {
254
+ PyObject *result;
255
+
256
+ if (Py_SIZE(a) != Py_SIZE(b)) {
257
+ result = Py_False;
258
+ } else {
259
+ result = Py_True;
260
+
261
+ Py_ssize_t pos1 = 0, pos2 = 0;
262
+ PyObject *key1, *value1;
263
+ PyObject *key2, *value2;
264
+
265
+ // Same sized dictionary, simply check if key and values are identical.
266
+ // Other reductions should make it identical, or else this won't have the
267
+ // effect intended.
268
+ while (Nuitka_DictNext(a, &pos1, &key1, &value1)) {
269
+ {
270
+ NUITKA_MAY_BE_UNUSED int res = Nuitka_DictNext(b, &pos2, &key2, &value2);
271
+ assert(res != 0);
272
+ }
273
+
274
+ if (key1 != key2 || value1 != value2) {
275
+ result = Py_False;
276
+ break;
277
+ }
278
+ }
279
+ }
280
+
281
+ Py_INCREF_IMMORTAL(result);
282
+ return result;
283
+ }
284
+
285
+ // For creation of small long singleton long values as required by Python3.
286
+ #if PYTHON_VERSION < 0x3b0
287
+ #if PYTHON_VERSION >= 0x390
288
+ PyObject **Nuitka_Long_SmallValues;
289
+ #elif PYTHON_VERSION >= 0x300
290
+ PyObject *Nuitka_Long_SmallValues[NUITKA_STATIC_SMALLINT_VALUE_MAX - NUITKA_STATIC_SMALLINT_VALUE_MIN + 1];
291
+ #endif
292
+ #endif
293
+
294
+ static void initCaches(void) {
295
+ static bool init_done = false;
296
+ if (init_done == true) {
297
+ return;
298
+ }
299
+
300
+ #if PYTHON_VERSION < 0x300
301
+ int_cache = PyDict_New();
302
+ #endif
303
+
304
+ long_cache = PyDict_New();
305
+
306
+ float_cache = PyDict_New();
307
+
308
+ #if PYTHON_VERSION >= 0x300
309
+ bytes_cache = PyDict_New();
310
+ #endif
311
+
312
+ #if PYTHON_VERSION < 0x300
313
+ unicode_cache = PyDict_New();
314
+ #endif
315
+
316
+ tuple_cache = PyDict_New();
317
+
318
+ list_cache = PyDict_New();
319
+
320
+ dict_cache = PyDict_New();
321
+
322
+ set_cache = PyDict_New();
323
+
324
+ frozenset_cache = PyDict_New();
325
+
326
+ #if PYTHON_VERSION < 0x3b0
327
+ #if PYTHON_VERSION >= 0x390
328
+ // On Python3.9+ these are exposed in the interpreter.
329
+ Nuitka_Long_SmallValues = (PyObject **)_PyInterpreterState_GET()->small_ints;
330
+ #elif PYTHON_VERSION >= 0x300
331
+ for (long i = NUITKA_STATIC_SMALLINT_VALUE_MIN; i < NUITKA_STATIC_SMALLINT_VALUE_MAX; i++) {
332
+ // Have to use the original API here since out "Nuitka_PyLong_FromLong"
333
+ // would insist on using "Nuitka_Long_SmallValues" to produce it.
334
+ PyObject *value = PyLong_FromLong(i);
335
+ Nuitka_Long_SmallValues[NUITKA_TO_SMALL_VALUE_OFFSET(i)] = value;
336
+ }
337
+ #endif
338
+ #endif
339
+
340
+ init_done = true;
341
+ }
342
+
343
+ static void insertToDictCache(PyObject *dict, PyObject **value) {
344
+ PyObject *item = PyDict_GetItem(dict, *value);
345
+
346
+ if (item != NULL) {
347
+ *value = item;
348
+ } else {
349
+ PyDict_SetItem(dict, *value, *value);
350
+ }
351
+ }
352
+
353
+ static void insertToDictCacheForcedHash(PyObject *dict, PyObject **value, hashfunc tp_hash,
354
+ richcmpfunc tp_richcompare) {
355
+ hashfunc old_hash = Py_TYPE(*value)->tp_hash;
356
+ richcmpfunc old_richcmpfunc = Py_TYPE(*value)->tp_richcompare;
357
+
358
+ // Hash is optional, e.g. for floats we can spare us doing our own hash,
359
+ // but we do equality
360
+ if (tp_hash != NULL) {
361
+ Py_TYPE(*value)->tp_hash = tp_hash;
362
+ }
363
+ Py_TYPE(*value)->tp_richcompare = tp_richcompare;
364
+
365
+ insertToDictCache(dict, value);
366
+
367
+ Py_TYPE(*value)->tp_hash = old_hash;
368
+ Py_TYPE(*value)->tp_richcompare = old_richcmpfunc;
369
+ }
370
+
371
+ static uint16_t unpackValueUint16(unsigned char const **data) {
372
+ uint16_t value;
373
+
374
+ memcpy(&value, *data, sizeof(value));
375
+
376
+ assert(sizeof(value) == 2);
377
+
378
+ *data += sizeof(value);
379
+
380
+ return value;
381
+ }
382
+
383
+ static uint32_t unpackValueUint32(unsigned char const **data) {
384
+ uint32_t value;
385
+
386
+ memcpy(&value, *data, sizeof(value));
387
+
388
+ assert(sizeof(value) == 4);
389
+
390
+ *data += sizeof(value);
391
+
392
+ return value;
393
+ }
394
+
395
+ static double unpackValueFloat(unsigned char const **data) {
396
+ double size;
397
+
398
+ memcpy(&size, *data, sizeof(size));
399
+ *data += sizeof(size);
400
+
401
+ return size;
402
+ }
403
+
404
+ static unsigned char const *_unpackValueCString(unsigned char const *data) {
405
+ while (*(data++) != 0) {
406
+ }
407
+
408
+ return data;
409
+ }
410
+
411
+ // Decoding Variable-length quantity values
412
+ static uint64_t _unpackVariableLength(unsigned char const **data) {
413
+ uint64_t result = 0;
414
+ uint64_t factor = 1;
415
+
416
+ while (1) {
417
+ unsigned char value = **data;
418
+ *data += 1;
419
+
420
+ result += (value & 127) * factor;
421
+
422
+ if (value < 128) {
423
+ break;
424
+ }
425
+
426
+ factor <<= 7;
427
+ }
428
+
429
+ return result;
430
+ }
431
+
432
+ static PyObject *_unpackAnonValue(unsigned char anon_index) {
433
+ switch (anon_index) {
434
+ case 0:
435
+ return (PyObject *)Py_TYPE(Py_None);
436
+ case 1:
437
+ return (PyObject *)&PyEllipsis_Type;
438
+ case 2:
439
+ return (PyObject *)Py_TYPE(Py_NotImplemented);
440
+ case 3:
441
+ return (PyObject *)&PyFunction_Type;
442
+ case 4:
443
+ return (PyObject *)&PyGen_Type;
444
+ case 5:
445
+ return (PyObject *)&PyCFunction_Type;
446
+ case 6:
447
+ return (PyObject *)&PyCode_Type;
448
+ case 7:
449
+ return (PyObject *)&PyModule_Type;
450
+
451
+ #if PYTHON_VERSION < 0x300
452
+ case 8:
453
+ return (PyObject *)&PyFile_Type;
454
+ case 9:
455
+ return (PyObject *)&PyClass_Type;
456
+ case 10:
457
+ return (PyObject *)&PyInstance_Type;
458
+ case 11:
459
+ return (PyObject *)&PyMethod_Type;
460
+ #endif
461
+
462
+ default:
463
+ PRINT_FORMAT("Missing anon value for %d\n", (int)anon_index);
464
+ NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
465
+ }
466
+ }
467
+
468
+ PyObject *_unpackSpecialValue(unsigned char special_index) {
469
+ switch (special_index) {
470
+ case 0:
471
+ return PyObject_GetAttrString((PyObject *)builtin_module, "Ellipsis");
472
+ case 1:
473
+ return PyObject_GetAttrString((PyObject *)builtin_module, "NotImplemented");
474
+ case 2:
475
+ return Py_SysVersionInfo;
476
+ default:
477
+ PRINT_FORMAT("Missing special value for %d\n", (int)special_index);
478
+ NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
479
+ }
480
+ }
481
+
482
+ static PyObject *_Nuitka_Unicode_ImmortalFromStringAndSize(PyThreadState *tstate, const char *data, Py_ssize_t size,
483
+ bool is_ascii) {
484
+ #if PYTHON_VERSION < 0x300
485
+ PyObject *u = PyUnicode_FromStringAndSize((const char *)data, size);
486
+ #else
487
+ // spell-checker: ignore surrogatepass
488
+ PyObject *u = PyUnicode_DecodeUTF8((const char *)data, size, "surrogatepass");
489
+ #endif
490
+
491
+ #if PYTHON_VERSION >= 0x3d0
492
+ _PyUnicode_InternImmortal(tstate->interp, &u);
493
+ #elif PYTHON_VERSION >= 0x3c0
494
+ if (is_ascii) {
495
+ PyUnicode_InternInPlace(&u);
496
+ }
497
+
498
+ #if PYTHON_VERSION >= 0x3c7
499
+ _PyUnicode_STATE(u).interned = SSTATE_INTERNED_IMMORTAL_STATIC;
500
+
501
+ #if _NUITKA_EXE_MODE
502
+ _PyUnicode_STATE(u).statically_allocated = 1;
503
+ #else
504
+ if (Py_Version >= 0x30c0700) {
505
+ _PyUnicode_STATE(u).statically_allocated = 1;
506
+ }
507
+ #endif
508
+ #endif
509
+
510
+ #elif PYTHON_VERSION >= 0x300
511
+ if (is_ascii) {
512
+ PyUnicode_InternInPlace(&u);
513
+ }
514
+ #else
515
+ insertToDictCache(unicode_cache, &u);
516
+ #endif
517
+
518
+ // Make sure our strings are consistent.
519
+ #if PYTHON_VERSION >= 0x3c0 && !defined(__NUITKA_NO_ASSERT__)
520
+ // Note: Setting to immortal happens last, but we want to check now.
521
+ Py_SET_REFCNT_IMMORTAL(u);
522
+
523
+ _PyUnicode_CheckConsistency(u, 1);
524
+ #endif
525
+
526
+ return u;
527
+ }
528
+
529
+ static unsigned char const *_unpackBlobConstants(PyThreadState *tstate, PyObject **output, unsigned char const *data,
530
+ int count);
531
+
532
+ static unsigned char const *_unpackBlobConstant(PyThreadState *tstate, PyObject **output, unsigned char const *data) {
533
+
534
+ // Make sure we discover failures to assign.
535
+ *output = NULL;
536
+ bool is_object;
537
+
538
+ char c = *((char const *)data++);
539
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
540
+ unsigned char const *data_old = data;
541
+ printf("Type %c:\n", c);
542
+ #endif
543
+ switch (c) {
544
+
545
+ case 'p': {
546
+ *output = *(output - 1);
547
+ is_object = true;
548
+
549
+ break;
550
+ }
551
+ case 'T': {
552
+ int size = (int)_unpackVariableLength(&data);
553
+
554
+ PyObject *t = PyTuple_New(size);
555
+
556
+ if (size > 0) {
557
+ data = _unpackBlobConstants(tstate, &PyTuple_GET_ITEM(t, 0), data, size);
558
+ }
559
+
560
+ insertToDictCacheForcedHash(tuple_cache, &t, (hashfunc)our_tuple_hash, (richcmpfunc)our_tuple_tp_richcompare);
561
+
562
+ *output = t;
563
+ is_object = true;
564
+
565
+ break;
566
+ }
567
+ case 'L': {
568
+ int size = (int)_unpackVariableLength(&data);
569
+
570
+ PyObject *l = PyList_New(size);
571
+
572
+ if (size > 0) {
573
+ data = _unpackBlobConstants(tstate, &PyList_GET_ITEM(l, 0), data, size);
574
+ }
575
+
576
+ insertToDictCacheForcedHash(list_cache, &l, (hashfunc)our_list_hash, (richcmpfunc)our_list_tp_richcompare);
577
+
578
+ *output = l;
579
+ is_object = true;
580
+
581
+ break;
582
+ }
583
+ case 'D': {
584
+ int size = (int)_unpackVariableLength(&data);
585
+
586
+ PyObject *d = _PyDict_NewPresized(size);
587
+
588
+ if (size > 0) {
589
+ NUITKA_DYNAMIC_ARRAY_DECL(keys, PyObject *, size);
590
+ NUITKA_DYNAMIC_ARRAY_DECL(values, PyObject *, size);
591
+
592
+ data = _unpackBlobConstants(tstate, &keys[0], data, size);
593
+ data = _unpackBlobConstants(tstate, &values[0], data, size);
594
+
595
+ for (int i = 0; i < size; i++) {
596
+ PyDict_SetItem(d, keys[i], values[i]);
597
+ }
598
+ }
599
+
600
+ insertToDictCacheForcedHash(dict_cache, &d, (hashfunc)our_dict_hash, (richcmpfunc)our_dict_tp_richcompare);
601
+
602
+ *output = d;
603
+ is_object = true;
604
+
605
+ break;
606
+ }
607
+ case 'P':
608
+ case 'S': {
609
+ int size = (int)_unpackVariableLength(&data);
610
+
611
+ PyObject *s;
612
+
613
+ if (c == 'S') {
614
+ s = PySet_New(NULL);
615
+ } else {
616
+ if (size == 0) {
617
+ // Get at the frozenset singleton of CPython and use it too. Some things
618
+ // rely on it being a singleton across the board.
619
+ static PyObject *empty_frozenset = NULL;
620
+
621
+ if (empty_frozenset == NULL) {
622
+ empty_frozenset = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, (PyObject *)&PyFrozenSet_Type,
623
+ Nuitka_Bytes_FromStringAndSize("", 0));
624
+ }
625
+
626
+ s = empty_frozenset;
627
+ } else {
628
+ s = PyFrozenSet_New(NULL);
629
+ }
630
+ }
631
+
632
+ if (size > 0) {
633
+ NUITKA_DYNAMIC_ARRAY_DECL(values, PyObject *, size);
634
+
635
+ data = _unpackBlobConstants(tstate, &values[0], data, size);
636
+
637
+ for (int i = 0; i < size; i++) {
638
+ PySet_Add(s, values[i]);
639
+ }
640
+ }
641
+
642
+ // sets are cached globally too.
643
+ if (c == 'S') {
644
+ insertToDictCacheForcedHash(set_cache, &s, (hashfunc)our_set_hash, (richcmpfunc)our_set_tp_richcompare);
645
+ } else {
646
+ insertToDictCacheForcedHash(frozenset_cache, &s, (hashfunc)our_set_hash,
647
+ (richcmpfunc)our_set_tp_richcompare);
648
+ }
649
+
650
+ *output = s;
651
+ is_object = true;
652
+
653
+ break;
654
+ }
655
+ #if PYTHON_VERSION < 0x300
656
+ case 'I':
657
+ case 'i': {
658
+ long value = (long)_unpackVariableLength(&data);
659
+ if (c == 'I') {
660
+ value = -value;
661
+ }
662
+
663
+ PyObject *i = PyInt_FromLong(value);
664
+
665
+ insertToDictCache(int_cache, &i);
666
+
667
+ *output = i;
668
+ is_object = true;
669
+
670
+ break;
671
+ }
672
+ #endif
673
+ case 'l':
674
+ case 'q': {
675
+ // Positive/negative integer value with abs value < 2**31
676
+ uint64_t value = _unpackVariableLength(&data);
677
+
678
+ PyObject *l = Nuitka_LongFromCLong((c == 'l') ? ((long)value) : (-(long)value));
679
+ assert(l != NULL);
680
+
681
+ // Avoid the long cache, won't do anything useful for small ints
682
+ #if PYTHON_VERSION >= 0x300
683
+ if (value < NUITKA_STATIC_SMALLINT_VALUE_MIN || value >= NUITKA_STATIC_SMALLINT_VALUE_MAX)
684
+ #endif
685
+ {
686
+ insertToDictCache(long_cache, &l);
687
+ }
688
+
689
+ *output = l;
690
+ is_object = true;
691
+
692
+ break;
693
+ }
694
+ case 'G':
695
+ case 'g': {
696
+ PyObject *result = Nuitka_PyLong_FromLong(0);
697
+
698
+ int size = (int)_unpackVariableLength(&data);
699
+
700
+ PyObject *shift = Nuitka_PyLong_FromLong(31);
701
+
702
+ for (int i = 0; i < size; i++) {
703
+ result = PyNumber_InPlaceLshift(result, shift);
704
+
705
+ uint64_t value = _unpackVariableLength(&data);
706
+ PyObject *part = Nuitka_LongFromCLong((long)value);
707
+ assert(part != NULL);
708
+ result = PyNumber_InPlaceAdd(result, part);
709
+ Py_DECREF(part);
710
+ }
711
+
712
+ Py_DECREF(shift);
713
+
714
+ if (c == 'G') {
715
+ Nuitka_LongSetSignNegative(result);
716
+ }
717
+
718
+ insertToDictCache(long_cache, &result);
719
+
720
+ *output = result;
721
+ is_object = true;
722
+
723
+ break;
724
+ }
725
+ case 'f': {
726
+ double value = unpackValueFloat(&data);
727
+
728
+ PyObject *f = PyFloat_FromDouble(value);
729
+
730
+ // Floats are cached globally too.
731
+ insertToDictCacheForcedHash(float_cache, &f, NULL, (richcmpfunc)our_float_tp_richcompare);
732
+
733
+ *output = f;
734
+ is_object = true;
735
+
736
+ break;
737
+ }
738
+ case 'j': {
739
+ double real = unpackValueFloat(&data);
740
+ double imag = unpackValueFloat(&data);
741
+
742
+ *output = PyComplex_FromDoubles(real, imag);
743
+ is_object = true;
744
+
745
+ break;
746
+ }
747
+ case 'J': {
748
+ PyObject *parts[2];
749
+
750
+ // Complex via float is done for ones that are 0, nan, float.
751
+ data = _unpackBlobConstants(tstate, &parts[0], data, 2);
752
+
753
+ *output = BUILTIN_COMPLEX2(tstate, parts[0], parts[1]);
754
+ is_object = true;
755
+
756
+ break;
757
+ }
758
+ #if PYTHON_VERSION < 0x300
759
+ case 'a':
760
+ case 'c': {
761
+ // Python2 str, potentially attribute, zero terminated.
762
+ size_t size = strlen((const char *)data);
763
+
764
+ PyObject *s = PyString_FromStringAndSize((const char *)data, size);
765
+ CHECK_OBJECT(s);
766
+
767
+ data += size + 1;
768
+
769
+ if (c == 'a') {
770
+ PyString_InternInPlace(&s);
771
+ }
772
+
773
+ *output = s;
774
+ is_object = true;
775
+
776
+ break;
777
+ }
778
+ #else
779
+ case 'c': {
780
+ // Python3 bytes, zero terminated.
781
+ size_t size = strlen((const char *)data);
782
+
783
+ PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, size);
784
+ CHECK_OBJECT(b);
785
+
786
+ data += size + 1;
787
+
788
+ // Empty bytes value is here as well.
789
+ if (size > 1) {
790
+ insertToDictCache(bytes_cache, &b);
791
+ }
792
+
793
+ *output = b;
794
+ is_object = true;
795
+
796
+ break;
797
+ }
798
+ #endif
799
+ case 'd': {
800
+ // Python2 str length 1 str, potentially attribute, or Python3 single byte
801
+
802
+ #if PYTHON_VERSION < 0x300
803
+ PyObject *s = PyString_FromStringAndSize((const char *)data, 1);
804
+ data += 1;
805
+ *output = s;
806
+ #else
807
+ PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, 1);
808
+ data += 1;
809
+ *output = b;
810
+ #endif
811
+
812
+ is_object = true;
813
+
814
+ break;
815
+ }
816
+ case 'w': {
817
+ // Python2 unicode, Python3 str length 1, potentially attribute in Python3
818
+ PyObject *u = _Nuitka_Unicode_ImmortalFromStringAndSize(tstate, (const char *)data, 1, true);
819
+ data += 1;
820
+
821
+ *output = u;
822
+ is_object = true;
823
+
824
+ break;
825
+ }
826
+ case 'b': {
827
+ // Python2 str or Python3 bytes, length indicated.
828
+ int size = (int)_unpackVariableLength(&data);
829
+ assert(size > 1);
830
+
831
+ PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, size);
832
+ CHECK_OBJECT(b);
833
+
834
+ data += size;
835
+
836
+ #if PYTHON_VERSION >= 0x300
837
+ insertToDictCache(bytes_cache, &b);
838
+ #endif
839
+
840
+ *output = b;
841
+ is_object = true;
842
+
843
+ break;
844
+ }
845
+
846
+ case 'B': {
847
+ int size = (int)_unpackVariableLength(&data);
848
+
849
+ PyObject *b = PyByteArray_FromStringAndSize((const char *)data, size);
850
+ data += size;
851
+
852
+ *output = b;
853
+ is_object = true;
854
+
855
+ break;
856
+ }
857
+ #if PYTHON_VERSION >= 0x300
858
+ case 'a': // Python3 attributes
859
+ #endif
860
+ case 'u': { // Python2 unicode, Python3 str, zero terminated.
861
+ size_t size = strlen((const char *)data);
862
+ assert(size != 0);
863
+
864
+ PyObject *u = _Nuitka_Unicode_ImmortalFromStringAndSize(tstate, (const char *)data, size, c == 'a');
865
+ data += size + 1;
866
+
867
+ *output = u;
868
+ is_object = true;
869
+
870
+ break;
871
+ }
872
+ case 'v': {
873
+ int size = (int)_unpackVariableLength(&data);
874
+ assert(size != 0);
875
+
876
+ PyObject *u = _Nuitka_Unicode_ImmortalFromStringAndSize(tstate, (const char *)data, size, false);
877
+ data += size;
878
+
879
+ *output = u;
880
+ is_object = true;
881
+
882
+ break;
883
+ }
884
+ case 'n': {
885
+ *output = Py_None;
886
+ is_object = true;
887
+
888
+ break;
889
+ }
890
+ case 's': {
891
+ *output = _Nuitka_Unicode_ImmortalFromStringAndSize(tstate, (const char *)data, 0, true);
892
+ is_object = true;
893
+
894
+ break;
895
+ }
896
+ case 't': {
897
+ *output = Py_True;
898
+ is_object = true;
899
+
900
+ break;
901
+ }
902
+ case 'F': {
903
+ *output = Py_False;
904
+ is_object = true;
905
+
906
+ break;
907
+ }
908
+ case ':': {
909
+ // Slice object
910
+ PyObject *items[3];
911
+ data = _unpackBlobConstants(tstate, &items[0], data, 3);
912
+
913
+ PyObject *s = MAKE_SLICE_OBJECT3(tstate, items[0], items[1], items[2]);
914
+
915
+ *output = s;
916
+ is_object = true;
917
+
918
+ break;
919
+ }
920
+ case ';': {
921
+ // (x)range objects
922
+ PyObject *items[3];
923
+ data = _unpackBlobConstants(tstate, &items[0], data, 3);
924
+ #if PYTHON_VERSION < 0x300
925
+ assert(PyInt_CheckExact(items[0]));
926
+ assert(PyInt_CheckExact(items[1]));
927
+ assert(PyInt_CheckExact(items[2]));
928
+
929
+ long start = PyInt_AS_LONG(items[0]);
930
+ long stop = PyInt_AS_LONG(items[1]);
931
+ long step = PyInt_AS_LONG(items[2]);
932
+
933
+ PyObject *s = MAKE_XRANGE(tstate, start, stop, step);
934
+ #else
935
+ PyObject *s = BUILTIN_XRANGE3(tstate, items[0], items[1], items[2]);
936
+ #endif
937
+ *output = s;
938
+ is_object = true;
939
+
940
+ break;
941
+ }
942
+ case 'M': {
943
+ // Anonymous builtin by table index value.
944
+ unsigned char anon_index = *data++;
945
+
946
+ *output = _unpackAnonValue(anon_index);
947
+ is_object = true;
948
+
949
+ break;
950
+ }
951
+ case 'Q': {
952
+ // Anonymous builtin by table index value.
953
+ unsigned char special_index = *data++;
954
+
955
+ *output = _unpackSpecialValue(special_index);
956
+ is_object = true;
957
+
958
+ break;
959
+ }
960
+ case 'O': {
961
+ // Builtin by name. TODO: Define number table shared by C and Python
962
+ // serialization to avoid using strings here.
963
+ char const *builtin_name = (char const *)data;
964
+ data = _unpackValueCString(data);
965
+
966
+ *output = PyObject_GetAttrString((PyObject *)builtin_module, builtin_name);
967
+ is_object = true;
968
+
969
+ break;
970
+ }
971
+ case 'E': {
972
+ // Builtin exception by name. TODO: Define number table shared by C and Python
973
+ // serialization to avoid using strings here.
974
+ char const *builtin_exception_name = (char const *)data;
975
+ data = _unpackValueCString(data);
976
+
977
+ *output = PyObject_GetAttrString((PyObject *)builtin_module, builtin_exception_name);
978
+ is_object = true;
979
+
980
+ break;
981
+ }
982
+ case 'Z': {
983
+ unsigned char v = *data++;
984
+
985
+ PyObject *z = NULL;
986
+
987
+ switch (v) {
988
+ case 0: {
989
+ static PyObject *_const_float_0_0 = NULL;
990
+
991
+ if (_const_float_0_0 == NULL) {
992
+ _const_float_0_0 = PyFloat_FromDouble(0.0);
993
+ }
994
+ z = _const_float_0_0;
995
+
996
+ break;
997
+ }
998
+ case 1: {
999
+ static PyObject *_const_float_minus_0_0 = NULL;
1000
+
1001
+ if (_const_float_minus_0_0 == NULL) {
1002
+ _const_float_minus_0_0 = PyFloat_FromDouble(0.0);
1003
+
1004
+ // Older Python3 has variable signs from C, so be explicit about it.
1005
+ PyFloat_SET_DOUBLE(_const_float_minus_0_0, copysign(PyFloat_AS_DOUBLE(_const_float_minus_0_0), -1.0));
1006
+ }
1007
+ z = _const_float_minus_0_0;
1008
+
1009
+ break;
1010
+ }
1011
+
1012
+ case 2: {
1013
+ static PyObject *_const_float_plus_nan = NULL;
1014
+
1015
+ if (_const_float_plus_nan == NULL) {
1016
+ _const_float_plus_nan = PyFloat_FromDouble(Py_NAN);
1017
+
1018
+ // Older Python3 has variable signs for NaN from C, so be explicit about it.
1019
+ PyFloat_SET_DOUBLE(_const_float_plus_nan, copysign(PyFloat_AS_DOUBLE(_const_float_plus_nan), 1.0));
1020
+ }
1021
+ z = _const_float_plus_nan;
1022
+
1023
+ break;
1024
+ }
1025
+ case 3: {
1026
+ static PyObject *_const_float_minus_nan = NULL;
1027
+
1028
+ if (_const_float_minus_nan == NULL) {
1029
+ _const_float_minus_nan = PyFloat_FromDouble(Py_NAN);
1030
+
1031
+ // Older Python3 has variable signs for NaN from C, so be explicit about it.
1032
+ PyFloat_SET_DOUBLE(_const_float_minus_nan, copysign(PyFloat_AS_DOUBLE(_const_float_minus_nan), -1.0));
1033
+ }
1034
+ z = _const_float_minus_nan;
1035
+
1036
+ break;
1037
+ }
1038
+ case 4: {
1039
+ static PyObject *_const_float_plus_inf = NULL;
1040
+
1041
+ if (_const_float_plus_inf == NULL) {
1042
+ _const_float_plus_inf = PyFloat_FromDouble(Py_HUGE_VAL);
1043
+
1044
+ // Older Python3 has variable signs from C, so be explicit about it.
1045
+ PyFloat_SET_DOUBLE(_const_float_plus_inf, copysign(PyFloat_AS_DOUBLE(_const_float_plus_inf), 1.0));
1046
+ }
1047
+ z = _const_float_plus_inf;
1048
+
1049
+ break;
1050
+ }
1051
+ case 5: {
1052
+ static PyObject *_const_float_minus_inf = NULL;
1053
+
1054
+ if (_const_float_minus_inf == NULL) {
1055
+ _const_float_minus_inf = PyFloat_FromDouble(Py_HUGE_VAL);
1056
+
1057
+ // Older Python3 has variable signs from C, so be explicit about it.
1058
+ PyFloat_SET_DOUBLE(_const_float_minus_inf, copysign(PyFloat_AS_DOUBLE(_const_float_minus_inf), -1.0));
1059
+ }
1060
+ z = _const_float_minus_inf;
1061
+
1062
+ break;
1063
+ }
1064
+ default: {
1065
+ PRINT_FORMAT("Missing decoding for %d\n", (int)c);
1066
+ NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1067
+ }
1068
+ }
1069
+
1070
+ // Floats are cached globally too.
1071
+ insertToDictCacheForcedHash(float_cache, &z, NULL, (richcmpfunc)our_float_tp_richcompare);
1072
+
1073
+ *output = z;
1074
+ is_object = true;
1075
+
1076
+ break;
1077
+ }
1078
+ case 'X': {
1079
+ // Blob data pointer, user knowns size.
1080
+ uint64_t size = _unpackVariableLength(&data);
1081
+
1082
+ *output = (PyObject *)data;
1083
+ is_object = false;
1084
+
1085
+ data += size;
1086
+
1087
+ break;
1088
+ }
1089
+ #if PYTHON_VERSION >= 0x390
1090
+ case 'A': {
1091
+ // GenericAlias object
1092
+ PyObject *items[2];
1093
+ data = _unpackBlobConstants(tstate, &items[0], data, 2);
1094
+
1095
+ PyObject *g = Py_GenericAlias(items[0], items[1]);
1096
+
1097
+ // TODO: Maybe deduplicate.
1098
+ *output = g;
1099
+
1100
+ is_object = true;
1101
+ break;
1102
+ }
1103
+ #endif
1104
+ #if PYTHON_VERSION >= 0x3a0
1105
+ case 'H': {
1106
+ // UnionType object
1107
+ PyObject *args;
1108
+ data = _unpackBlobConstants(tstate, &args, data, 1);
1109
+
1110
+ PyObject *union_type = MAKE_UNION_TYPE(args);
1111
+
1112
+ // TODO: Maybe deduplicate.
1113
+ *output = union_type;
1114
+
1115
+ is_object = true;
1116
+ break;
1117
+ }
1118
+ #endif
1119
+ case 'C': {
1120
+ // Code object, without the filename, we let the module do that,
1121
+ // depending on the source mode and this is highly compact
1122
+ // representation of it.
1123
+
1124
+ // First, flags with the optional bits. It's handling
1125
+ // must match that of encoder 100%, the flag value to
1126
+ // use changes per version and mode.
1127
+ uint64_t flags = _unpackVariableLength(&data);
1128
+
1129
+ // Current flag indicator value, we trust the C compiler
1130
+ // to optimize it away among the ifdefs.
1131
+ uint64_t flag_base = 1;
1132
+
1133
+ // Code object flags as used by Python, encoded in the
1134
+ // flags as well.
1135
+ int co_flags = 0;
1136
+
1137
+ // Name is mandatory, no flag needed.
1138
+ PyObject *function_name;
1139
+ data = _unpackBlobConstant(tstate, &function_name, data);
1140
+
1141
+ // Line number is mandatory, no flag needed. Encoded values start at 0,
1142
+ // where 1 is what is normally used.
1143
+ int line_number = (int)_unpackVariableLength(&data) + 1;
1144
+
1145
+ // Right now this is only argument names, so argument count is implied,
1146
+ // it is mandatory so no flag is needed, empty value is very compact
1147
+ // anyway and rare.
1148
+ PyObject *arg_names;
1149
+ data = _unpackBlobConstant(tstate, &arg_names, data);
1150
+
1151
+ // TODO: Not sure if this is redundant potentially it can be derives
1152
+ // from the var names already. It might be possible to derive by other
1153
+ // means.
1154
+ int arg_count = (int)_unpackVariableLength(&data);
1155
+
1156
+ // It is version specific if we have this, and dependent on a flag, if
1157
+ // it's present at all.
1158
+ #if PYTHON_VERSION >= 0x3b0
1159
+ PyObject *function_qualname;
1160
+
1161
+ if (flags & flag_base) {
1162
+ data = _unpackBlobConstant(tstate, &function_qualname, data);
1163
+ } else {
1164
+ function_qualname = function_name;
1165
+ }
1166
+ flag_base <<= 1;
1167
+ #endif
1168
+
1169
+ // Free vars are optional.
1170
+ PyObject *free_vars = NULL;
1171
+
1172
+ if (flags & flag_base) {
1173
+ data = _unpackBlobConstant(tstate, &free_vars, data);
1174
+ }
1175
+ flag_base <<= 1;
1176
+
1177
+ #if PYTHON_VERSION >= 0x300
1178
+ int kw_only_count = 0;
1179
+ if (flags & flag_base) {
1180
+ kw_only_count = (int)_unpackVariableLength(&data) + 1;
1181
+ }
1182
+ flag_base <<= 1;
1183
+ assert(kw_only_count >= 0);
1184
+ #endif
1185
+
1186
+ #if PYTHON_VERSION >= 0x380
1187
+ int pos_only_count = 0;
1188
+ if (flags & flag_base) {
1189
+ pos_only_count = (int)_unpackVariableLength(&data) + 1;
1190
+ }
1191
+ flag_base <<= 1;
1192
+ assert(pos_only_count >= 0);
1193
+ #endif
1194
+
1195
+ // TODO: For pre-Python3.5 we could save one bit here, but not worth it
1196
+ // for now.
1197
+ #if PYTHON_VERSION >= 0x360
1198
+ if ((flags & (flag_base * 3)) == (flag_base * 3)) {
1199
+ co_flags += CO_ASYNC_GENERATOR;
1200
+ } else
1201
+ #endif
1202
+ #if PYTHON_VERSION >= 0x350
1203
+ if ((flags & (flag_base * 2)) == (flag_base * 2)) {
1204
+ co_flags += CO_COROUTINE;
1205
+ } else
1206
+ #endif
1207
+ if (flags & flag_base) {
1208
+ co_flags += CO_GENERATOR;
1209
+ }
1210
+
1211
+ flag_base <<= 2;
1212
+
1213
+ if (flags & flag_base) {
1214
+ co_flags += CO_OPTIMIZED;
1215
+ }
1216
+ flag_base <<= 1;
1217
+
1218
+ if (flags & flag_base) {
1219
+ co_flags += CO_NEWLOCALS;
1220
+ }
1221
+ flag_base <<= 1;
1222
+
1223
+ if (flags & flag_base) {
1224
+ co_flags += CO_VARARGS;
1225
+ }
1226
+ flag_base <<= 1;
1227
+
1228
+ if (flags & flag_base) {
1229
+ co_flags += CO_VARKEYWORDS;
1230
+ }
1231
+ flag_base <<= 1;
1232
+
1233
+ #if PYTHON_VERSION < 0x300
1234
+ if (flags & flag_base) {
1235
+ co_flags += CO_FUTURE_DIVISION;
1236
+ }
1237
+ flag_base <<= 1;
1238
+ #endif
1239
+
1240
+ if (flags & flag_base) {
1241
+ co_flags += CO_FUTURE_UNICODE_LITERALS;
1242
+ }
1243
+ flag_base <<= 1;
1244
+
1245
+ #if PYTHON_VERSION < 0x300
1246
+ if (flags & flag_base) {
1247
+ co_flags += CO_FUTURE_PRINT_FUNCTION;
1248
+ }
1249
+ flag_base <<= 1;
1250
+ #endif
1251
+
1252
+ #if PYTHON_VERSION < 0x300
1253
+ if (flags & flag_base) {
1254
+ co_flags += CO_FUTURE_ABSOLUTE_IMPORT;
1255
+ }
1256
+ flag_base <<= 1;
1257
+ #endif
1258
+
1259
+ #if PYTHON_VERSION >= 0x350 && PYTHON_VERSION < 0x370
1260
+ if (flags & flag_base) {
1261
+ co_flags += CO_FUTURE_GENERATOR_STOP;
1262
+ }
1263
+ flag_base <<= 1;
1264
+ #endif
1265
+
1266
+ #if PYTHON_VERSION >= 0x370
1267
+ if (flags & flag_base) {
1268
+ co_flags += CO_FUTURE_ANNOTATIONS;
1269
+ }
1270
+ flag_base <<= 1;
1271
+ #endif
1272
+
1273
+ #if PYTHON_VERSION >= 0x300
1274
+ if (flags & flag_base) {
1275
+ co_flags += CO_FUTURE_BARRY_AS_BDFL;
1276
+ }
1277
+ flag_base <<= 1;
1278
+ #endif
1279
+
1280
+ // Filename will be supplied later during usage.
1281
+ *output = (PyObject *)MAKE_CODE_OBJECT(Py_None, line_number, co_flags, function_name, function_qualname,
1282
+ arg_names, free_vars, arg_count, kw_only_count, pos_only_count);
1283
+
1284
+ CHECK_OBJECT(*output);
1285
+
1286
+ is_object = true;
1287
+ break;
1288
+ }
1289
+ case '.': {
1290
+ PRINT_STRING("Missing blob values\n");
1291
+ NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1292
+ }
1293
+ default:
1294
+ PRINT_FORMAT("Missing decoding for %d\n", (int)c);
1295
+ NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1296
+ }
1297
+
1298
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1299
+ printf("Size for %c was %d\n", c, data - data_old);
1300
+ #endif
1301
+
1302
+ // Discourage in-place operations from modifying these. These
1303
+ // might be put into containers, therefore take 2 refs to be
1304
+ // accounting for the container too.
1305
+ if (is_object == true) {
1306
+ CHECK_OBJECT(*output);
1307
+
1308
+ #if PYTHON_VERSION < 0x3c0
1309
+ Py_INCREF(*output);
1310
+ Py_INCREF(*output);
1311
+ #else
1312
+ Py_SET_REFCNT_IMMORTAL(*output);
1313
+ #endif
1314
+ }
1315
+
1316
+ return data;
1317
+ }
1318
+
1319
+ static unsigned char const *_unpackBlobConstants(PyThreadState *tstate, PyObject **output, unsigned char const *data,
1320
+ int count) {
1321
+ for (int _i = 0; _i < count; _i++) {
1322
+ data = _unpackBlobConstant(tstate, output, data);
1323
+
1324
+ output += 1;
1325
+ }
1326
+
1327
+ return data;
1328
+ }
1329
+
1330
+ static void unpackBlobConstants(PyThreadState *tstate, PyObject **output, unsigned char const *data) {
1331
+ int count = (int)unpackValueUint16(&data);
1332
+
1333
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1334
+ printf("unpackBlobConstants count %d\n", count);
1335
+ #endif
1336
+ _unpackBlobConstants(tstate, output, data, count);
1337
+ }
1338
+
1339
+ #if _NUITKA_CONSTANTS_FROM_MACOS_SECTION
1340
+
1341
+ #include <mach-o/getsect.h>
1342
+ #include <mach-o/ldsyms.h>
1343
+
1344
+ #if !_NUITKA_EXE_MODE
1345
+ static int findMacOSDllImageId(void) {
1346
+ Dl_info where;
1347
+ int res = dladdr((void *)findMacOSDllImageId, &where);
1348
+ assert(res != 0);
1349
+
1350
+ char const *dll_filename = where.dli_fname;
1351
+
1352
+ unsigned long image_count = _dyld_image_count();
1353
+
1354
+ for (int i = 0; i < image_count; i++) {
1355
+ // Ignore entries without a header.
1356
+ struct mach_header const *header = _dyld_get_image_header(i);
1357
+ if (header == NULL) {
1358
+ continue;
1359
+ }
1360
+
1361
+ if (strcmp(dll_filename, _dyld_get_image_name(i)) == 0) {
1362
+ return i;
1363
+ }
1364
+ }
1365
+
1366
+ return -1;
1367
+ }
1368
+ #endif
1369
+
1370
+ unsigned char *findMacOSBinarySection(void) {
1371
+ #if _NUITKA_EXE_MODE
1372
+ const struct mach_header *header = &_mh_execute_header;
1373
+ #else
1374
+ int image_id = findMacOSDllImageId();
1375
+ assert(image_id != -1);
1376
+
1377
+ const struct mach_header *header = _dyld_get_image_header(image_id);
1378
+ #endif
1379
+
1380
+ unsigned long *size;
1381
+ return getsectiondata(header, "constants", "constants", &size);
1382
+ }
1383
+
1384
+ #endif
1385
+
1386
+ void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *name) {
1387
+ static bool init_done = false;
1388
+
1389
+ if (init_done == false) {
1390
+ NUITKA_PRINT_TIMING("loadConstantsBlob(): One time init.");
1391
+
1392
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1393
+ printf("loadConstantsBlob '%s' one time init\n", name);
1394
+ #endif
1395
+
1396
+ #if defined(_NUITKA_CONSTANTS_FROM_INCBIN)
1397
+ constant_bin = getConstantsBlobData();
1398
+ #elif defined(_NUITKA_CONSTANTS_FROM_RESOURCE)
1399
+ #if _NUITKA_EXE_MODE
1400
+ // Using NULL as this indicates running program.
1401
+ HMODULE handle = NULL;
1402
+ #else
1403
+ HMODULE handle = getDllModuleHandle();
1404
+ #endif
1405
+
1406
+ constant_bin = (const unsigned char *)LockResource(
1407
+ LoadResource(handle, FindResource(handle, MAKEINTRESOURCE(3), RT_RCDATA)));
1408
+
1409
+ assert(constant_bin);
1410
+ #elif _NUITKA_CONSTANTS_FROM_MACOS_SECTION
1411
+ constant_bin = findMacOSBinarySection();
1412
+
1413
+ assert(constant_bin);
1414
+ #endif
1415
+ NUITKA_PRINT_TIMING("loadConstantsBlob(): Found blob, decoding now.");
1416
+ DECODE(constant_bin);
1417
+
1418
+ NUITKA_PRINT_TIMING("loadConstantsBlob(): CRC32 that blob for correctness.");
1419
+ uint32_t hash = unpackValueUint32(&constant_bin);
1420
+ uint32_t size = unpackValueUint32(&constant_bin);
1421
+
1422
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1423
+ printf("loadConstantsBlob '%u' hash value\n", hash);
1424
+ printf("loadConstantsBlob '%u' size value\n", size);
1425
+ #endif
1426
+ if (calcCRC32(constant_bin, size) != hash) {
1427
+ puts("Error, corrupted constants object");
1428
+ abort();
1429
+ }
1430
+
1431
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1432
+ printf("Checked CRC32 to match hash %u size %u\n", hash, size);
1433
+ #endif
1434
+
1435
+ NUITKA_PRINT_TIMING("loadConstantsBlob(): One time init complete.");
1436
+
1437
+ init_done = true;
1438
+ }
1439
+
1440
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1441
+ printf("Loading blob named '%s'\n", name);
1442
+ #endif
1443
+ // Python 3.9 or higher cannot create dictionary before calling init so avoid it.
1444
+ if (strcmp(name, ".bytecode") != 0) {
1445
+ initCaches();
1446
+ }
1447
+
1448
+ unsigned char const *w = constant_bin;
1449
+
1450
+ for (;;) {
1451
+ int match = strcmp(name, (char const *)w);
1452
+ w += strlen((char const *)w) + 1;
1453
+
1454
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1455
+ printf("offset of blob size %d\n", w - constant_bin);
1456
+ #endif
1457
+
1458
+ uint32_t size = unpackValueUint32(&w);
1459
+
1460
+ if (match == 0) {
1461
+ #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1462
+ printf("Loading blob named '%s' with size %d\n", name, size);
1463
+ #endif
1464
+ break;
1465
+ }
1466
+
1467
+ // Skip other module data.
1468
+ w += size;
1469
+ }
1470
+
1471
+ unpackBlobConstants(tstate, output, w);
1472
+ }
1473
+
1474
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1475
+ // integrates with CPython, but also works on its own.
1476
+ //
1477
+ // Licensed under the Apache License, Version 2.0 (the "License");
1478
+ // you may not use this file except in compliance with the License.
1479
+ // You may obtain a copy of the License at
1480
+ //
1481
+ // http://www.apache.org/licenses/LICENSE-2.0
1482
+ //
1483
+ // Unless required by applicable law or agreed to in writing, software
1484
+ // distributed under the License is distributed on an "AS IS" BASIS,
1485
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1486
+ // See the License for the specific language governing permissions and
1487
+ // limitations under the License.