Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__cp311-cp311-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 (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +93 -54
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,5 @@
1
- // Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- //
3
- // Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- // integrates with CPython, but also works on its own.
5
- //
6
- // Licensed under the Apache License, Version 2.0 (the "License");
7
- // you may not use this file except in compliance with the License.
8
- // You may obtain a copy of the License at
9
- //
10
- // http://www.apache.org/licenses/LICENSE-2.0
11
- //
12
- // Unless required by applicable law or agreed to in writing, software
13
- // distributed under the License is distributed on an "AS IS" BASIS,
14
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- // See the License for the specific language governing permissions and
16
- // limitations under the License.
17
- //
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
18
3
  /** Providing access to the constants binary blob.
19
4
  *
20
5
  * There are multiple ways, the constants binary is accessed, and its
@@ -128,7 +113,7 @@ static PyObject *our_list_richcompare(PyListObject *list1, PyListObject *list2,
128
113
  result = Py_False;
129
114
  }
130
115
 
131
- Py_INCREF(result);
116
+ Py_INCREF_IMMORTAL(result);
132
117
  return result;
133
118
  }
134
119
 
@@ -151,7 +136,7 @@ static PyObject *our_tuple_richcompare(PyTupleObject *tuple1, PyTupleObject *tup
151
136
  result = Py_False;
152
137
  }
153
138
 
154
- Py_INCREF(result);
139
+ Py_INCREF_IMMORTAL(result);
155
140
  return result;
156
141
  }
157
142
 
@@ -196,8 +181,10 @@ static PyObject *our_set_richcompare(PyObject *set1, PyObject *set2, int op) {
196
181
  // Same sized set, simply check if values are identical. Other reductions should
197
182
  // make it identical, or else this won't have the effect intended.
198
183
  while (_PySet_Next(set1, &pos1, &key1)) {
199
- int res = _PySet_Next(set2, &pos2, &key2);
200
- assert(res != 0);
184
+ {
185
+ NUITKA_MAY_BE_UNUSED int res = _PySet_Next(set2, &pos2, &key2);
186
+ assert(res != 0);
187
+ }
201
188
 
202
189
  if (key1 != key2) {
203
190
  result = Py_False;
@@ -210,8 +197,10 @@ static PyObject *our_set_richcompare(PyObject *set1, PyObject *set2, int op) {
210
197
  // Same sized dictionary, simply check if values are identical. Other reductions should
211
198
  // make it identical, or else this won't have the effect intended.
212
199
  while (_PySet_NextEntry(set1, &pos1, &key1, &unused1)) {
213
- int res = _PySet_NextEntry(set2, &pos2, &key2, &unused2);
214
- assert(res != 0);
200
+ {
201
+ NUITKA_MAY_BE_UNUSED int res = _PySet_NextEntry(set2, &pos2, &key2, &unused2);
202
+ assert(res != 0);
203
+ }
215
204
 
216
205
  if (key1 != key2) {
217
206
  result = Py_False;
@@ -221,7 +210,7 @@ static PyObject *our_set_richcompare(PyObject *set1, PyObject *set2, int op) {
221
210
  #endif
222
211
  }
223
212
 
224
- Py_INCREF(result);
213
+ Py_INCREF_IMMORTAL(result);
225
214
  return result;
226
215
  }
227
216
 
@@ -237,7 +226,7 @@ static PyObject *our_float_richcompare(PyFloatObject *a, PyFloatObject *b, int o
237
226
  result = Py_False;
238
227
  }
239
228
 
240
- Py_INCREF(result);
229
+ Py_INCREF_IMMORTAL(result);
241
230
  return result;
242
231
  }
243
232
 
@@ -273,8 +262,10 @@ static PyObject *our_dict_richcompare(PyObject *a, PyObject *b, int op) {
273
262
  // Other reductions should make it identical, or else this won't have the
274
263
  // effect intended.
275
264
  while (Nuitka_DictNext(a, &pos1, &key1, &value1)) {
276
- int res = Nuitka_DictNext(b, &pos2, &key2, &value2);
277
- assert(res != 0);
265
+ {
266
+ NUITKA_MAY_BE_UNUSED int res = Nuitka_DictNext(b, &pos2, &key2, &value2);
267
+ assert(res != 0);
268
+ }
278
269
 
279
270
  if (key1 != key2 || value1 != value2) {
280
271
  result = Py_False;
@@ -283,7 +274,7 @@ static PyObject *our_dict_richcompare(PyObject *a, PyObject *b, int op) {
283
274
  }
284
275
  }
285
276
 
286
- Py_INCREF(result);
277
+ Py_INCREF_IMMORTAL(result);
287
278
  return result;
288
279
  }
289
280
 
@@ -334,6 +325,8 @@ static void initCaches(void) {
334
325
  Nuitka_Long_SmallValues = (PyObject **)_PyInterpreterState_GET()->small_ints;
335
326
  #elif PYTHON_VERSION >= 0x300
336
327
  for (long i = NUITKA_STATIC_SMALLINT_VALUE_MIN; i < NUITKA_STATIC_SMALLINT_VALUE_MAX; i++) {
328
+ // Have to use the original API here since out "Nuitka_PyLong_FromLong"
329
+ // would insist on using "Nuitka_Long_SmallValues" to produce it.
337
330
  PyObject *value = PyLong_FromLong(i);
338
331
  Nuitka_Long_SmallValues[NUITKA_TO_SMALL_VALUE_OFFSET(i)] = value;
339
332
  }
@@ -404,8 +397,8 @@ static int unpackValueInt(unsigned char const **data) {
404
397
  return size;
405
398
  }
406
399
 
407
- static long unpackValueLong(unsigned char const **data) {
408
- long size;
400
+ static double unpackValueFloat(unsigned char const **data) {
401
+ double size;
409
402
 
410
403
  memcpy(&size, *data, sizeof(size));
411
404
  *data += sizeof(size);
@@ -413,38 +406,32 @@ static long unpackValueLong(unsigned char const **data) {
413
406
  return size;
414
407
  }
415
408
 
416
- static long long unpackValueLongLong(unsigned char const **data) {
417
- long long size;
418
-
419
- memcpy(&size, *data, sizeof(size));
420
- *data += sizeof(size);
409
+ static unsigned char const *_unpackValueCString(unsigned char const *data) {
410
+ while (*(data++) != 0) {
411
+ }
421
412
 
422
- return size;
413
+ return data;
423
414
  }
424
415
 
425
- static unsigned long long unpackValueUnsignedLongLong(unsigned char const **data) {
426
- unsigned long long size;
416
+ // Decoding Variable-length quantity values
417
+ static uint64_t _unpackVariableLength(unsigned char const **data) {
418
+ uint64_t result = 0;
419
+ uint64_t factor = 1;
427
420
 
428
- memcpy(&size, *data, sizeof(size));
429
- *data += sizeof(size);
421
+ while (1) {
422
+ unsigned char value = **data;
423
+ *data += 1;
430
424
 
431
- return size;
432
- }
433
-
434
- static double unpackValueFloat(unsigned char const **data) {
435
- double size;
425
+ result += (value & 127) * factor;
436
426
 
437
- memcpy(&size, *data, sizeof(size));
438
- *data += sizeof(size);
439
-
440
- return size;
441
- }
427
+ if (value < 128) {
428
+ break;
429
+ }
442
430
 
443
- static unsigned char const *_unpackValueCString(unsigned char const *data) {
444
- while (*(data++) != 0) {
431
+ factor <<= 7;
445
432
  }
446
433
 
447
- return data;
434
+ return result;
448
435
  }
449
436
 
450
437
  static PyObject *_unpackAnonValue(unsigned char anon_index) {
@@ -498,658 +485,682 @@ PyObject *_unpackSpecialValue(unsigned char special_index) {
498
485
  }
499
486
 
500
487
  static unsigned char const *_unpackBlobConstants(PyThreadState *tstate, PyObject **output, unsigned char const *data,
501
- int count) {
488
+ int count);
502
489
 
503
- for (int _i = 0; _i < count; _i++) {
504
- // Make sure we discover failures to assign.
505
- *output = NULL;
506
- bool is_object;
490
+ static unsigned char const *_unpackBlobConstant(PyThreadState *tstate, PyObject **output, unsigned char const *data) {
491
+
492
+ // Make sure we discover failures to assign.
493
+ *output = NULL;
494
+ bool is_object;
507
495
 
508
- char c = *((char const *)data++);
496
+ char c = *((char const *)data++);
509
497
  #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
510
- unsigned char const *data_old = data;
511
- printf("Type %c for %d of %d:\n", c, _i, count);
498
+ unsigned char const *data_old = data;
499
+ printf("Type %c for %d of %d:\n", c, _i, count);
512
500
  #endif
513
- switch (c) {
501
+ switch (c) {
514
502
 
515
- case 'p': {
516
- assert(_i > 0);
503
+ case 'p': {
504
+ *output = *(output - 1);
505
+ is_object = true;
517
506
 
518
- *output = *(output - 1);
519
- is_object = true;
507
+ break;
508
+ }
509
+ case 'T': {
510
+ int size = (int)_unpackVariableLength(&data);
520
511
 
521
- break;
512
+ PyObject *t = PyTuple_New(size);
513
+
514
+ if (size > 0) {
515
+ data = _unpackBlobConstants(tstate, &PyTuple_GET_ITEM(t, 0), data, size);
522
516
  }
523
- case 'T': {
524
- // TODO: Use fixed sizes
525
- // uint32_t size = unpackSizeUint32(&data);
526
- int size = unpackValueInt(&data);
527
517
 
528
- PyObject *t = PyTuple_New(size);
518
+ insertToDictCacheForcedHash(tuple_cache, &t, (hashfunc)our_tuple_hash, (richcmpfunc)our_tuple_richcompare);
529
519
 
530
- if (size > 0) {
531
- data = _unpackBlobConstants(tstate, &PyTuple_GET_ITEM(t, 0), data, size);
532
- }
520
+ *output = t;
521
+ is_object = true;
533
522
 
534
- insertToDictCacheForcedHash(tuple_cache, &t, (hashfunc)our_tuple_hash, (richcmpfunc)our_tuple_richcompare);
523
+ break;
524
+ }
525
+ case 'L': {
526
+ int size = (int)_unpackVariableLength(&data);
535
527
 
536
- *output = t;
537
- is_object = true;
528
+ PyObject *l = PyList_New(size);
538
529
 
539
- break;
530
+ if (size > 0) {
531
+ data = _unpackBlobConstants(tstate, &PyList_GET_ITEM(l, 0), data, size);
540
532
  }
541
- case 'L': {
542
- // TODO: Use fixed sizes
543
- // uint32_t size = unpackSizeUint32(&data);
544
- int size = unpackValueInt(&data);
545
533
 
546
- PyObject *l = PyList_New(size);
534
+ insertToDictCacheForcedHash(list_cache, &l, (hashfunc)our_list_hash, (richcmpfunc)our_list_richcompare);
547
535
 
548
- if (size > 0) {
549
- data = _unpackBlobConstants(tstate, &PyList_GET_ITEM(l, 0), data, size);
550
- }
536
+ *output = l;
537
+ is_object = true;
551
538
 
552
- insertToDictCacheForcedHash(list_cache, &l, (hashfunc)our_list_hash, (richcmpfunc)our_list_richcompare);
553
-
554
- *output = l;
555
- is_object = true;
556
-
557
- break;
558
- }
559
- case 'D': {
560
- // TODO: Use flexible sizes with bias towards small values.
561
- // uint32_t size = unpackSizeUint32(&data);
562
- int size = unpackValueInt(&data);
539
+ break;
540
+ }
541
+ case 'D': {
542
+ int size = (int)_unpackVariableLength(&data);
563
543
 
564
- PyObject *d = _PyDict_NewPresized(size);
544
+ PyObject *d = _PyDict_NewPresized(size);
565
545
 
566
- if (size > 0) {
567
- NUITKA_DYNAMIC_ARRAY_DECL(keys, PyObject *, size);
568
- NUITKA_DYNAMIC_ARRAY_DECL(values, PyObject *, size);
546
+ if (size > 0) {
547
+ NUITKA_DYNAMIC_ARRAY_DECL(keys, PyObject *, size);
548
+ NUITKA_DYNAMIC_ARRAY_DECL(values, PyObject *, size);
569
549
 
570
- data = _unpackBlobConstants(tstate, &keys[0], data, size);
571
- data = _unpackBlobConstants(tstate, &values[0], data, size);
550
+ data = _unpackBlobConstants(tstate, &keys[0], data, size);
551
+ data = _unpackBlobConstants(tstate, &values[0], data, size);
572
552
 
573
- for (int i = 0; i < size; i++) {
574
- PyDict_SetItem(d, keys[i], values[i]);
575
- }
553
+ for (int i = 0; i < size; i++) {
554
+ PyDict_SetItem(d, keys[i], values[i]);
576
555
  }
556
+ }
577
557
 
578
- insertToDictCacheForcedHash(dict_cache, &d, (hashfunc)our_dict_hash, (richcmpfunc)our_dict_richcompare);
579
-
580
- *output = d;
581
- is_object = true;
558
+ insertToDictCacheForcedHash(dict_cache, &d, (hashfunc)our_dict_hash, (richcmpfunc)our_dict_richcompare);
582
559
 
583
- break;
584
- }
585
- case 'P':
586
- case 'S': {
587
- // TODO: Use fixed sizes
588
- // uint32_t size = unpackSizeUint32(&data);
589
- int size = unpackValueInt(&data);
560
+ *output = d;
561
+ is_object = true;
590
562
 
591
- PyObject *s;
563
+ break;
564
+ }
565
+ case 'P':
566
+ case 'S': {
567
+ int size = (int)_unpackVariableLength(&data);
568
+
569
+ PyObject *s;
570
+
571
+ if (c == 'S') {
572
+ s = PySet_New(NULL);
573
+ } else {
574
+ if (size == 0) {
575
+ // Get at the frozenset singleton of CPython and use it too. Some things
576
+ // rely on it being a singleton across the board.
577
+ static PyObject *empty_frozenset = NULL;
578
+
579
+ if (empty_frozenset == NULL) {
580
+ empty_frozenset = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, (PyObject *)&PyFrozenSet_Type,
581
+ Nuitka_Bytes_FromStringAndSize("", 0));
582
+ }
592
583
 
593
- if (c == 'S') {
594
- s = PySet_New(NULL);
584
+ s = empty_frozenset;
595
585
  } else {
596
- if (size == 0) {
597
- // Get at the frozenset singleton of CPython and use it too. Some things
598
- // rely on it being a singleton across the board.
599
- static PyObject *empty_frozenset = NULL;
600
-
601
- if (empty_frozenset == NULL) {
602
- empty_frozenset = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, (PyObject *)&PyFrozenSet_Type,
603
- Nuitka_Bytes_FromStringAndSize("", 0));
604
- }
605
-
606
- s = empty_frozenset;
607
- } else {
608
- s = PyFrozenSet_New(NULL);
609
- }
586
+ s = PyFrozenSet_New(NULL);
610
587
  }
588
+ }
611
589
 
612
- if (size > 0) {
613
- NUITKA_DYNAMIC_ARRAY_DECL(values, PyObject *, size);
590
+ if (size > 0) {
591
+ NUITKA_DYNAMIC_ARRAY_DECL(values, PyObject *, size);
614
592
 
615
- data = _unpackBlobConstants(tstate, &values[0], data, size);
593
+ data = _unpackBlobConstants(tstate, &values[0], data, size);
616
594
 
617
- for (int i = 0; i < size; i++) {
618
- PySet_Add(s, values[i]);
619
- }
595
+ for (int i = 0; i < size; i++) {
596
+ PySet_Add(s, values[i]);
620
597
  }
598
+ }
621
599
 
622
- // sets are cached globally too.
623
- if (c == 'S') {
624
- insertToDictCacheForcedHash(set_cache, &s, (hashfunc)our_set_hash, (richcmpfunc)our_set_richcompare);
625
- } else {
626
- insertToDictCacheForcedHash(frozenset_cache, &s, (hashfunc)our_set_hash,
627
- (richcmpfunc)our_set_richcompare);
628
- }
600
+ // sets are cached globally too.
601
+ if (c == 'S') {
602
+ insertToDictCacheForcedHash(set_cache, &s, (hashfunc)our_set_hash, (richcmpfunc)our_set_richcompare);
603
+ } else {
604
+ insertToDictCacheForcedHash(frozenset_cache, &s, (hashfunc)our_set_hash, (richcmpfunc)our_set_richcompare);
605
+ }
629
606
 
630
- *output = s;
631
- is_object = true;
607
+ *output = s;
608
+ is_object = true;
632
609
 
633
- break;
634
- }
610
+ break;
611
+ }
635
612
  #if PYTHON_VERSION < 0x300
636
- case 'i': {
637
- // TODO: Use fixed sizes for small values, e.g. byte sized.
638
- long value = unpackValueLong(&data);
613
+ case 'I':
614
+ case 'i': {
615
+ long value = (long)_unpackVariableLength(&data);
616
+ if (c == 'I') {
617
+ value = -value;
618
+ }
639
619
 
640
- PyObject *i = PyInt_FromLong(value);
620
+ PyObject *i = PyInt_FromLong(value);
641
621
 
642
- insertToDictCache(int_cache, &i);
622
+ insertToDictCache(int_cache, &i);
643
623
 
644
- *output = i;
645
- is_object = true;
624
+ *output = i;
625
+ is_object = true;
646
626
 
647
- break;
648
- }
627
+ break;
628
+ }
649
629
  #endif
650
- case 'l': {
651
- // TODO: Use fixed sizes for small values, e.g. byte, word sized.
652
- long value = unpackValueLong(&data);
630
+ case 'l':
631
+ case 'q': {
632
+ // Positive/negative integer value with abs value < 2**31
633
+ uint64_t value = _unpackVariableLength(&data);
653
634
 
654
- PyObject *l = Nuitka_LongFromCLong(value);
635
+ PyObject *l = Nuitka_LongFromCLong((c == 'l') ? ((long)value) : (-(long)value));
636
+ assert(l != NULL);
655
637
 
656
- // Avoid the long cache, won't do anything useful for small ints
638
+ // Avoid the long cache, won't do anything useful for small ints
657
639
  #if PYTHON_VERSION >= 0x300
658
- if (value < NUITKA_STATIC_SMALLINT_VALUE_MIN || value >= NUITKA_STATIC_SMALLINT_VALUE_MAX)
640
+ if (value < NUITKA_STATIC_SMALLINT_VALUE_MIN || value >= NUITKA_STATIC_SMALLINT_VALUE_MAX)
659
641
  #endif
660
- {
661
- insertToDictCache(long_cache, &l);
662
- }
663
-
664
- *output = l;
665
- is_object = true;
666
-
667
- break;
668
- }
669
- case 'q': {
670
- long long value = unpackValueLongLong(&data);
671
-
672
- PyObject *l = PyLong_FromLongLong(value);
673
-
642
+ {
674
643
  insertToDictCache(long_cache, &l);
644
+ }
675
645
 
676
- *output = l;
677
- is_object = true;
646
+ *output = l;
647
+ is_object = true;
678
648
 
679
- break;
680
- }
681
- case 'g': {
682
- PyObject *result = PyLong_FromLong(0);
649
+ break;
650
+ }
651
+ case 'G':
652
+ case 'g': {
653
+ PyObject *result = Nuitka_PyLong_FromLong(0);
683
654
 
684
- unsigned char sign = *data++;
685
- int size = unpackValueInt(&data);
655
+ int size = (int)_unpackVariableLength(&data);
686
656
 
687
- PyObject *shift = PyLong_FromLong(8 * sizeof(unsigned long long));
657
+ PyObject *shift = Nuitka_PyLong_FromLong(31);
688
658
 
689
- for (int i = 0; i < size; i++) {
690
- result = PyNumber_InPlaceLshift(result, shift);
659
+ for (int i = 0; i < size; i++) {
660
+ result = PyNumber_InPlaceLshift(result, shift);
691
661
 
692
- unsigned long long value = unpackValueUnsignedLongLong(&data);
693
- PyObject *part = PyLong_FromUnsignedLongLong(value);
694
- result = PyNumber_InPlaceAdd(result, part);
695
- Py_DECREF(part);
696
- }
662
+ uint64_t value = _unpackVariableLength(&data);
663
+ PyObject *part = Nuitka_LongFromCLong((long)value);
664
+ assert(part != NULL);
665
+ result = PyNumber_InPlaceAdd(result, part);
666
+ Py_DECREF(part);
667
+ }
697
668
 
698
- Py_DECREF(shift);
669
+ Py_DECREF(shift);
699
670
 
700
- if (sign == '-') {
701
- // TODO: There is a negate function
702
- PyObject *neg = PyLong_FromLong(-1);
703
- result = PyNumber_InPlaceMultiply(result, neg);
704
- Py_DECREF(neg);
705
- }
671
+ if (c == 'G') {
672
+ Nuitka_LongSetSignNegative(result);
673
+ }
706
674
 
707
- insertToDictCache(long_cache, &result);
675
+ insertToDictCache(long_cache, &result);
708
676
 
709
- *output = result;
710
- is_object = true;
677
+ *output = result;
678
+ is_object = true;
711
679
 
712
- break;
713
- }
714
- case 'f': {
715
- double value = unpackValueFloat(&data);
680
+ break;
681
+ }
682
+ case 'f': {
683
+ double value = unpackValueFloat(&data);
716
684
 
717
- PyObject *f = PyFloat_FromDouble(value);
685
+ PyObject *f = PyFloat_FromDouble(value);
718
686
 
719
- // Floats are cached globally too.
720
- insertToDictCacheForcedHash(float_cache, &f, NULL, (richcmpfunc)our_float_richcompare);
687
+ // Floats are cached globally too.
688
+ insertToDictCacheForcedHash(float_cache, &f, NULL, (richcmpfunc)our_float_richcompare);
721
689
 
722
- *output = f;
723
- is_object = true;
690
+ *output = f;
691
+ is_object = true;
724
692
 
725
- break;
726
- }
727
- case 'j': {
728
- double real = unpackValueFloat(&data);
729
- double imag = unpackValueFloat(&data);
693
+ break;
694
+ }
695
+ case 'j': {
696
+ double real = unpackValueFloat(&data);
697
+ double imag = unpackValueFloat(&data);
730
698
 
731
- *output = PyComplex_FromDoubles(real, imag);
732
- is_object = true;
699
+ *output = PyComplex_FromDoubles(real, imag);
700
+ is_object = true;
733
701
 
734
- break;
735
- }
736
- case 'J': {
737
- PyObject *parts[2];
702
+ break;
703
+ }
704
+ case 'J': {
705
+ PyObject *parts[2];
738
706
 
739
- // Complex via float is done for ones that are 0, nan, float.
740
- data = _unpackBlobConstants(tstate, &parts[0], data, 2);
707
+ // Complex via float is done for ones that are 0, nan, float.
708
+ data = _unpackBlobConstants(tstate, &parts[0], data, 2);
741
709
 
742
- *output = BUILTIN_COMPLEX2(tstate, parts[0], parts[1]);
743
- is_object = true;
710
+ *output = BUILTIN_COMPLEX2(tstate, parts[0], parts[1]);
711
+ is_object = true;
744
712
 
745
- break;
746
- }
713
+ break;
714
+ }
747
715
  #if PYTHON_VERSION < 0x300
748
- case 'a':
749
- case 'c': {
750
- // Python2 str, potentially attribute, zero terminated.
751
- size_t size = strlen((const char *)data);
716
+ case 'a':
717
+ case 'c': {
718
+ // Python2 str, potentially attribute, zero terminated.
719
+ size_t size = strlen((const char *)data);
752
720
 
753
- PyObject *s = PyString_FromStringAndSize((const char *)data, size);
754
- CHECK_OBJECT(s);
721
+ PyObject *s = PyString_FromStringAndSize((const char *)data, size);
722
+ CHECK_OBJECT(s);
755
723
 
756
- data += size + 1;
724
+ data += size + 1;
757
725
 
758
- if (c == 'a') {
759
- PyString_InternInPlace(&s);
760
- }
726
+ if (c == 'a') {
727
+ PyString_InternInPlace(&s);
728
+ }
761
729
 
762
- *output = s;
763
- is_object = true;
730
+ *output = s;
731
+ is_object = true;
764
732
 
765
- break;
766
- }
733
+ break;
734
+ }
767
735
  #else
768
- case 'c': {
769
- // Python3 bytes, zero terminated.
770
- size_t size = strlen((const char *)data);
736
+ case 'c': {
737
+ // Python3 bytes, zero terminated.
738
+ size_t size = strlen((const char *)data);
771
739
 
772
- PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, size);
773
- CHECK_OBJECT(b);
740
+ PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, size);
741
+ CHECK_OBJECT(b);
774
742
 
775
- data += size + 1;
743
+ data += size + 1;
776
744
 
777
- // Empty bytes value is here as well.
778
- if (size > 1) {
779
- insertToDictCache(bytes_cache, &b);
780
- }
745
+ // Empty bytes value is here as well.
746
+ if (size > 1) {
747
+ insertToDictCache(bytes_cache, &b);
748
+ }
781
749
 
782
- *output = b;
783
- is_object = true;
750
+ *output = b;
751
+ is_object = true;
784
752
 
785
- break;
786
- }
753
+ break;
754
+ }
787
755
  #endif
788
- case 'd': {
789
- // Python2 str length 1 str, potentially attribute, or Python3 single byte
756
+ case 'd': {
757
+ // Python2 str length 1 str, potentially attribute, or Python3 single byte
790
758
 
791
759
  #if PYTHON_VERSION < 0x300
792
- PyObject *s = PyString_FromStringAndSize((const char *)data, 1);
793
- data += 1;
794
- *output = s;
760
+ PyObject *s = PyString_FromStringAndSize((const char *)data, 1);
761
+ data += 1;
762
+ *output = s;
795
763
  #else
796
- PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, 1);
797
- data += 1;
798
- *output = b;
764
+ PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, 1);
765
+ data += 1;
766
+ *output = b;
799
767
  #endif
800
768
 
801
- is_object = true;
769
+ is_object = true;
802
770
 
803
- break;
804
- }
805
- case 'w': {
806
- // Python2 unicode, Python3 str length 1, potentially attribute in Python3
771
+ break;
772
+ }
773
+ case 'w': {
774
+ // Python2 unicode, Python3 str length 1, potentially attribute in Python3
807
775
 
808
- PyObject *u = PyUnicode_FromStringAndSize((const char *)data, 1);
809
- data += 1;
776
+ PyObject *u = PyUnicode_FromStringAndSize((const char *)data, 1);
777
+ data += 1;
810
778
 
811
- #if PYTHON_VERSION >= 0x300
812
- PyUnicode_InternInPlace(&u);
779
+ #if PYTHON_VERSION >= 0x3c7
780
+ _PyUnicode_InternImmortal(tstate->interp, &u);
781
+ #elif PYTHON_VERSION >= 0x300
782
+ PyUnicode_InternInPlace(&u);
813
783
  #else
814
- insertToDictCache(unicode_cache, &u);
784
+ insertToDictCache(unicode_cache, &u);
815
785
  #endif
816
786
 
817
- *output = u;
818
- is_object = true;
787
+ *output = u;
788
+ is_object = true;
819
789
 
820
- break;
821
- }
822
- case 'b': {
823
- // Python2 str or Python3 bytes, length indicated.
824
- int size = unpackValueInt(&data);
825
- assert(size > 1);
790
+ break;
791
+ }
792
+ case 'b': {
793
+ // Python2 str or Python3 bytes, length indicated.
794
+ int size = (int)_unpackVariableLength(&data);
795
+ assert(size > 1);
826
796
 
827
- PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, size);
828
- CHECK_OBJECT(b);
797
+ PyObject *b = Nuitka_Bytes_FromStringAndSize((const char *)data, size);
798
+ CHECK_OBJECT(b);
829
799
 
830
- data += size;
800
+ data += size;
831
801
 
832
802
  #if PYTHON_VERSION >= 0x300
833
- insertToDictCache(bytes_cache, &b);
803
+ insertToDictCache(bytes_cache, &b);
834
804
  #endif
835
805
 
836
- *output = b;
837
- is_object = true;
806
+ *output = b;
807
+ is_object = true;
838
808
 
839
- break;
840
- }
809
+ break;
810
+ }
841
811
 
842
- case 'B': {
843
- // TODO: Use fixed sizes for small, e.g. character values, and length vs. 0
844
- // termination.
845
- int size = unpackValueInt(&data);
812
+ case 'B': {
813
+ int size = (int)_unpackVariableLength(&data);
846
814
 
847
- PyObject *b = PyByteArray_FromStringAndSize((const char *)data, size);
848
- data += size;
815
+ PyObject *b = PyByteArray_FromStringAndSize((const char *)data, size);
816
+ data += size;
849
817
 
850
- *output = b;
851
- is_object = true;
818
+ *output = b;
819
+ is_object = true;
852
820
 
853
- break;
854
- }
821
+ break;
822
+ }
855
823
  #if PYTHON_VERSION >= 0x300
856
- case 'a': // Python3 attributes
824
+ case 'a': // Python3 attributes
857
825
  #endif
858
- case 'u': { // Python2 unicode, Python3 str, zero terminated.
859
- size_t size = strlen((const char *)data);
826
+ case 'u': { // Python2 unicode, Python3 str, zero terminated.
827
+ size_t size = strlen((const char *)data);
860
828
  #if PYTHON_VERSION < 0x300
861
- PyObject *u = PyUnicode_FromStringAndSize((const char *)data, size);
829
+ PyObject *u = PyUnicode_FromStringAndSize((const char *)data, size);
862
830
  #else
863
- PyObject *u = PyUnicode_DecodeUTF8((const char *)data, size, "surrogatepass");
831
+ PyObject *u = PyUnicode_DecodeUTF8((const char *)data, size, "surrogatepass");
864
832
  #endif
865
- data += size + 1;
833
+ data += size + 1;
866
834
 
867
- #if PYTHON_VERSION >= 0x300
868
- if (c == 'a') {
869
- PyUnicode_InternInPlace(&u);
870
- }
835
+ #if PYTHON_VERSION >= 0x3c7
836
+ _PyUnicode_InternImmortal(tstate->interp, &u);
837
+ #elif PYTHON_VERSION >= 0x300
838
+ if (c == 'a') {
839
+ PyUnicode_InternInPlace(&u);
840
+ }
871
841
  #else
872
- insertToDictCache(unicode_cache, &u);
842
+ insertToDictCache(unicode_cache, &u);
873
843
  #endif
874
844
 
875
- *output = u;
876
- is_object = true;
845
+ *output = u;
846
+ is_object = true;
877
847
 
878
- break;
879
- }
880
- case 'v': {
881
- int size = unpackValueInt(&data);
848
+ break;
849
+ }
850
+ case 'v': {
851
+ int size = (int)_unpackVariableLength(&data);
882
852
 
883
853
  #if PYTHON_VERSION < 0x300
884
- PyObject *u = PyUnicode_FromStringAndSize((const char *)data, size);
854
+ PyObject *u = PyUnicode_FromStringAndSize((const char *)data, size);
885
855
  #else
886
- PyObject *u = PyUnicode_DecodeUTF8((const char *)data, size, "surrogatepass");
856
+ PyObject *u = PyUnicode_DecodeUTF8((const char *)data, size, "surrogatepass");
887
857
  #endif
888
- data += size;
858
+ data += size;
889
859
 
890
860
  #if PYTHON_VERSION < 0x300
891
- insertToDictCache(unicode_cache, &u);
861
+ insertToDictCache(unicode_cache, &u);
892
862
  #endif
893
863
 
894
- *output = u;
895
- is_object = true;
864
+ *output = u;
865
+ is_object = true;
896
866
 
897
- break;
898
- }
899
- case 'n': {
900
- *output = Py_None;
901
- is_object = true;
867
+ break;
868
+ }
869
+ case 'n': {
870
+ *output = Py_None;
871
+ is_object = true;
902
872
 
903
- break;
904
- }
905
- case 't': {
906
- *output = Py_True;
907
- is_object = true;
873
+ break;
874
+ }
875
+ case 't': {
876
+ *output = Py_True;
877
+ is_object = true;
908
878
 
909
- break;
910
- }
911
- case 'F': {
912
- *output = Py_False;
913
- is_object = true;
879
+ break;
880
+ }
881
+ case 'F': {
882
+ *output = Py_False;
883
+ is_object = true;
914
884
 
915
- break;
916
- }
917
- case ':': {
918
- // Slice object
919
- PyObject *items[3];
920
- data = _unpackBlobConstants(tstate, &items[0], data, 3);
885
+ break;
886
+ }
887
+ case ':': {
888
+ // Slice object
889
+ PyObject *items[3];
890
+ data = _unpackBlobConstants(tstate, &items[0], data, 3);
921
891
 
922
- PyObject *s = MAKE_SLICE_OBJECT3(items[0], items[1], items[2]);
892
+ PyObject *s = MAKE_SLICE_OBJECT3(tstate, items[0], items[1], items[2]);
923
893
 
924
- *output = s;
925
- is_object = true;
894
+ *output = s;
895
+ is_object = true;
926
896
 
927
- break;
928
- }
929
- case ';': {
930
- // (x)range objects
897
+ break;
898
+ }
899
+ case ';': {
900
+ // (x)range objects
901
+ PyObject *items[3];
902
+ data = _unpackBlobConstants(tstate, &items[0], data, 3);
931
903
  #if PYTHON_VERSION < 0x300
932
- long start = unpackValueLong(&data);
933
- long stop = unpackValueLong(&data);
934
- long step = unpackValueLong(&data);
904
+ assert(PyInt_CheckExact(items[0]));
905
+ assert(PyInt_CheckExact(items[1]));
906
+ assert(PyInt_CheckExact(items[2]));
935
907
 
936
- PyObject *s = MAKE_XRANGE(tstate, start, stop, step);
937
- #else
938
- PyObject *items[3];
939
- data = _unpackBlobConstants(tstate, &items[0], data, 3);
908
+ long start = PyInt_AS_LONG(items[0]);
909
+ long stop = PyInt_AS_LONG(items[1]);
910
+ long step = PyInt_AS_LONG(items[2]);
940
911
 
941
- PyObject *s = BUILTIN_XRANGE3(tstate, items[0], items[1], items[2]);
912
+ PyObject *s = MAKE_XRANGE(tstate, start, stop, step);
913
+ #else
914
+ PyObject *s = BUILTIN_XRANGE3(tstate, items[0], items[1], items[2]);
942
915
  #endif
943
- *output = s;
944
- is_object = true;
945
-
946
- break;
947
- }
948
- case 'M': {
949
- // Anonymous builtin by table index value.
950
- unsigned char anon_index = *data++;
916
+ *output = s;
917
+ is_object = true;
951
918
 
952
- *output = _unpackAnonValue(anon_index);
953
- is_object = true;
919
+ break;
920
+ }
921
+ case 'M': {
922
+ // Anonymous builtin by table index value.
923
+ unsigned char anon_index = *data++;
954
924
 
955
- break;
956
- }
957
- case 'Q': {
958
- // Anonymous builtin by table index value.
959
- unsigned char special_index = *data++;
925
+ *output = _unpackAnonValue(anon_index);
926
+ is_object = true;
960
927
 
961
- *output = _unpackSpecialValue(special_index);
962
- is_object = true;
928
+ break;
929
+ }
930
+ case 'Q': {
931
+ // Anonymous builtin by table index value.
932
+ unsigned char special_index = *data++;
963
933
 
964
- break;
965
- }
966
- case 'O': {
967
- // Builtin by name. TODO: Define number table shared by C and Python
968
- // serialization to avoid using strings here.
969
- char const *builtin_name = (char const *)data;
970
- data = _unpackValueCString(data);
934
+ *output = _unpackSpecialValue(special_index);
935
+ is_object = true;
971
936
 
972
- *output = PyObject_GetAttrString((PyObject *)builtin_module, builtin_name);
973
- is_object = true;
937
+ break;
938
+ }
939
+ case 'O': {
940
+ // Builtin by name. TODO: Define number table shared by C and Python
941
+ // serialization to avoid using strings here.
942
+ char const *builtin_name = (char const *)data;
943
+ data = _unpackValueCString(data);
974
944
 
975
- break;
976
- }
977
- case 'E': {
978
- // Builtin exception by name. TODO: Define number table shared by C and Python
979
- // serialization to avoid using strings here.
980
- char const *builtin_exception_name = (char const *)data;
981
- data = _unpackValueCString(data);
945
+ *output = PyObject_GetAttrString((PyObject *)builtin_module, builtin_name);
946
+ is_object = true;
982
947
 
983
- *output = PyObject_GetAttrString((PyObject *)builtin_module, builtin_exception_name);
984
- is_object = true;
948
+ break;
949
+ }
950
+ case 'E': {
951
+ // Builtin exception by name. TODO: Define number table shared by C and Python
952
+ // serialization to avoid using strings here.
953
+ char const *builtin_exception_name = (char const *)data;
954
+ data = _unpackValueCString(data);
985
955
 
986
- break;
987
- }
988
- case 'Z': {
989
- unsigned char v = *data++;
956
+ *output = PyObject_GetAttrString((PyObject *)builtin_module, builtin_exception_name);
957
+ is_object = true;
990
958
 
991
- PyObject *z = NULL;
959
+ break;
960
+ }
961
+ case 'Z': {
962
+ unsigned char v = *data++;
992
963
 
993
- switch (v) {
994
- case 0: {
995
- static PyObject *_const_float_0_0 = NULL;
964
+ PyObject *z = NULL;
996
965
 
997
- if (_const_float_0_0 == NULL) {
998
- _const_float_0_0 = PyFloat_FromDouble(0.0);
999
- }
1000
- z = _const_float_0_0;
966
+ switch (v) {
967
+ case 0: {
968
+ static PyObject *_const_float_0_0 = NULL;
1001
969
 
1002
- break;
970
+ if (_const_float_0_0 == NULL) {
971
+ _const_float_0_0 = PyFloat_FromDouble(0.0);
1003
972
  }
1004
- case 1: {
1005
- static PyObject *_const_float_minus_0_0 = NULL;
973
+ z = _const_float_0_0;
1006
974
 
1007
- if (_const_float_minus_0_0 == NULL) {
1008
- _const_float_minus_0_0 = PyFloat_FromDouble(0.0);
975
+ break;
976
+ }
977
+ case 1: {
978
+ static PyObject *_const_float_minus_0_0 = NULL;
1009
979
 
1010
- // Older Python3 has variable signs from C, so be explicit about it.
1011
- PyFloat_SET_DOUBLE(_const_float_minus_0_0,
1012
- copysign(PyFloat_AS_DOUBLE(_const_float_minus_0_0), -1.0));
1013
- }
1014
- z = _const_float_minus_0_0;
980
+ if (_const_float_minus_0_0 == NULL) {
981
+ _const_float_minus_0_0 = PyFloat_FromDouble(0.0);
1015
982
 
1016
- break;
983
+ // Older Python3 has variable signs from C, so be explicit about it.
984
+ PyFloat_SET_DOUBLE(_const_float_minus_0_0, copysign(PyFloat_AS_DOUBLE(_const_float_minus_0_0), -1.0));
1017
985
  }
986
+ z = _const_float_minus_0_0;
1018
987
 
1019
- case 2: {
1020
- static PyObject *_const_float_plus_nan = NULL;
988
+ break;
989
+ }
1021
990
 
1022
- if (_const_float_plus_nan == NULL) {
1023
- _const_float_plus_nan = PyFloat_FromDouble(Py_NAN);
991
+ case 2: {
992
+ static PyObject *_const_float_plus_nan = NULL;
1024
993
 
1025
- // Older Python3 has variable signs for NaN from C, so be explicit about it.
1026
- PyFloat_SET_DOUBLE(_const_float_plus_nan, copysign(PyFloat_AS_DOUBLE(_const_float_plus_nan), 1.0));
1027
- }
1028
- z = _const_float_plus_nan;
994
+ if (_const_float_plus_nan == NULL) {
995
+ _const_float_plus_nan = PyFloat_FromDouble(Py_NAN);
1029
996
 
1030
- break;
997
+ // Older Python3 has variable signs for NaN from C, so be explicit about it.
998
+ PyFloat_SET_DOUBLE(_const_float_plus_nan, copysign(PyFloat_AS_DOUBLE(_const_float_plus_nan), 1.0));
1031
999
  }
1032
- case 3: {
1033
- static PyObject *_const_float_minus_nan = NULL;
1000
+ z = _const_float_plus_nan;
1034
1001
 
1035
- if (_const_float_minus_nan == NULL) {
1036
- _const_float_minus_nan = PyFloat_FromDouble(Py_NAN);
1002
+ break;
1003
+ }
1004
+ case 3: {
1005
+ static PyObject *_const_float_minus_nan = NULL;
1037
1006
 
1038
- // Older Python3 has variable signs for NaN from C, so be explicit about it.
1039
- PyFloat_SET_DOUBLE(_const_float_minus_nan,
1040
- copysign(PyFloat_AS_DOUBLE(_const_float_minus_nan), -1.0));
1041
- }
1042
- z = _const_float_minus_nan;
1007
+ if (_const_float_minus_nan == NULL) {
1008
+ _const_float_minus_nan = PyFloat_FromDouble(Py_NAN);
1043
1009
 
1044
- break;
1010
+ // Older Python3 has variable signs for NaN from C, so be explicit about it.
1011
+ PyFloat_SET_DOUBLE(_const_float_minus_nan, copysign(PyFloat_AS_DOUBLE(_const_float_minus_nan), -1.0));
1045
1012
  }
1046
- case 4: {
1047
- static PyObject *_const_float_plus_inf = NULL;
1013
+ z = _const_float_minus_nan;
1048
1014
 
1049
- if (_const_float_plus_inf == NULL) {
1050
- _const_float_plus_inf = PyFloat_FromDouble(Py_HUGE_VAL);
1015
+ break;
1016
+ }
1017
+ case 4: {
1018
+ static PyObject *_const_float_plus_inf = NULL;
1051
1019
 
1052
- // Older Python3 has variable signs from C, so be explicit about it.
1053
- PyFloat_SET_DOUBLE(_const_float_plus_inf, copysign(PyFloat_AS_DOUBLE(_const_float_plus_inf), 1.0));
1054
- }
1055
- z = _const_float_plus_inf;
1020
+ if (_const_float_plus_inf == NULL) {
1021
+ _const_float_plus_inf = PyFloat_FromDouble(Py_HUGE_VAL);
1056
1022
 
1057
- break;
1023
+ // Older Python3 has variable signs from C, so be explicit about it.
1024
+ PyFloat_SET_DOUBLE(_const_float_plus_inf, copysign(PyFloat_AS_DOUBLE(_const_float_plus_inf), 1.0));
1058
1025
  }
1059
- case 5: {
1060
- static PyObject *_const_float_minus_inf = NULL;
1026
+ z = _const_float_plus_inf;
1061
1027
 
1062
- if (_const_float_minus_inf == NULL) {
1063
- _const_float_minus_inf = PyFloat_FromDouble(Py_HUGE_VAL);
1028
+ break;
1029
+ }
1030
+ case 5: {
1031
+ static PyObject *_const_float_minus_inf = NULL;
1064
1032
 
1065
- // Older Python3 has variable signs from C, so be explicit about it.
1066
- PyFloat_SET_DOUBLE(_const_float_minus_inf,
1067
- copysign(PyFloat_AS_DOUBLE(_const_float_minus_inf), -1.0));
1068
- }
1069
- z = _const_float_minus_inf;
1033
+ if (_const_float_minus_inf == NULL) {
1034
+ _const_float_minus_inf = PyFloat_FromDouble(Py_HUGE_VAL);
1070
1035
 
1071
- break;
1072
- }
1073
- default: {
1074
- PRINT_FORMAT("Missing decoding for %d\n", (int)c);
1075
- NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1076
- }
1036
+ // Older Python3 has variable signs from C, so be explicit about it.
1037
+ PyFloat_SET_DOUBLE(_const_float_minus_inf, copysign(PyFloat_AS_DOUBLE(_const_float_minus_inf), -1.0));
1077
1038
  }
1078
-
1079
- // Floats are cached globally too.
1080
- insertToDictCacheForcedHash(float_cache, &z, NULL, (richcmpfunc)our_float_richcompare);
1081
-
1082
- *output = z;
1083
- is_object = true;
1039
+ z = _const_float_minus_inf;
1084
1040
 
1085
1041
  break;
1086
1042
  }
1087
- case 'X': {
1088
- // Blob data pointer, user knowns size.
1089
- int size = unpackValueInt(&data);
1043
+ default: {
1044
+ PRINT_FORMAT("Missing decoding for %d\n", (int)c);
1045
+ NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1046
+ }
1047
+ }
1090
1048
 
1091
- *output = (PyObject *)data;
1092
- is_object = false;
1049
+ // Floats are cached globally too.
1050
+ insertToDictCacheForcedHash(float_cache, &z, NULL, (richcmpfunc)our_float_richcompare);
1093
1051
 
1094
- data += size;
1052
+ *output = z;
1053
+ is_object = true;
1095
1054
 
1096
- break;
1097
- }
1055
+ break;
1056
+ }
1057
+ case 'X': {
1058
+ // Blob data pointer, user knowns size.
1059
+ uint64_t size = _unpackVariableLength(&data);
1060
+
1061
+ *output = (PyObject *)data;
1062
+ is_object = false;
1063
+
1064
+ data += size;
1065
+
1066
+ break;
1067
+ }
1098
1068
  #if PYTHON_VERSION >= 0x390
1099
- case 'G': {
1100
- // GenericAlias object
1101
- PyObject *items[2];
1102
- data = _unpackBlobConstants(tstate, &items[0], data, 2);
1069
+ case 'A': {
1070
+ // GenericAlias object
1071
+ PyObject *items[2];
1072
+ data = _unpackBlobConstants(tstate, &items[0], data, 2);
1103
1073
 
1104
- PyObject *g = Py_GenericAlias(items[0], items[1]);
1074
+ PyObject *g = Py_GenericAlias(items[0], items[1]);
1105
1075
 
1106
- // TODO: Maybe deduplicate.
1107
- *output = g;
1076
+ // TODO: Maybe deduplicate.
1077
+ *output = g;
1108
1078
 
1109
- is_object = true;
1110
- break;
1111
- }
1079
+ is_object = true;
1080
+ break;
1081
+ }
1112
1082
  #endif
1113
1083
  #if PYTHON_VERSION >= 0x3a0
1114
- case 'H': {
1115
- // UnionType object
1116
- PyObject *args;
1117
- data = _unpackBlobConstants(tstate, &args, data, 1);
1084
+ case 'H': {
1085
+ // UnionType object
1086
+ PyObject *args;
1087
+ data = _unpackBlobConstants(tstate, &args, data, 1);
1118
1088
 
1119
- PyObject *union_type = MAKE_UNION_TYPE(args);
1089
+ PyObject *union_type = MAKE_UNION_TYPE(args);
1120
1090
 
1121
- // TODO: Maybe deduplicate.
1122
- *output = union_type;
1091
+ // TODO: Maybe deduplicate.
1092
+ *output = union_type;
1123
1093
 
1124
- is_object = true;
1125
- break;
1126
- }
1094
+ is_object = true;
1095
+ break;
1096
+ }
1127
1097
  #endif
1128
- case '.': {
1129
- PRINT_FORMAT("Missing values %d\n", count - _i);
1130
- NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1131
- }
1132
- default:
1133
- PRINT_FORMAT("Missing decoding for %d\n", (int)c);
1134
- NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1135
- }
1098
+ case 'C': {
1099
+ // Code object, without the filename, we let the module do that, depending on
1100
+ // the source mode.
1101
+ int line = unpackValueInt(&data);
1102
+ int flags = unpackValueInt(&data);
1103
+
1104
+ PyObject *function_name;
1105
+ data = _unpackBlobConstant(tstate, &function_name, data);
1106
+ // TODO: Version specific if we have this
1107
+ #if PYTHON_VERSION >= 0x3b0
1108
+ PyObject *function_qualname;
1109
+ data = _unpackBlobConstant(tstate, &function_qualname, data);
1110
+ #endif
1111
+ PyObject *arg_names;
1112
+ data = _unpackBlobConstant(tstate, &arg_names, data);
1113
+ PyObject *free_vars;
1114
+ data = _unpackBlobConstant(tstate, &free_vars, data);
1115
+ int arg_count = unpackValueInt(&data);
1116
+
1117
+ #if PYTHON_VERSION >= 0x300
1118
+ int kw_only_count = unpackValueInt(&data);
1119
+ #if PYTHON_VERSION >= 0x380
1120
+ int pos_only_count = unpackValueInt(&data);
1121
+ #endif
1122
+ #endif
1123
+ // Filename will be supplied later during usage.
1124
+ *output = (PyObject *)MAKE_CODE_OBJECT(Py_None, line, flags, function_name, function_qualname, arg_names,
1125
+ free_vars, arg_count, kw_only_count, pos_only_count);
1126
+
1127
+ is_object = true;
1128
+ break;
1129
+ }
1130
+ case '.': {
1131
+ PRINT_STRING("Missing blob values\n");
1132
+ NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1133
+ }
1134
+ default:
1135
+ PRINT_FORMAT("Missing decoding for %d\n", (int)c);
1136
+ NUITKA_CANNOT_GET_HERE("Corrupt constants blob");
1137
+ }
1136
1138
 
1137
1139
  #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1138
- printf("Size for %c was %d\n", c, data - data_old);
1140
+ printf("Size for %c was %d\n", c, data - data_old);
1139
1141
  #endif
1140
1142
 
1141
- // Discourage in-place operations from modifying these. These
1142
- // might be put into containers, therefore take 2 refs to be
1143
- // accounting for the container too.
1144
- if (is_object == true) {
1145
- CHECK_OBJECT(*output);
1143
+ // Discourage in-place operations from modifying these. These
1144
+ // might be put into containers, therefore take 2 refs to be
1145
+ // accounting for the container too.
1146
+ if (is_object == true) {
1147
+ CHECK_OBJECT(*output);
1146
1148
 
1147
- Py_INCREF(*output);
1148
- Py_INCREF(*output);
1149
- }
1149
+ #if PYTHON_VERSION < 0x3c0
1150
+ Py_INCREF(*output);
1151
+ Py_INCREF(*output);
1152
+ #else
1153
+ Py_SET_REFCNT_IMMORTAL(*output);
1154
+ #endif
1155
+ }
1150
1156
 
1151
- // PRINT_ITEM(*output);
1152
- // PRINT_NEW_LINE();
1157
+ return data;
1158
+ }
1159
+
1160
+ static unsigned char const *_unpackBlobConstants(PyThreadState *tstate, PyObject **output, unsigned char const *data,
1161
+ int count) {
1162
+ for (int _i = 0; _i < count; _i++) {
1163
+ data = _unpackBlobConstant(tstate, output, data);
1153
1164
 
1154
1165
  output += 1;
1155
1166
  }
@@ -1214,11 +1225,11 @@ unsigned char *findMacOSBinarySection(void) {
1214
1225
  #endif
1215
1226
 
1216
1227
  void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *name) {
1217
- assert(PyThreadState_GET() == tstate);
1218
-
1219
1228
  static bool init_done = false;
1220
1229
 
1221
1230
  if (init_done == false) {
1231
+ NUITKA_PRINT_TIMING("loadConstantsBlob(): One time init.");
1232
+
1222
1233
  #ifdef _NUITKA_EXPERIMENTAL_DEBUG_CONSTANTS
1223
1234
  printf("loadConstantsBlob '%s' one time init\n", name);
1224
1235
  #endif
@@ -1242,9 +1253,10 @@ void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *nam
1242
1253
 
1243
1254
  assert(constant_bin);
1244
1255
  #endif
1245
-
1256
+ NUITKA_PRINT_TIMING("loadConstantsBlob(): Found blob, decoding now.");
1246
1257
  DECODE(constant_bin);
1247
1258
 
1259
+ NUITKA_PRINT_TIMING("loadConstantsBlob(): CRC32 that blob for correctness.");
1248
1260
  uint32_t hash = unpackValueUint32(&constant_bin);
1249
1261
  uint32_t size = unpackValueUint32(&constant_bin);
1250
1262
 
@@ -1261,6 +1273,8 @@ void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *nam
1261
1273
  printf("Checked CRC32 to match hash %u size %u\n", hash, size);
1262
1274
  #endif
1263
1275
 
1276
+ NUITKA_PRINT_TIMING("loadConstantsBlob(): One time init complete.");
1277
+
1264
1278
  init_done = true;
1265
1279
  }
1266
1280
 
@@ -1297,3 +1311,18 @@ void loadConstantsBlob(PyThreadState *tstate, PyObject **output, char const *nam
1297
1311
 
1298
1312
  unpackBlobConstants(tstate, output, w);
1299
1313
  }
1314
+
1315
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
1316
+ // integrates with CPython, but also works on its own.
1317
+ //
1318
+ // Licensed under the Apache License, Version 2.0 (the "License");
1319
+ // you may not use this file except in compliance with the License.
1320
+ // You may obtain a copy of the License at
1321
+ //
1322
+ // http://www.apache.org/licenses/LICENSE-2.0
1323
+ //
1324
+ // Unless required by applicable law or agreed to in writing, software
1325
+ // distributed under the License is distributed on an "AS IS" BASIS,
1326
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327
+ // See the License for the specific language governing permissions and
1328
+ // limitations under the License.