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
  /* WARNING, this code is GENERATED. Modify the template HelperOperationInplace.c.j2 instead! */
19
4
 
20
5
  /* This file is included from another C file, help IDEs to still parse it on its own. */
@@ -131,7 +116,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
131
116
  goto exit_inplace_result_object;
132
117
  }
133
118
 
134
- Py_DECREF(x);
119
+ Py_DECREF_IMMORTAL(x);
135
120
  }
136
121
 
137
122
  {
@@ -157,7 +142,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
157
142
  goto exit_inplace_result_object;
158
143
  }
159
144
 
160
- Py_DECREF(x);
145
+ Py_DECREF_IMMORTAL(x);
161
146
  }
162
147
 
163
148
  if (slot2 != NULL) {
@@ -168,7 +153,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
168
153
  goto exit_inplace_result_object;
169
154
  }
170
155
 
171
- Py_DECREF(x);
156
+ Py_DECREF_IMMORTAL(x);
172
157
  }
173
158
 
174
159
  #if PYTHON_VERSION < 0x300
@@ -260,7 +245,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
260
245
  }
261
246
  }
262
247
 
263
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'int'", type1->tp_name);
248
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'int'", type1->tp_name);
264
249
  goto exit_inplace_exception;
265
250
  }
266
251
 
@@ -407,7 +392,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
407
392
  goto exit_inplace_result_object;
408
393
  }
409
394
 
410
- Py_DECREF(x);
395
+ Py_DECREF_IMMORTAL(x);
411
396
  slot2 = NULL;
412
397
  }
413
398
  }
@@ -419,7 +404,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
419
404
  goto exit_inplace_result_object;
420
405
  }
421
406
 
422
- Py_DECREF(x);
407
+ Py_DECREF_IMMORTAL(x);
423
408
  }
424
409
 
425
410
  if (slot2 != NULL) {
@@ -430,7 +415,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
430
415
  goto exit_inplace_result_object;
431
416
  }
432
417
 
433
- Py_DECREF(x);
418
+ Py_DECREF_IMMORTAL(x);
434
419
  }
435
420
 
436
421
  #if PYTHON_VERSION < 0x300
@@ -512,7 +497,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
512
497
  // No inplace sequence repeat slot sq_inplace_concat available for this type.
513
498
  }
514
499
 
515
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'int' and '%s'", type2->tp_name);
500
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and '%s'", type2->tp_name);
516
501
  goto exit_inplace_exception;
517
502
  }
518
503
 
@@ -642,11 +627,11 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_LONG(PyObject **operand1, PyObjec
642
627
 
643
628
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
644
629
 
645
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
646
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
630
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
631
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
647
632
 
648
633
  if (Py_REFCNT(*operand1) == 1) {
649
- Nuitka_LongUpdateFromCLong(&*operand1, r);
634
+ Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
650
635
  goto exit_result_ok;
651
636
  } else {
652
637
  PyObject *obj = Nuitka_LongFromCLong(r);
@@ -659,16 +644,16 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_LONG(PyObject **operand1, PyObjec
659
644
  }
660
645
 
661
646
  if (Py_REFCNT(*operand1) == 1) {
662
- digit const *b_digits = operand2_long_object->ob_digit;
663
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
647
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
648
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
664
649
 
665
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
666
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
650
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
651
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
667
652
 
668
653
  if (a_negative) {
669
654
  if (b_negative) {
670
655
  *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
671
- Py_SET_SIZE(*operand1, -Py_ABS(Py_SIZE(*operand1)));
656
+ Nuitka_LongSetSignNegative(*operand1);
672
657
  } else {
673
658
  *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
674
659
  }
@@ -685,17 +670,17 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_LONG(PyObject **operand1, PyObjec
685
670
  {
686
671
  PyLongObject *z;
687
672
 
688
- digit const *a_digits = operand1_long_object->ob_digit;
689
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
690
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
691
- digit const *b_digits = operand2_long_object->ob_digit;
692
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
693
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
673
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
674
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
675
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
676
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
677
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
678
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
694
679
 
695
680
  if (a_negative) {
696
681
  if (b_negative) {
697
682
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
698
- Py_SET_SIZE(z, -(Py_SIZE(z)));
683
+ Nuitka_LongFlipSign(z);
699
684
  } else {
700
685
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
701
686
  }
@@ -766,7 +751,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
766
751
  goto exit_inplace_result_object;
767
752
  }
768
753
 
769
- Py_DECREF(x);
754
+ Py_DECREF_IMMORTAL(x);
770
755
  }
771
756
 
772
757
  {
@@ -792,7 +777,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
792
777
  goto exit_inplace_result_object;
793
778
  }
794
779
 
795
- Py_DECREF(x);
780
+ Py_DECREF_IMMORTAL(x);
796
781
  }
797
782
 
798
783
  if (slot2 != NULL) {
@@ -803,7 +788,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
803
788
  goto exit_inplace_result_object;
804
789
  }
805
790
 
806
- Py_DECREF(x);
791
+ Py_DECREF_IMMORTAL(x);
807
792
  }
808
793
 
809
794
  #if PYTHON_VERSION < 0x300
@@ -896,9 +881,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
896
881
  }
897
882
 
898
883
  #if PYTHON_VERSION < 0x300
899
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'long'", type1->tp_name);
884
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'long'", type1->tp_name);
900
885
  #else
901
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'int'", type1->tp_name);
886
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'int'", type1->tp_name);
902
887
  #endif
903
888
  goto exit_inplace_exception;
904
889
  }
@@ -947,11 +932,11 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **operand1, PyObj
947
932
 
948
933
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
949
934
 
950
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
951
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
935
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
936
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
952
937
 
953
938
  if (Py_REFCNT(*operand1) == 1) {
954
- Nuitka_LongUpdateFromCLong(&*operand1, r);
939
+ Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
955
940
  goto exit_result_ok;
956
941
  } else {
957
942
  PyObject *obj = Nuitka_LongFromCLong(r);
@@ -964,16 +949,16 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **operand1, PyObj
964
949
  }
965
950
 
966
951
  if (Py_REFCNT(*operand1) == 1) {
967
- digit const *b_digits = operand2_long_object->ob_digit;
968
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
952
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
953
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
969
954
 
970
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
971
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
955
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
956
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
972
957
 
973
958
  if (a_negative) {
974
959
  if (b_negative) {
975
960
  *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
976
- Py_SET_SIZE(*operand1, -Py_ABS(Py_SIZE(*operand1)));
961
+ Nuitka_LongSetSignNegative(*operand1);
977
962
  } else {
978
963
  *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
979
964
  }
@@ -990,17 +975,17 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **operand1, PyObj
990
975
  {
991
976
  PyLongObject *z;
992
977
 
993
- digit const *a_digits = operand1_long_object->ob_digit;
994
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
995
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
996
- digit const *b_digits = operand2_long_object->ob_digit;
997
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
998
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
978
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
979
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
980
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
981
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
982
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
983
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
999
984
 
1000
985
  if (a_negative) {
1001
986
  if (b_negative) {
1002
987
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
1003
- Py_SET_SIZE(z, -(Py_SIZE(z)));
988
+ Nuitka_LongFlipSign(z);
1004
989
  } else {
1005
990
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
1006
991
  }
@@ -1089,7 +1074,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
1089
1074
  goto exit_inplace_result_object;
1090
1075
  }
1091
1076
 
1092
- Py_DECREF(x);
1077
+ Py_DECREF_IMMORTAL(x);
1093
1078
  slot2 = NULL;
1094
1079
  }
1095
1080
  }
@@ -1101,7 +1086,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
1101
1086
  goto exit_inplace_result_object;
1102
1087
  }
1103
1088
 
1104
- Py_DECREF(x);
1089
+ Py_DECREF_IMMORTAL(x);
1105
1090
  }
1106
1091
 
1107
1092
  if (slot2 != NULL) {
@@ -1112,7 +1097,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
1112
1097
  goto exit_inplace_result_object;
1113
1098
  }
1114
1099
 
1115
- Py_DECREF(x);
1100
+ Py_DECREF_IMMORTAL(x);
1116
1101
  }
1117
1102
 
1118
1103
  #if PYTHON_VERSION < 0x300
@@ -1195,9 +1180,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
1195
1180
  }
1196
1181
 
1197
1182
  #if PYTHON_VERSION < 0x300
1198
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'long' and '%s'", type2->tp_name);
1183
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'long' and '%s'", type2->tp_name);
1199
1184
  #else
1200
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'int' and '%s'", type2->tp_name);
1185
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and '%s'", type2->tp_name);
1201
1186
  #endif
1202
1187
  goto exit_inplace_exception;
1203
1188
  }
@@ -1246,11 +1231,11 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **operand1, PyObj
1246
1231
 
1247
1232
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
1248
1233
 
1249
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
1250
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
1234
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
1235
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
1251
1236
 
1252
1237
  if (Py_REFCNT(*operand1) == 1) {
1253
- Nuitka_LongUpdateFromCLong(&*operand1, r);
1238
+ Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
1254
1239
  goto exit_result_ok;
1255
1240
  } else {
1256
1241
  PyObject *obj = Nuitka_LongFromCLong(r);
@@ -1263,16 +1248,16 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **operand1, PyObj
1263
1248
  }
1264
1249
 
1265
1250
  if (Py_REFCNT(*operand1) == 1) {
1266
- digit const *b_digits = operand2_long_object->ob_digit;
1267
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
1251
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1252
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1268
1253
 
1269
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
1270
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
1254
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1255
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1271
1256
 
1272
1257
  if (a_negative) {
1273
1258
  if (b_negative) {
1274
1259
  *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
1275
- Py_SET_SIZE(*operand1, -Py_ABS(Py_SIZE(*operand1)));
1260
+ Nuitka_LongSetSignNegative(*operand1);
1276
1261
  } else {
1277
1262
  *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
1278
1263
  }
@@ -1289,17 +1274,17 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **operand1, PyObj
1289
1274
  {
1290
1275
  PyLongObject *z;
1291
1276
 
1292
- digit const *a_digits = operand1_long_object->ob_digit;
1293
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
1294
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
1295
- digit const *b_digits = operand2_long_object->ob_digit;
1296
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
1297
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
1277
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
1278
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
1279
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1280
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1281
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1282
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1298
1283
 
1299
1284
  if (a_negative) {
1300
1285
  if (b_negative) {
1301
1286
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
1302
- Py_SET_SIZE(z, -(Py_SIZE(z)));
1287
+ Nuitka_LongFlipSign(z);
1303
1288
  } else {
1304
1289
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
1305
1290
  }
@@ -1426,7 +1411,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
1426
1411
  goto exit_inplace_result_object;
1427
1412
  }
1428
1413
 
1429
- Py_DECREF(x);
1414
+ Py_DECREF_IMMORTAL(x);
1430
1415
  }
1431
1416
 
1432
1417
  {
@@ -1452,7 +1437,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
1452
1437
  goto exit_inplace_result_object;
1453
1438
  }
1454
1439
 
1455
- Py_DECREF(x);
1440
+ Py_DECREF_IMMORTAL(x);
1456
1441
  }
1457
1442
 
1458
1443
  if (slot2 != NULL) {
@@ -1463,7 +1448,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
1463
1448
  goto exit_inplace_result_object;
1464
1449
  }
1465
1450
 
1466
- Py_DECREF(x);
1451
+ Py_DECREF_IMMORTAL(x);
1467
1452
  }
1468
1453
 
1469
1454
  #if PYTHON_VERSION < 0x300
@@ -1555,7 +1540,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
1555
1540
  }
1556
1541
  }
1557
1542
 
1558
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'float'", type1->tp_name);
1543
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'float'", type1->tp_name);
1559
1544
  goto exit_inplace_exception;
1560
1545
  }
1561
1546
 
@@ -1675,7 +1660,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
1675
1660
  goto exit_inplace_result_object;
1676
1661
  }
1677
1662
 
1678
- Py_DECREF(x);
1663
+ Py_DECREF_IMMORTAL(x);
1679
1664
  slot2 = NULL;
1680
1665
  }
1681
1666
  }
@@ -1687,7 +1672,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
1687
1672
  goto exit_inplace_result_object;
1688
1673
  }
1689
1674
 
1690
- Py_DECREF(x);
1675
+ Py_DECREF_IMMORTAL(x);
1691
1676
  }
1692
1677
 
1693
1678
  if (slot2 != NULL) {
@@ -1698,7 +1683,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
1698
1683
  goto exit_inplace_result_object;
1699
1684
  }
1700
1685
 
1701
- Py_DECREF(x);
1686
+ Py_DECREF_IMMORTAL(x);
1702
1687
  }
1703
1688
 
1704
1689
  #if PYTHON_VERSION < 0x300
@@ -1780,7 +1765,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
1780
1765
  // No inplace sequence repeat slot sq_inplace_concat available for this type.
1781
1766
  }
1782
1767
 
1783
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'float' and '%s'", type2->tp_name);
1768
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'float' and '%s'", type2->tp_name);
1784
1769
  goto exit_inplace_exception;
1785
1770
  }
1786
1771
 
@@ -1893,7 +1878,7 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_LONG(PyObject **operand1, PyObje
1893
1878
  goto exit_inplace_result_object;
1894
1879
  }
1895
1880
 
1896
- Py_DECREF(x);
1881
+ Py_DECREF_IMMORTAL(x);
1897
1882
  }
1898
1883
 
1899
1884
  // Statically recognized that coercion is not possible with these types
@@ -1904,9 +1889,9 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_LONG(PyObject **operand1, PyObje
1904
1889
  }
1905
1890
 
1906
1891
  #if PYTHON_VERSION < 0x300
1907
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'float' and 'long'");
1892
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'float' and 'long'");
1908
1893
  #else
1909
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'float' and 'int'");
1894
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'float' and 'int'");
1910
1895
  #endif
1911
1896
  goto exit_inplace_exception;
1912
1897
  }
@@ -1972,7 +1957,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_FLOAT(PyObject **operand1, PyObje
1972
1957
  goto exit_inplace_result_object;
1973
1958
  }
1974
1959
 
1975
- Py_DECREF(x);
1960
+ Py_DECREF_IMMORTAL(x);
1976
1961
  }
1977
1962
 
1978
1963
  // Statically recognized that coercion is not possible with these types
@@ -1983,9 +1968,9 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_FLOAT(PyObject **operand1, PyObje
1983
1968
  }
1984
1969
 
1985
1970
  #if PYTHON_VERSION < 0x300
1986
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'long' and 'float'");
1971
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'long' and 'float'");
1987
1972
  #else
1988
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'int' and 'float'");
1973
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and 'float'");
1989
1974
  #endif
1990
1975
  goto exit_inplace_exception;
1991
1976
  }
@@ -2046,7 +2031,7 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_INT(PyObject **operand1, PyObjec
2046
2031
  goto exit_inplace_result_object;
2047
2032
  }
2048
2033
 
2049
- Py_DECREF(x);
2034
+ Py_DECREF_IMMORTAL(x);
2050
2035
  }
2051
2036
 
2052
2037
  // Statically recognized that coercion is not possible with these types
@@ -2056,7 +2041,7 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_INT(PyObject **operand1, PyObjec
2056
2041
  // No inplace sequence repeat slot sq_inplace_concat available for this type.
2057
2042
  }
2058
2043
 
2059
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'float' and 'int'");
2044
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'float' and 'int'");
2060
2045
  goto exit_inplace_exception;
2061
2046
  }
2062
2047
 
@@ -2123,7 +2108,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_FLOAT(PyObject **operand1, PyObjec
2123
2108
  goto exit_inplace_result_object;
2124
2109
  }
2125
2110
 
2126
- Py_DECREF(x);
2111
+ Py_DECREF_IMMORTAL(x);
2127
2112
  }
2128
2113
 
2129
2114
  // Statically recognized that coercion is not possible with these types
@@ -2133,7 +2118,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_FLOAT(PyObject **operand1, PyObjec
2133
2118
  // No inplace sequence repeat slot sq_inplace_concat available for this type.
2134
2119
  }
2135
2120
 
2136
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'int' and 'float'");
2121
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and 'float'");
2137
2122
  goto exit_inplace_exception;
2138
2123
  }
2139
2124
 
@@ -2194,7 +2179,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_INT(PyObject **operand1, PyObject
2194
2179
  goto exit_inplace_result_object;
2195
2180
  }
2196
2181
 
2197
- Py_DECREF(x);
2182
+ Py_DECREF_IMMORTAL(x);
2198
2183
  }
2199
2184
 
2200
2185
  // Statically recognized that coercion is not possible with these types
@@ -2204,7 +2189,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_INT(PyObject **operand1, PyObject
2204
2189
  // No inplace sequence repeat slot sq_inplace_concat available for this type.
2205
2190
  }
2206
2191
 
2207
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'long' and 'int'");
2192
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'long' and 'int'");
2208
2193
  goto exit_inplace_exception;
2209
2194
  }
2210
2195
 
@@ -2271,7 +2256,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_LONG(PyObject **operand1, PyObject
2271
2256
  goto exit_inplace_result_object;
2272
2257
  }
2273
2258
 
2274
- Py_DECREF(x);
2259
+ Py_DECREF_IMMORTAL(x);
2275
2260
  }
2276
2261
 
2277
2262
  // Statically recognized that coercion is not possible with these types
@@ -2281,7 +2266,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_LONG(PyObject **operand1, PyObject
2281
2266
  // No inplace sequence repeat slot sq_inplace_concat available for this type.
2282
2267
  }
2283
2268
 
2284
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: 'int' and 'long'");
2269
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: 'int' and 'long'");
2285
2270
  goto exit_inplace_exception;
2286
2271
  }
2287
2272
 
@@ -2408,11 +2393,11 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long o
2408
2393
 
2409
2394
  PyLongObject *operand1_long_object = (PyLongObject *)*operand1;
2410
2395
 
2411
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
2412
- long r = MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2;
2396
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
2397
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2);
2413
2398
 
2414
2399
  if (Py_REFCNT(*operand1) == 1) {
2415
- Nuitka_LongUpdateFromCLong(&*operand1, r);
2400
+ Nuitka_LongUpdateFromCLong(&*operand1, (long)r);
2416
2401
  goto exit_result_ok;
2417
2402
  } else {
2418
2403
  PyObject *obj = Nuitka_LongFromCLong(r);
@@ -2428,13 +2413,13 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long o
2428
2413
  digit const *b_digits = (digit *)&operand2;
2429
2414
  Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
2430
2415
 
2431
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
2416
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
2432
2417
  bool b_negative = operand2 < 0;
2433
2418
 
2434
2419
  if (a_negative) {
2435
2420
  if (b_negative) {
2436
2421
  *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
2437
- Py_SET_SIZE(*operand1, -Py_ABS(Py_SIZE(*operand1)));
2422
+ Nuitka_LongSetSignNegative(*operand1);
2438
2423
  } else {
2439
2424
  *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
2440
2425
  }
@@ -2451,9 +2436,9 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long o
2451
2436
  {
2452
2437
  PyLongObject *z;
2453
2438
 
2454
- digit const *a_digits = operand1_long_object->ob_digit;
2455
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
2456
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
2439
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
2440
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
2441
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
2457
2442
  digit const *b_digits = (digit *)&operand2;
2458
2443
  Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
2459
2444
  bool b_negative = operand2 < 0;
@@ -2461,7 +2446,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_DIGIT(PyObject **operand1, long o
2461
2446
  if (a_negative) {
2462
2447
  if (b_negative) {
2463
2448
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
2464
- Py_SET_SIZE(z, -(Py_SIZE(z)));
2449
+ Nuitka_LongFlipSign(z);
2465
2450
  } else {
2466
2451
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
2467
2452
  }
@@ -2567,7 +2552,7 @@ static inline bool _INPLACE_OPERATION_ADD_STR_STR(PyObject **operand1, PyObject
2567
2552
  assert(PyString_CheckExact(operand2));
2568
2553
 
2569
2554
  if (Py_REFCNT(*operand1) == 1) {
2570
- // We more or less own the operand, so we might re-use its storage and
2555
+ // We more or less own the operand, so we might reuse its storage and
2571
2556
  // execute stuff in-place.
2572
2557
  #if PYTHON_VERSION < 0x300
2573
2558
  if (1 && !PyString_CHECK_INTERNED(*operand1) && 1) {
@@ -2645,7 +2630,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **op
2645
2630
  goto exit_inplace_result_object;
2646
2631
  }
2647
2632
 
2648
- Py_DECREF(x);
2633
+ Py_DECREF_IMMORTAL(x);
2649
2634
  }
2650
2635
 
2651
2636
  {
@@ -2660,7 +2645,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **op
2660
2645
  goto exit_inplace_result_object;
2661
2646
  }
2662
2647
 
2663
- Py_DECREF(x);
2648
+ Py_DECREF_IMMORTAL(x);
2664
2649
  }
2665
2650
 
2666
2651
  #if PYTHON_VERSION < 0x300
@@ -2718,7 +2703,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **op
2718
2703
  }
2719
2704
  }
2720
2705
 
2721
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'str'", type1->tp_name);
2706
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'str'", type1->tp_name);
2722
2707
  goto exit_inplace_exception;
2723
2708
  }
2724
2709
 
@@ -2747,7 +2732,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **operand1, PyObje
2747
2732
  assert(PyString_CheckExact(operand2));
2748
2733
 
2749
2734
  if (Py_REFCNT(*operand1) == 1) {
2750
- // We more or less own the operand, so we might re-use its storage and
2735
+ // We more or less own the operand, so we might reuse its storage and
2751
2736
  // execute stuff in-place.
2752
2737
  #if PYTHON_VERSION < 0x300
2753
2738
  if (PyString_CheckExact(*operand1) && !PyString_CHECK_INTERNED(*operand1) && 1) {
@@ -2829,7 +2814,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_STR_OBJECT(PyObject **op
2829
2814
  goto exit_inplace_result_object;
2830
2815
  }
2831
2816
 
2832
- Py_DECREF(x);
2817
+ Py_DECREF_IMMORTAL(x);
2833
2818
  }
2834
2819
 
2835
2820
  #if PYTHON_VERSION < 0x300
@@ -2908,7 +2893,7 @@ static inline bool _INPLACE_OPERATION_ADD_STR_OBJECT(PyObject **operand1, PyObje
2908
2893
  CHECK_OBJECT(operand2);
2909
2894
 
2910
2895
  if (Py_REFCNT(*operand1) == 1) {
2911
- // We more or less own the operand, so we might re-use its storage and
2896
+ // We more or less own the operand, so we might reuse its storage and
2912
2897
  // execute stuff in-place.
2913
2898
  #if PYTHON_VERSION < 0x300
2914
2899
  if (1 && !PyString_CHECK_INTERNED(*operand1) && PyString_CheckExact(operand2)) {
@@ -2967,7 +2952,7 @@ static inline bool _INPLACE_OPERATION_ADD_UNICODE_UNICODE(PyObject **operand1, P
2967
2952
  assert(PyUnicode_CheckExact(operand2));
2968
2953
 
2969
2954
  if (Py_REFCNT(*operand1) == 1) {
2970
- // We more or less own the operand, so we might re-use its storage and
2955
+ // We more or less own the operand, so we might reuse its storage and
2971
2956
  // execute stuff in-place.
2972
2957
 
2973
2958
  #if PYTHON_VERSION >= 0x300
@@ -3037,7 +3022,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject
3037
3022
  goto exit_inplace_result_object;
3038
3023
  }
3039
3024
 
3040
- Py_DECREF(x);
3025
+ Py_DECREF_IMMORTAL(x);
3041
3026
  }
3042
3027
 
3043
3028
  {
@@ -3052,7 +3037,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject
3052
3037
  goto exit_inplace_result_object;
3053
3038
  }
3054
3039
 
3055
- Py_DECREF(x);
3040
+ Py_DECREF_IMMORTAL(x);
3056
3041
  }
3057
3042
 
3058
3043
  #if PYTHON_VERSION < 0x300
@@ -3111,9 +3096,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject
3111
3096
  }
3112
3097
 
3113
3098
  #if PYTHON_VERSION < 0x300
3114
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'unicode'", type1->tp_name);
3099
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'unicode'", type1->tp_name);
3115
3100
  #else
3116
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'str'", type1->tp_name);
3101
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'str'", type1->tp_name);
3117
3102
  #endif
3118
3103
  goto exit_inplace_exception;
3119
3104
  }
@@ -3143,7 +3128,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject **operand1, Py
3143
3128
  assert(PyUnicode_CheckExact(operand2));
3144
3129
 
3145
3130
  if (Py_REFCNT(*operand1) == 1) {
3146
- // We more or less own the operand, so we might re-use its storage and
3131
+ // We more or less own the operand, so we might reuse its storage and
3147
3132
  // execute stuff in-place.
3148
3133
 
3149
3134
  #if PYTHON_VERSION >= 0x300
@@ -3229,7 +3214,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_UNICODE_OBJECT(PyObject
3229
3214
  goto exit_inplace_result_object;
3230
3215
  }
3231
3216
 
3232
- Py_DECREF(x);
3217
+ Py_DECREF_IMMORTAL(x);
3233
3218
  }
3234
3219
 
3235
3220
  #if PYTHON_VERSION < 0x300
@@ -3308,7 +3293,7 @@ static inline bool _INPLACE_OPERATION_ADD_UNICODE_OBJECT(PyObject **operand1, Py
3308
3293
  CHECK_OBJECT(operand2);
3309
3294
 
3310
3295
  if (Py_REFCNT(*operand1) == 1) {
3311
- // We more or less own the operand, so we might re-use its storage and
3296
+ // We more or less own the operand, so we might reuse its storage and
3312
3297
  // execute stuff in-place.
3313
3298
 
3314
3299
  #if PYTHON_VERSION >= 0x300
@@ -3372,7 +3357,7 @@ static inline bool _INPLACE_OPERATION_ADD_BYTES_BYTES(PyObject **operand1, PyObj
3372
3357
  assert(PyBytes_CheckExact(operand2));
3373
3358
 
3374
3359
  if (Py_REFCNT(*operand1) == 1) {
3375
- // We more or less own the operand, so we might re-use its storage and
3360
+ // We more or less own the operand, so we might reuse its storage and
3376
3361
  // execute stuff in-place.
3377
3362
 
3378
3363
  #if PYTHON_VERSION >= 0x300
@@ -3439,7 +3424,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **
3439
3424
  goto exit_inplace_result_object;
3440
3425
  }
3441
3426
 
3442
- Py_DECREF(x);
3427
+ Py_DECREF_IMMORTAL(x);
3443
3428
  }
3444
3429
 
3445
3430
  {
@@ -3454,7 +3439,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **
3454
3439
  goto exit_inplace_result_object;
3455
3440
  }
3456
3441
 
3457
- Py_DECREF(x);
3442
+ Py_DECREF_IMMORTAL(x);
3458
3443
  }
3459
3444
 
3460
3445
  #if PYTHON_VERSION < 0x300
@@ -3512,7 +3497,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **
3512
3497
  }
3513
3498
  }
3514
3499
 
3515
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'bytes'", type1->tp_name);
3500
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'bytes'", type1->tp_name);
3516
3501
  goto exit_inplace_exception;
3517
3502
  }
3518
3503
 
@@ -3541,7 +3526,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **operand1, PyOb
3541
3526
  assert(PyBytes_CheckExact(operand2));
3542
3527
 
3543
3528
  if (Py_REFCNT(*operand1) == 1) {
3544
- // We more or less own the operand, so we might re-use its storage and
3529
+ // We more or less own the operand, so we might reuse its storage and
3545
3530
  // execute stuff in-place.
3546
3531
 
3547
3532
  #if PYTHON_VERSION >= 0x300
@@ -3624,7 +3609,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_BYTES_OBJECT(PyObject **
3624
3609
  goto exit_inplace_result_object;
3625
3610
  }
3626
3611
 
3627
- Py_DECREF(x);
3612
+ Py_DECREF_IMMORTAL(x);
3628
3613
  }
3629
3614
 
3630
3615
  #if PYTHON_VERSION < 0x300
@@ -3703,7 +3688,7 @@ static inline bool _INPLACE_OPERATION_ADD_BYTES_OBJECT(PyObject **operand1, PyOb
3703
3688
  CHECK_OBJECT(operand2);
3704
3689
 
3705
3690
  if (Py_REFCNT(*operand1) == 1) {
3706
- // We more or less own the operand, so we might re-use its storage and
3691
+ // We more or less own the operand, so we might reuse its storage and
3707
3692
  // execute stuff in-place.
3708
3693
 
3709
3694
  #if PYTHON_VERSION >= 0x300
@@ -3777,7 +3762,10 @@ static inline bool _INPLACE_OPERATION_ADD_TUPLE_TUPLE(PyObject **operand1, PyObj
3777
3762
  // Not every code path will make use of all possible results.
3778
3763
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
3779
3764
 
3780
- PyObject *x = TUPLE_CONCAT(*operand1, operand2);
3765
+ // TODO: Have this more globally passed in
3766
+ PyThreadState *tstate = PyThreadState_GET();
3767
+
3768
+ PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
3781
3769
 
3782
3770
  assert(x != Py_NotImplemented);
3783
3771
  obj_result = x;
@@ -3829,7 +3817,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **
3829
3817
  goto exit_inplace_result_object;
3830
3818
  }
3831
3819
 
3832
- Py_DECREF(x);
3820
+ Py_DECREF_IMMORTAL(x);
3833
3821
  }
3834
3822
 
3835
3823
  {
@@ -3844,7 +3832,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **
3844
3832
  goto exit_inplace_result_object;
3845
3833
  }
3846
3834
 
3847
- Py_DECREF(x);
3835
+ Py_DECREF_IMMORTAL(x);
3848
3836
  }
3849
3837
 
3850
3838
  #if PYTHON_VERSION < 0x300
@@ -3902,7 +3890,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **
3902
3890
  }
3903
3891
  }
3904
3892
 
3905
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'tuple'", type1->tp_name);
3893
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'tuple'", type1->tp_name);
3906
3894
  goto exit_inplace_exception;
3907
3895
  }
3908
3896
 
@@ -3938,7 +3926,10 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **operand1, PyOb
3938
3926
  // Not every code path will make use of all possible results.
3939
3927
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
3940
3928
 
3941
- PyObject *x = TUPLE_CONCAT(*operand1, operand2);
3929
+ // TODO: Have this more globally passed in
3930
+ PyThreadState *tstate = PyThreadState_GET();
3931
+
3932
+ PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
3942
3933
 
3943
3934
  assert(x != Py_NotImplemented);
3944
3935
  obj_result = x;
@@ -4001,7 +3992,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_TUPLE_OBJECT(PyObject **
4001
3992
  goto exit_inplace_result_object;
4002
3993
  }
4003
3994
 
4004
- Py_DECREF(x);
3995
+ Py_DECREF_IMMORTAL(x);
4005
3996
  }
4006
3997
 
4007
3998
  #if PYTHON_VERSION < 0x300
@@ -4100,7 +4091,10 @@ static inline bool _INPLACE_OPERATION_ADD_TUPLE_OBJECT(PyObject **operand1, PyOb
4100
4091
  // Not every code path will make use of all possible results.
4101
4092
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4102
4093
 
4103
- PyObject *x = TUPLE_CONCAT(*operand1, operand2);
4094
+ // TODO: Have this more globally passed in
4095
+ PyThreadState *tstate = PyThreadState_GET();
4096
+
4097
+ PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
4104
4098
 
4105
4099
  assert(x != Py_NotImplemented);
4106
4100
  obj_result = x;
@@ -4159,7 +4153,10 @@ static inline bool _INPLACE_OPERATION_ADD_LIST_LIST(PyObject **operand1, PyObjec
4159
4153
  // Not every code path will make use of all possible results.
4160
4154
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4161
4155
 
4162
- PyObject *x = LIST_CONCAT(*operand1, operand2);
4156
+ // TODO: Have this more globally passed in
4157
+ PyThreadState *tstate = PyThreadState_GET();
4158
+
4159
+ PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
4163
4160
  assert(x != Py_NotImplemented);
4164
4161
 
4165
4162
  obj_result = x;
@@ -4212,7 +4209,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **o
4212
4209
  goto exit_inplace_result_object;
4213
4210
  }
4214
4211
 
4215
- Py_DECREF(x);
4212
+ Py_DECREF_IMMORTAL(x);
4216
4213
  }
4217
4214
 
4218
4215
  {
@@ -4227,7 +4224,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **o
4227
4224
  goto exit_inplace_result_object;
4228
4225
  }
4229
4226
 
4230
- Py_DECREF(x);
4227
+ Py_DECREF_IMMORTAL(x);
4231
4228
  }
4232
4229
 
4233
4230
  #if PYTHON_VERSION < 0x300
@@ -4285,7 +4282,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **o
4285
4282
  }
4286
4283
  }
4287
4284
 
4288
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and 'list'", type1->tp_name);
4285
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and 'list'", type1->tp_name);
4289
4286
  goto exit_inplace_exception;
4290
4287
  }
4291
4288
 
@@ -4325,7 +4322,10 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **operand1, PyObj
4325
4322
  // Not every code path will make use of all possible results.
4326
4323
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4327
4324
 
4328
- PyObject *x = LIST_CONCAT(*operand1, operand2);
4325
+ // TODO: Have this more globally passed in
4326
+ PyThreadState *tstate = PyThreadState_GET();
4327
+
4328
+ PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
4329
4329
  assert(x != Py_NotImplemented);
4330
4330
 
4331
4331
  obj_result = x;
@@ -4389,7 +4389,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LIST_OBJECT(PyObject **o
4389
4389
  goto exit_inplace_result_object;
4390
4390
  }
4391
4391
 
4392
- Py_DECREF(x);
4392
+ Py_DECREF_IMMORTAL(x);
4393
4393
  }
4394
4394
 
4395
4395
  #if PYTHON_VERSION < 0x300
@@ -4497,7 +4497,10 @@ static inline bool _INPLACE_OPERATION_ADD_LIST_OBJECT(PyObject **operand1, PyObj
4497
4497
  // Not every code path will make use of all possible results.
4498
4498
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4499
4499
 
4500
- PyObject *x = LIST_CONCAT(*operand1, operand2);
4500
+ // TODO: Have this more globally passed in
4501
+ PyThreadState *tstate = PyThreadState_GET();
4502
+
4503
+ PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
4501
4504
  assert(x != Py_NotImplemented);
4502
4505
 
4503
4506
  obj_result = x;
@@ -4715,7 +4718,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4715
4718
  #endif
4716
4719
 
4717
4720
  if (Py_REFCNT(*operand1) == 1) {
4718
- // We more or less own the operand, so we might re-use its storage and
4721
+ // We more or less own the operand, so we might reuse its storage and
4719
4722
  // execute stuff in-place.
4720
4723
  #if PYTHON_VERSION < 0x300
4721
4724
  if (PyString_CheckExact(*operand1) && !PyString_CHECK_INTERNED(*operand1) && PyString_CheckExact(operand2)) {
@@ -4798,7 +4801,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4798
4801
  goto exit_inplace_result_object;
4799
4802
  }
4800
4803
 
4801
- Py_DECREF(x);
4804
+ Py_DECREF_IMMORTAL(x);
4802
4805
  }
4803
4806
 
4804
4807
  {
@@ -4826,7 +4829,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4826
4829
  goto exit_inplace_result_object;
4827
4830
  }
4828
4831
 
4829
- Py_DECREF(x);
4832
+ Py_DECREF_IMMORTAL(x);
4830
4833
  slot2 = NULL;
4831
4834
  }
4832
4835
  }
@@ -4838,7 +4841,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4838
4841
  goto exit_inplace_result_object;
4839
4842
  }
4840
4843
 
4841
- Py_DECREF(x);
4844
+ Py_DECREF_IMMORTAL(x);
4842
4845
  }
4843
4846
 
4844
4847
  if (slot2 != NULL) {
@@ -4849,7 +4852,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4849
4852
  goto exit_inplace_result_object;
4850
4853
  }
4851
4854
 
4852
- Py_DECREF(x);
4855
+ Py_DECREF_IMMORTAL(x);
4853
4856
  }
4854
4857
 
4855
4858
  #if PYTHON_VERSION < 0x300
@@ -4942,7 +4945,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4942
4945
  }
4943
4946
  }
4944
4947
 
4945
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +: '%s' and '%s'", type1->tp_name,
4948
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for +=: '%s' and '%s'", type1->tp_name,
4946
4949
  type2->tp_name);
4947
4950
  goto exit_inplace_exception;
4948
4951
  }
@@ -5039,3 +5042,18 @@ exit_inplace_result_object:
5039
5042
  bool INPLACE_OPERATION_ADD_LIST_TUPLE(PyObject **operand1, PyObject *operand2) {
5040
5043
  return _INPLACE_OPERATION_ADD_LIST_TUPLE(operand1, operand2);
5041
5044
  }
5045
+
5046
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
5047
+ // integrates with CPython, but also works on its own.
5048
+ //
5049
+ // Licensed under the Apache License, Version 2.0 (the "License");
5050
+ // you may not use this file except in compliance with the License.
5051
+ // You may obtain a copy of the License at
5052
+ //
5053
+ // http://www.apache.org/licenses/LICENSE-2.0
5054
+ //
5055
+ // Unless required by applicable law or agreed to in writing, software
5056
+ // distributed under the License is distributed on an "AS IS" BASIS,
5057
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5058
+ // See the License for the specific language governing permissions and
5059
+ // limitations under the License.