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