Nuitka-winsvc 1.8__cp311-cp311-win_amd64.whl → 2.5.1__cp311-cp311-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of Nuitka-winsvc might be problematic. Click here for more details.

Files changed (728) hide show
  1. Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
  2. Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
  3. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
  4. Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
  5. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  6. nuitka/Builtins.py +49 -17
  7. nuitka/BytecodeCaching.py +24 -20
  8. nuitka/Bytecodes.py +23 -19
  9. nuitka/CacheCleanup.py +28 -23
  10. nuitka/Constants.py +19 -17
  11. nuitka/Errors.py +23 -17
  12. nuitka/HardImportRegistry.py +408 -0
  13. nuitka/MainControl.py +209 -116
  14. nuitka/ModuleRegistry.py +83 -20
  15. nuitka/OptionParsing.py +467 -221
  16. nuitka/Options.py +701 -225
  17. nuitka/OutputDirectories.py +47 -23
  18. nuitka/PostProcessing.py +133 -79
  19. nuitka/Progress.py +73 -24
  20. nuitka/PythonFlavors.py +141 -32
  21. nuitka/PythonOperators.py +18 -17
  22. nuitka/PythonVersions.py +107 -19
  23. nuitka/Serialization.py +70 -55
  24. nuitka/SourceCodeReferences.py +19 -17
  25. nuitka/Tracing.py +176 -70
  26. nuitka/TreeXML.py +31 -26
  27. nuitka/Variables.py +39 -41
  28. nuitka/Version.py +22 -8
  29. nuitka/__init__.py +5 -4
  30. nuitka/__main__.py +95 -29
  31. nuitka/__past__.py +44 -34
  32. nuitka/build/Backend.scons +243 -141
  33. nuitka/build/CCompilerVersion.scons +45 -31
  34. nuitka/build/DataComposerInterface.py +20 -17
  35. nuitka/build/Onefile.scons +56 -54
  36. nuitka/build/SconsCaching.py +105 -92
  37. nuitka/build/SconsCompilerSettings.py +167 -68
  38. nuitka/build/SconsHacks.py +25 -19
  39. nuitka/build/SconsInterface.py +155 -54
  40. nuitka/build/SconsProgress.py +19 -18
  41. nuitka/build/SconsSpawn.py +62 -33
  42. nuitka/build/SconsUtils.py +152 -55
  43. nuitka/build/__init__.py +5 -4
  44. nuitka/build/include/nuitka/allocator.h +228 -22
  45. nuitka/build/include/nuitka/builtins.h +17 -17
  46. nuitka/build/include/nuitka/calling.h +24 -24
  47. nuitka/build/include/nuitka/checkers.h +17 -18
  48. nuitka/build/include/nuitka/checksum_tools.h +14 -19
  49. nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
  50. nuitka/build/include/nuitka/compiled_cell.h +33 -18
  51. nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
  52. nuitka/build/include/nuitka/compiled_frame.h +93 -54
  53. nuitka/build/include/nuitka/compiled_function.h +42 -20
  54. nuitka/build/include/nuitka/compiled_generator.h +24 -18
  55. nuitka/build/include/nuitka/compiled_method.h +17 -18
  56. nuitka/build/include/nuitka/constants.h +35 -18
  57. nuitka/build/include/nuitka/constants_blob.h +17 -17
  58. nuitka/build/include/nuitka/debug_settings.h +60 -0
  59. nuitka/build/include/nuitka/environment_variables.h +30 -0
  60. nuitka/build/include/nuitka/environment_variables_system.h +45 -0
  61. nuitka/build/include/nuitka/exception_groups.h +23 -26
  62. nuitka/build/include/nuitka/exceptions.h +717 -171
  63. nuitka/build/include/nuitka/filesystem_paths.h +26 -20
  64. nuitka/build/include/nuitka/freelists.h +38 -18
  65. nuitka/build/include/nuitka/helper/attributes.h +24 -22
  66. nuitka/build/include/nuitka/helper/boolean.h +17 -17
  67. nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
  68. nuitka/build/include/nuitka/helper/bytes.h +14 -15
  69. nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
  70. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  71. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  72. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  73. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  74. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  75. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  76. nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
  77. nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
  78. nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
  79. nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
  80. nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
  81. nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
  82. nuitka/build/include/nuitka/helper/complex.h +17 -17
  83. nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
  84. nuitka/build/include/nuitka/helper/floats.h +17 -18
  85. nuitka/build/include/nuitka/helper/import_hard.h +25 -17
  86. nuitka/build/include/nuitka/helper/indexes.h +17 -18
  87. nuitka/build/include/nuitka/helper/ints.h +115 -54
  88. nuitka/build/include/nuitka/helper/iterators.h +99 -51
  89. nuitka/build/include/nuitka/helper/lists.h +26 -24
  90. nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
  91. nuitka/build/include/nuitka/helper/mappings.h +17 -18
  92. nuitka/build/include/nuitka/helper/operations.h +20 -17
  93. nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
  94. nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
  95. nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
  96. nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
  97. nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
  98. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  99. nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
  100. nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
  101. nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
  102. nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
  103. nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
  104. nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
  105. nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
  106. nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
  107. nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
  108. nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
  109. nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
  110. nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
  111. nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
  112. nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
  113. nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
  114. nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
  115. nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
  116. nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
  117. nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
  118. nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
  119. nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
  120. nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
  121. nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
  122. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
  123. nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
  124. nuitka/build/include/nuitka/helper/raising.h +68 -37
  125. nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
  126. nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
  127. nuitka/build/include/nuitka/helper/sequences.h +19 -13
  128. nuitka/build/include/nuitka/helper/sets.h +11 -12
  129. nuitka/build/include/nuitka/helper/slices.h +31 -25
  130. nuitka/build/include/nuitka/helper/strings.h +16 -17
  131. nuitka/build/include/nuitka/helper/subscripts.h +18 -201
  132. nuitka/build/include/nuitka/helper/tuples.h +64 -52
  133. nuitka/build/include/nuitka/helpers.h +50 -22
  134. nuitka/build/include/nuitka/importing.h +28 -21
  135. nuitka/build/include/nuitka/jit_sources.h +25 -0
  136. nuitka/build/include/nuitka/prelude.h +163 -71
  137. nuitka/build/include/nuitka/printing.h +29 -22
  138. nuitka/build/include/nuitka/python_pgo.h +19 -18
  139. nuitka/build/include/nuitka/safe_string_ops.h +20 -18
  140. nuitka/build/include/nuitka/threading.h +45 -32
  141. nuitka/build/include/nuitka/tracing.h +28 -18
  142. nuitka/build/include/nuitka/type_aliases.h +30 -0
  143. nuitka/build/include/nuitka/unfreezing.h +29 -23
  144. nuitka/build/inline_copy/bin/scons.py +14 -0
  145. nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
  146. nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
  147. nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
  148. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
  149. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
  150. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
  151. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
  152. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
  153. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
  154. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
  155. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
  156. nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
  157. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
  158. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
  159. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
  160. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
  161. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
  162. nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
  163. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
  164. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
  165. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
  166. nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
  167. nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
  168. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  169. nuitka/build/inline_copy/stubgen/six.py +998 -0
  170. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  171. nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
  172. nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
  173. nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
  174. nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
  175. nuitka/build/inline_copy/zlib/LICENSE +22 -0
  176. nuitka/build/inline_copy/zlib/crc32.c +1049 -0
  177. nuitka/build/inline_copy/zlib/crc32.h +9446 -0
  178. nuitka/build/inline_copy/zlib/zconf.h +551 -0
  179. nuitka/build/inline_copy/zlib/zlib.h +1938 -0
  180. nuitka/build/inline_copy/zlib/zutil.h +275 -0
  181. nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
  182. nuitka/build/static_src/CompiledCellType.c +69 -44
  183. nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
  184. nuitka/build/static_src/CompiledCoroutineType.c +229 -226
  185. nuitka/build/static_src/CompiledFrameType.c +323 -138
  186. nuitka/build/static_src/CompiledFunctionType.c +547 -231
  187. nuitka/build/static_src/CompiledGeneratorType.c +416 -290
  188. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
  189. nuitka/build/static_src/CompiledMethodType.c +91 -82
  190. nuitka/build/static_src/HelpersAllocator.c +352 -45
  191. nuitka/build/static_src/HelpersAttributes.c +30 -72
  192. nuitka/build/static_src/HelpersBuiltin.c +65 -46
  193. nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
  194. nuitka/build/static_src/HelpersBytes.c +19 -20
  195. nuitka/build/static_src/HelpersCalling.c +40 -37
  196. nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
  197. nuitka/build/static_src/HelpersChecksumTools.c +35 -21
  198. nuitka/build/static_src/HelpersClasses.c +17 -17
  199. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  200. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  201. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  202. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  203. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  204. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  205. nuitka/build/static_src/HelpersComparisonEq.c +536 -496
  206. nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
  207. nuitka/build/static_src/HelpersComparisonGe.c +531 -501
  208. nuitka/build/static_src/HelpersComparisonGt.c +530 -500
  209. nuitka/build/static_src/HelpersComparisonLe.c +531 -501
  210. nuitka/build/static_src/HelpersComparisonLt.c +530 -500
  211. nuitka/build/static_src/HelpersComparisonNe.c +538 -496
  212. nuitka/build/static_src/HelpersConsole.c +122 -0
  213. nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
  214. nuitka/build/static_src/HelpersDeepcopy.c +33 -33
  215. nuitka/build/static_src/HelpersDictionaries.c +232 -63
  216. nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
  217. nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
  218. nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
  219. nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
  220. nuitka/build/static_src/HelpersExceptions.c +147 -62
  221. nuitka/build/static_src/HelpersFiles.c +116 -22
  222. nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
  223. nuitka/build/static_src/HelpersFloats.c +37 -31
  224. nuitka/build/static_src/HelpersHeapStorage.c +21 -17
  225. nuitka/build/static_src/HelpersImport.c +61 -29
  226. nuitka/build/static_src/HelpersImportHard.c +74 -61
  227. nuitka/build/static_src/HelpersJitSources.c +46 -0
  228. nuitka/build/static_src/HelpersLists.c +237 -58
  229. nuitka/build/static_src/HelpersListsGenerated.c +41 -41
  230. nuitka/build/static_src/HelpersMappings.c +17 -17
  231. nuitka/build/static_src/HelpersMatching.c +137 -51
  232. nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
  233. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
  234. nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
  235. nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
  236. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
  237. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
  238. nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
  239. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  240. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
  241. nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
  242. nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
  243. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
  244. nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
  245. nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
  246. nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
  247. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
  248. nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
  249. nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
  250. nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
  251. nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
  252. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
  253. nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
  254. nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
  255. nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
  256. nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
  257. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
  258. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
  259. nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
  260. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
  261. nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
  262. nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
  263. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
  264. nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
  265. nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
  266. nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
  267. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
  268. nuitka/build/static_src/HelpersProfiling.c +25 -24
  269. nuitka/build/static_src/HelpersPythonPgo.c +22 -22
  270. nuitka/build/static_src/HelpersRaising.c +296 -283
  271. nuitka/build/static_src/HelpersSafeStrings.c +34 -22
  272. nuitka/build/static_src/HelpersSequences.c +18 -19
  273. nuitka/build/static_src/HelpersSlices.c +29 -23
  274. nuitka/build/static_src/HelpersStrings.c +235 -38
  275. nuitka/build/static_src/HelpersTuples.c +46 -34
  276. nuitka/build/static_src/HelpersTypes.c +166 -25
  277. nuitka/build/static_src/InspectPatcher.c +108 -27
  278. nuitka/build/static_src/MainProgram.c +464 -280
  279. nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
  280. nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
  281. nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
  282. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
  283. nuitka/build/static_src/OnefileBootstrap.c +281 -164
  284. nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
  285. nuitka/code_generation/AsyncgenCodes.py +21 -23
  286. nuitka/code_generation/AttributeCodes.py +31 -27
  287. nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
  288. nuitka/code_generation/BranchCodes.py +19 -17
  289. nuitka/code_generation/BuiltinCodes.py +29 -18
  290. nuitka/code_generation/CallCodes.py +35 -33
  291. nuitka/code_generation/ClassCodes.py +19 -17
  292. nuitka/code_generation/CodeGeneration.py +61 -28
  293. nuitka/code_generation/CodeHelperSelection.py +20 -18
  294. nuitka/code_generation/CodeHelpers.py +28 -21
  295. nuitka/code_generation/CodeObjectCodes.py +36 -26
  296. nuitka/code_generation/ComparisonCodes.py +51 -22
  297. nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
  298. nuitka/code_generation/ConditionalCodes.py +19 -17
  299. nuitka/code_generation/ConstantCodes.py +82 -28
  300. nuitka/code_generation/Contexts.py +180 -42
  301. nuitka/code_generation/CoroutineCodes.py +21 -23
  302. nuitka/code_generation/CtypesCodes.py +19 -17
  303. nuitka/code_generation/DictCodes.py +28 -26
  304. nuitka/code_generation/Emission.py +21 -18
  305. nuitka/code_generation/ErrorCodes.py +57 -79
  306. nuitka/code_generation/EvalCodes.py +24 -20
  307. nuitka/code_generation/ExceptionCodes.py +182 -104
  308. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
  309. nuitka/code_generation/ExpressionCodes.py +19 -17
  310. nuitka/code_generation/FrameCodes.py +28 -31
  311. nuitka/code_generation/FunctionCodes.py +26 -27
  312. nuitka/code_generation/GeneratorCodes.py +25 -26
  313. nuitka/code_generation/GlobalConstants.py +51 -25
  314. nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
  315. nuitka/code_generation/IdCodes.py +19 -17
  316. nuitka/code_generation/ImportCodes.py +90 -50
  317. nuitka/code_generation/Indentation.py +23 -22
  318. nuitka/code_generation/IndexCodes.py +19 -17
  319. nuitka/code_generation/InjectCCodes.py +14 -12
  320. nuitka/code_generation/IntegerCodes.py +19 -17
  321. nuitka/code_generation/IteratorCodes.py +86 -71
  322. nuitka/code_generation/JitCodes.py +44 -0
  323. nuitka/code_generation/LabelCodes.py +19 -17
  324. nuitka/code_generation/LineNumberCodes.py +20 -20
  325. nuitka/code_generation/ListCodes.py +32 -36
  326. nuitka/code_generation/LoaderCodes.py +22 -17
  327. nuitka/code_generation/LocalsDictCodes.py +56 -32
  328. nuitka/code_generation/LoopCodes.py +19 -17
  329. nuitka/code_generation/MatchCodes.py +42 -22
  330. nuitka/code_generation/ModuleCodes.py +71 -29
  331. nuitka/code_generation/Namify.py +27 -23
  332. nuitka/code_generation/NetworkxCodes.py +51 -0
  333. nuitka/code_generation/OperationCodes.py +80 -51
  334. nuitka/code_generation/PackageResourceCodes.py +96 -23
  335. nuitka/code_generation/PrintCodes.py +19 -17
  336. nuitka/code_generation/PythonAPICodes.py +19 -17
  337. nuitka/code_generation/RaisingCodes.py +183 -107
  338. nuitka/code_generation/Reports.py +32 -22
  339. nuitka/code_generation/ReturnCodes.py +20 -32
  340. nuitka/code_generation/SetCodes.py +19 -17
  341. nuitka/code_generation/SliceCodes.py +22 -20
  342. nuitka/code_generation/StringCodes.py +19 -17
  343. nuitka/code_generation/SubscriptCodes.py +24 -30
  344. nuitka/code_generation/TensorflowCodes.py +54 -0
  345. nuitka/code_generation/TryCodes.py +31 -41
  346. nuitka/code_generation/TupleCodes.py +20 -18
  347. nuitka/code_generation/TypeAliasCodes.py +119 -0
  348. nuitka/code_generation/VariableCodes.py +118 -55
  349. nuitka/code_generation/VariableDeclarations.py +28 -25
  350. nuitka/code_generation/YieldCodes.py +23 -21
  351. nuitka/code_generation/__init__.py +5 -4
  352. nuitka/code_generation/c_types/CTypeBases.py +29 -19
  353. nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
  354. nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
  355. nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
  356. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
  357. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
  358. nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
  359. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
  360. nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
  361. nuitka/code_generation/c_types/CTypeVoids.py +20 -17
  362. nuitka/code_generation/c_types/__init__.py +5 -4
  363. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
  364. nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
  365. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
  366. nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
  367. nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
  368. nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
  369. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
  370. nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
  371. nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
  372. nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
  373. nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
  374. nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
  375. nuitka/code_generation/templates/__init__.py +5 -4
  376. nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
  377. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
  378. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
  379. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
  380. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
  381. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
  382. nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
  383. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
  384. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
  385. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
  386. nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
  387. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
  388. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  389. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
  390. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
  391. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  392. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
  393. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
  394. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
  395. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
  396. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
  397. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
  398. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
  399. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
  400. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
  401. nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
  402. nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
  403. nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
  404. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
  405. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
  406. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
  407. nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
  408. nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
  409. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
  410. nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
  411. nuitka/containers/Namedtuples.py +25 -18
  412. nuitka/containers/OrderedSets.py +105 -5
  413. nuitka/containers/OrderedSetsFallback.py +19 -17
  414. nuitka/containers/__init__.py +5 -4
  415. nuitka/distutils/Build.py +33 -18
  416. nuitka/distutils/DistutilCommands.py +84 -33
  417. nuitka/distutils/__init__.py +5 -4
  418. nuitka/finalizations/Finalization.py +21 -18
  419. nuitka/finalizations/FinalizeMarkups.py +31 -55
  420. nuitka/finalizations/__init__.py +5 -4
  421. nuitka/freezer/DependsExe.py +60 -30
  422. nuitka/freezer/DllDependenciesCommon.py +47 -20
  423. nuitka/freezer/DllDependenciesMacOS.py +165 -58
  424. nuitka/freezer/DllDependenciesPosix.py +29 -19
  425. nuitka/freezer/DllDependenciesWin32.py +55 -33
  426. nuitka/freezer/ImportDetection.py +23 -17
  427. nuitka/freezer/IncludedDataFiles.py +142 -48
  428. nuitka/freezer/IncludedEntryPoints.py +104 -39
  429. nuitka/freezer/Onefile.py +32 -22
  430. nuitka/freezer/Standalone.py +166 -53
  431. nuitka/freezer/__init__.py +5 -4
  432. nuitka/importing/IgnoreListing.py +19 -17
  433. nuitka/importing/ImportCache.py +24 -21
  434. nuitka/importing/ImportResolving.py +103 -95
  435. nuitka/importing/Importing.py +319 -98
  436. nuitka/importing/PreloadedPackages.py +21 -18
  437. nuitka/importing/Recursion.py +142 -47
  438. nuitka/importing/StandardLibrary.py +96 -80
  439. nuitka/importing/__init__.py +5 -4
  440. nuitka/nodes/AsyncgenNodes.py +22 -23
  441. nuitka/nodes/AttributeLookupNodes.py +19 -17
  442. nuitka/nodes/AttributeNodes.py +19 -17
  443. nuitka/nodes/AttributeNodesGenerated.py +49 -24
  444. nuitka/nodes/BuiltinAllNodes.py +19 -17
  445. nuitka/nodes/BuiltinAnyNodes.py +19 -17
  446. nuitka/nodes/BuiltinComplexNodes.py +20 -17
  447. nuitka/nodes/BuiltinDecodingNodes.py +19 -17
  448. nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
  449. nuitka/nodes/BuiltinDictNodes.py +19 -17
  450. nuitka/nodes/BuiltinFormatNodes.py +20 -17
  451. nuitka/nodes/BuiltinHashNodes.py +19 -17
  452. nuitka/nodes/BuiltinInputNodes.py +19 -17
  453. nuitka/nodes/BuiltinIntegerNodes.py +19 -17
  454. nuitka/nodes/BuiltinIteratorNodes.py +25 -21
  455. nuitka/nodes/BuiltinLenNodes.py +19 -17
  456. nuitka/nodes/BuiltinNextNodes.py +19 -17
  457. nuitka/nodes/BuiltinOpenNodes.py +52 -18
  458. nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
  459. nuitka/nodes/BuiltinRangeNodes.py +21 -19
  460. nuitka/nodes/BuiltinRefNodes.py +73 -40
  461. nuitka/nodes/BuiltinSumNodes.py +20 -18
  462. nuitka/nodes/BuiltinTypeNodes.py +19 -17
  463. nuitka/nodes/BuiltinVarsNodes.py +19 -18
  464. nuitka/nodes/BytesNodes.py +19 -17
  465. nuitka/nodes/CallNodes.py +19 -17
  466. nuitka/nodes/Checkers.py +19 -17
  467. nuitka/nodes/ChildrenHavingMixins.py +1624 -283
  468. nuitka/nodes/ClassNodes.py +49 -29
  469. nuitka/nodes/CodeObjectSpecs.py +29 -18
  470. nuitka/nodes/ComparisonNodes.py +19 -17
  471. nuitka/nodes/ConditionalNodes.py +24 -25
  472. nuitka/nodes/ConstantRefNodes.py +57 -17
  473. nuitka/nodes/ContainerMakingNodes.py +19 -17
  474. nuitka/nodes/ContainerOperationNodes.py +19 -17
  475. nuitka/nodes/CoroutineNodes.py +22 -23
  476. nuitka/nodes/CtypesNodes.py +19 -18
  477. nuitka/nodes/DictionaryNodes.py +19 -18
  478. nuitka/nodes/ExceptionNodes.py +131 -43
  479. nuitka/nodes/ExecEvalNodes.py +19 -17
  480. nuitka/nodes/ExpressionBases.py +34 -26
  481. nuitka/nodes/ExpressionBasesGenerated.py +341 -35
  482. nuitka/nodes/ExpressionShapeMixins.py +19 -17
  483. nuitka/nodes/FrameNodes.py +41 -28
  484. nuitka/nodes/FunctionAttributeNodes.py +19 -17
  485. nuitka/nodes/FunctionNodes.py +84 -38
  486. nuitka/nodes/FutureSpecs.py +35 -20
  487. nuitka/nodes/GeneratorNodes.py +24 -25
  488. nuitka/nodes/GlobalsLocalsNodes.py +22 -17
  489. nuitka/nodes/HardImportNodesGenerated.py +746 -148
  490. nuitka/nodes/ImportHardNodes.py +46 -38
  491. nuitka/nodes/ImportNodes.py +438 -448
  492. nuitka/nodes/IndicatorMixins.py +19 -17
  493. nuitka/nodes/InjectCNodes.py +19 -18
  494. nuitka/nodes/IterationHandles.py +55 -34
  495. nuitka/nodes/KeyValuePairNodes.py +19 -17
  496. nuitka/nodes/ListOperationNodes.py +33 -21
  497. nuitka/nodes/LocalsDictNodes.py +19 -17
  498. nuitka/nodes/LocalsScopes.py +41 -41
  499. nuitka/nodes/LoopNodes.py +28 -17
  500. nuitka/nodes/MatchNodes.py +37 -24
  501. nuitka/nodes/ModuleAttributeNodes.py +18 -35
  502. nuitka/nodes/ModuleNodes.py +90 -31
  503. nuitka/nodes/NetworkxNodes.py +45 -0
  504. nuitka/nodes/NodeBases.py +73 -44
  505. nuitka/nodes/NodeMakingHelpers.py +92 -69
  506. nuitka/nodes/NodeMetaClasses.py +45 -28
  507. nuitka/nodes/OperatorNodes.py +28 -26
  508. nuitka/nodes/OperatorNodesUnary.py +148 -20
  509. nuitka/nodes/OsSysNodes.py +97 -18
  510. nuitka/nodes/OutlineNodes.py +24 -22
  511. nuitka/nodes/PackageMetadataNodes.py +37 -27
  512. nuitka/nodes/PackageResourceNodes.py +29 -23
  513. nuitka/nodes/PrintNodes.py +19 -17
  514. nuitka/nodes/ReturnNodes.py +20 -18
  515. nuitka/nodes/SideEffectNodes.py +19 -17
  516. nuitka/nodes/SliceNodes.py +20 -18
  517. nuitka/nodes/StatementBasesGenerated.py +125 -79
  518. nuitka/nodes/StatementNodes.py +27 -24
  519. nuitka/nodes/StrNodes.py +19 -17
  520. nuitka/nodes/StringConcatenationNodes.py +20 -17
  521. nuitka/nodes/SubscriptNodes.py +27 -25
  522. nuitka/nodes/TensorflowNodes.py +38 -0
  523. nuitka/nodes/TryNodes.py +19 -17
  524. nuitka/nodes/TypeMatchNodes.py +19 -17
  525. nuitka/nodes/TypeNodes.py +68 -18
  526. nuitka/nodes/VariableAssignNodes.py +122 -64
  527. nuitka/nodes/VariableDelNodes.py +19 -17
  528. nuitka/nodes/VariableNameNodes.py +19 -17
  529. nuitka/nodes/VariableRefNodes.py +63 -26
  530. nuitka/nodes/VariableReleaseNodes.py +19 -17
  531. nuitka/nodes/YieldNodes.py +21 -19
  532. nuitka/nodes/__init__.py +5 -4
  533. nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
  534. nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
  535. nuitka/nodes/shapes/ShapeMixins.py +57 -17
  536. nuitka/nodes/shapes/StandardShapes.py +80 -21
  537. nuitka/nodes/shapes/__init__.py +5 -4
  538. nuitka/optimizations/BytecodeDemotion.py +21 -18
  539. nuitka/optimizations/FunctionInlining.py +22 -23
  540. nuitka/optimizations/Graphs.py +19 -17
  541. nuitka/optimizations/Optimization.py +39 -35
  542. nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
  543. nuitka/optimizations/Tags.py +19 -18
  544. nuitka/optimizations/TraceCollections.py +67 -24
  545. nuitka/optimizations/ValueTraces.py +92 -25
  546. nuitka/optimizations/__init__.py +5 -4
  547. nuitka/pgo/PGO.py +33 -23
  548. nuitka/pgo/__init__.py +5 -4
  549. nuitka/plugins/PluginBase.py +655 -112
  550. nuitka/plugins/Plugins.py +247 -61
  551. nuitka/plugins/YamlPluginBase.py +121 -0
  552. nuitka/plugins/__init__.py +5 -4
  553. nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
  554. nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
  555. nuitka/plugins/standard/DataFilesPlugin.py +65 -29
  556. nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
  557. nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
  558. nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
  559. nuitka/plugins/standard/DillPlugin.py +42 -134
  560. nuitka/plugins/standard/DllFilesPlugin.py +125 -42
  561. nuitka/plugins/standard/EnumPlugin.py +19 -17
  562. nuitka/plugins/standard/EventletPlugin.py +19 -17
  563. nuitka/plugins/standard/GeventPlugin.py +19 -17
  564. nuitka/plugins/standard/GiPlugin.py +44 -28
  565. nuitka/plugins/standard/GlfwPlugin.py +20 -17
  566. nuitka/plugins/standard/ImplicitImports.py +403 -54
  567. nuitka/plugins/standard/KivyPlugin.py +24 -20
  568. nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
  569. nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
  570. nuitka/plugins/standard/NumpyPlugin.py +19 -17
  571. nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
  572. nuitka/plugins/standard/PbrPlugin.py +21 -19
  573. nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
  574. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  575. nuitka/plugins/standard/PmwPlugin.py +30 -27
  576. nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
  577. nuitka/plugins/standard/PywebViewPlugin.py +19 -17
  578. nuitka/plugins/standard/SpacyPlugin.py +136 -0
  579. nuitka/plugins/standard/TensorflowPlugin.py +20 -17
  580. nuitka/plugins/standard/TkinterPlugin.py +102 -108
  581. nuitka/plugins/standard/TorchPlugin.py +20 -17
  582. nuitka/plugins/standard/TransformersPlugin.py +90 -231
  583. nuitka/plugins/standard/TrioPlugin.py +18 -15
  584. nuitka/plugins/standard/UpxPlugin.py +21 -19
  585. nuitka/plugins/standard/__init__.py +5 -4
  586. nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
  587. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
  588. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
  589. nuitka/reports/CompilationReportReader.py +79 -0
  590. nuitka/reports/LicenseReport.rst.j2 +21 -21
  591. nuitka/reports/Reports.py +363 -76
  592. nuitka/reports/__init__.py +5 -4
  593. nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
  594. nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
  595. nuitka/specs/BuiltinListOperationSpecs.py +18 -17
  596. nuitka/specs/BuiltinParameterSpecs.py +35 -21
  597. nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
  598. nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
  599. nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
  600. nuitka/specs/HardImportSpecs.py +74 -22
  601. nuitka/specs/ParameterSpecs.py +60 -45
  602. nuitka/specs/__init__.py +5 -4
  603. nuitka/tools/Basics.py +20 -18
  604. nuitka/tools/__init__.py +5 -4
  605. nuitka/tools/commercial/__init__.py +7 -6
  606. nuitka/tools/data_composer/DataComposer.py +78 -62
  607. nuitka/tools/data_composer/__init__.py +5 -4
  608. nuitka/tools/data_composer/__main__.py +18 -17
  609. nuitka/tools/environments/CreateEnvironment.py +20 -17
  610. nuitka/tools/environments/Virtualenv.py +60 -32
  611. nuitka/tools/environments/__init__.py +5 -4
  612. nuitka/tools/general/__init__.py +5 -4
  613. nuitka/tools/general/dll_report/__init__.py +5 -4
  614. nuitka/tools/general/dll_report/__main__.py +29 -22
  615. nuitka/tools/general/find_module/FindModuleCode.py +35 -22
  616. nuitka/tools/general/find_module/__init__.py +5 -4
  617. nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
  618. nuitka/tools/onefile_compressor/__init__.py +5 -4
  619. nuitka/tools/onefile_compressor/__main__.py +18 -17
  620. nuitka/tools/podman/Podman.py +19 -17
  621. nuitka/tools/podman/__init__.py +5 -4
  622. nuitka/tools/podman/__main__.py +35 -19
  623. nuitka/tools/profiler/__init__.py +5 -4
  624. nuitka/tools/profiler/__main__.py +18 -17
  625. nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
  626. nuitka/tools/scanning/DisplayPackageData.py +31 -19
  627. nuitka/tools/scanning/__init__.py +5 -4
  628. nuitka/tools/specialize/CTypeDescriptions.py +251 -80
  629. nuitka/tools/specialize/Common.py +18 -17
  630. nuitka/tools/specialize/SpecializeC.py +248 -82
  631. nuitka/tools/specialize/SpecializePython.py +108 -45
  632. nuitka/tools/specialize/__init__.py +5 -4
  633. nuitka/tools/testing/Common.py +175 -114
  634. nuitka/tools/testing/Constructs.py +19 -17
  635. nuitka/tools/testing/OutputComparison.py +54 -18
  636. nuitka/tools/testing/Pythons.py +19 -18
  637. nuitka/tools/testing/RuntimeTracing.py +20 -19
  638. nuitka/tools/testing/SearchModes.py +26 -20
  639. nuitka/tools/testing/Valgrind.py +19 -17
  640. nuitka/tools/testing/__init__.py +5 -4
  641. nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
  642. nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
  643. nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
  644. nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
  645. nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
  646. nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
  647. nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
  648. nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
  649. nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
  650. nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
  651. nuitka/tools/watch/AutoStage.py +145 -0
  652. nuitka/tools/watch/GitHub.py +113 -0
  653. nuitka/tools/watch/__init__.py +5 -4
  654. nuitka/tools/watch/__main__.py +322 -91
  655. nuitka/tree/Building.py +184 -182
  656. nuitka/tree/ComplexCallHelperFunctions.py +84 -58
  657. nuitka/tree/Extractions.py +19 -17
  658. nuitka/tree/InternalModule.py +29 -20
  659. nuitka/tree/Operations.py +19 -17
  660. nuitka/tree/ReformulationAssertStatements.py +51 -31
  661. nuitka/tree/ReformulationAssignmentStatements.py +96 -91
  662. nuitka/tree/ReformulationBooleanExpressions.py +19 -17
  663. nuitka/tree/ReformulationCallExpressions.py +20 -18
  664. nuitka/tree/ReformulationClasses.py +45 -39
  665. nuitka/tree/ReformulationClasses3.py +239 -116
  666. nuitka/tree/ReformulationComparisonExpressions.py +29 -35
  667. nuitka/tree/ReformulationContractionExpressions.py +58 -55
  668. nuitka/tree/ReformulationDictionaryCreation.py +41 -35
  669. nuitka/tree/ReformulationExecStatements.py +42 -39
  670. nuitka/tree/ReformulationForLoopStatements.py +30 -34
  671. nuitka/tree/ReformulationFunctionStatements.py +59 -55
  672. nuitka/tree/ReformulationImportStatements.py +34 -29
  673. nuitka/tree/ReformulationLambdaExpressions.py +23 -24
  674. nuitka/tree/ReformulationMatchStatements.py +246 -92
  675. nuitka/tree/ReformulationMultidist.py +22 -18
  676. nuitka/tree/ReformulationNamespacePackages.py +55 -46
  677. nuitka/tree/ReformulationPrintStatements.py +23 -24
  678. nuitka/tree/ReformulationSequenceCreation.py +50 -49
  679. nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
  680. nuitka/tree/ReformulationTryExceptStatements.py +19 -17
  681. nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
  682. nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
  683. nuitka/tree/ReformulationWithStatements.py +39 -41
  684. nuitka/tree/ReformulationYieldExpressions.py +44 -24
  685. nuitka/tree/SourceHandling.py +76 -31
  686. nuitka/tree/SyntaxErrors.py +19 -17
  687. nuitka/tree/TreeHelpers.py +33 -20
  688. nuitka/tree/VariableClosure.py +35 -39
  689. nuitka/tree/__init__.py +5 -4
  690. nuitka/utils/AppDirs.py +41 -20
  691. nuitka/utils/CStrings.py +66 -21
  692. nuitka/utils/CommandLineOptions.py +111 -22
  693. nuitka/utils/Distributions.py +445 -54
  694. nuitka/utils/Download.py +89 -57
  695. nuitka/utils/Execution.py +102 -58
  696. nuitka/utils/FileOperations.py +357 -128
  697. nuitka/utils/Hashing.py +55 -33
  698. nuitka/utils/Images.py +26 -19
  699. nuitka/utils/Importing.py +119 -37
  700. nuitka/utils/InlineCopies.py +52 -0
  701. nuitka/utils/InstalledPythons.py +85 -75
  702. nuitka/utils/InstanceCounters.py +20 -17
  703. nuitka/utils/Jinja2.py +30 -22
  704. nuitka/utils/Json.py +21 -19
  705. nuitka/utils/MacOSApp.py +26 -18
  706. nuitka/utils/MemoryUsage.py +20 -18
  707. nuitka/utils/ModuleNames.py +42 -26
  708. nuitka/utils/PackageResources.py +44 -0
  709. nuitka/utils/ReExecute.py +50 -28
  710. nuitka/utils/Rest.py +20 -17
  711. nuitka/utils/SharedLibraries.py +161 -75
  712. nuitka/utils/Shebang.py +20 -17
  713. nuitka/utils/Signing.py +63 -18
  714. nuitka/utils/SlotMetaClasses.py +57 -0
  715. nuitka/utils/StaticLibraries.py +83 -56
  716. nuitka/utils/ThreadedExecutor.py +18 -17
  717. nuitka/utils/Timing.py +22 -20
  718. nuitka/utils/Utils.py +132 -25
  719. nuitka/utils/WindowsFileUsage.py +22 -20
  720. nuitka/utils/WindowsResources.py +25 -18
  721. nuitka/utils/Yaml.py +62 -24
  722. nuitka/utils/__init__.py +5 -4
  723. Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
  724. nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
  725. nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
  726. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  727. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  728. {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,5 @@
1
- // Copyright 2023, Kay Hayen, mailto:kay.hayen@gmail.com
2
- //
3
- // Part of "Nuitka", an optimizing Python compiler that is compatible and
4
- // integrates with CPython, but also works on its own.
5
- //
6
- // Licensed under the Apache License, Version 2.0 (the "License");
7
- // you may not use this file except in compliance with the License.
8
- // You may obtain a copy of the License at
9
- //
10
- // http://www.apache.org/licenses/LICENSE-2.0
11
- //
12
- // Unless required by applicable law or agreed to in writing, software
13
- // distributed under the License is distributed on an "AS IS" BASIS,
14
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- // See the License for the specific language governing permissions and
16
- // limitations under the License.
17
- //
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
18
3
  /* WARNING, this code is GENERATED. Modify the template HelperOperationBinary.c.j2 instead! */
19
4
 
20
5
  /* This file is included from another C file, help IDEs to still parse it on its own. */
@@ -62,6 +47,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_INT_INT(PyObject *operand1, PyObje
62
47
  clong_result = x;
63
48
  goto exit_result_ok_clong;
64
49
  }
50
+
65
51
  {
66
52
  PyObject *operand1_object = operand1;
67
53
  PyObject *operand2_object = operand2;
@@ -74,7 +60,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_INT_INT(PyObject *operand1, PyObje
74
60
  }
75
61
 
76
62
  exit_result_ok_clong:
77
- result = PyInt_FromLong(clong_result);
63
+ result = Nuitka_PyInt_FromLong(clong_result);
78
64
  goto exit_result_ok;
79
65
 
80
66
  exit_result_object:
@@ -133,7 +119,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_INT(Py
133
119
  goto exit_binary_result_object;
134
120
  }
135
121
 
136
- Py_DECREF(x);
122
+ Py_DECREF_IMMORTAL(x);
137
123
  }
138
124
 
139
125
  if (slot2 != NULL) {
@@ -144,7 +130,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_INT(Py
144
130
  goto exit_binary_result_object;
145
131
  }
146
132
 
147
- Py_DECREF(x);
133
+ Py_DECREF_IMMORTAL(x);
148
134
  }
149
135
 
150
136
  #if PYTHON_VERSION < 0x300
@@ -281,6 +267,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_INT(PyObject *operand1, PyO
281
267
  clong_result = x;
282
268
  goto exit_result_ok_clong;
283
269
  }
270
+
284
271
  {
285
272
  PyObject *operand1_object = operand1;
286
273
  PyObject *operand2_object = operand2;
@@ -293,7 +280,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_INT(PyObject *operand1, PyO
293
280
  }
294
281
 
295
282
  exit_result_ok_clong:
296
- result = PyInt_FromLong(clong_result);
283
+ result = Nuitka_PyInt_FromLong(clong_result);
297
284
  goto exit_result_ok;
298
285
 
299
286
  exit_result_object:
@@ -356,7 +343,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_INT_OBJECT(Py
356
343
  goto exit_binary_result_object;
357
344
  }
358
345
 
359
- Py_DECREF(x);
346
+ Py_DECREF_IMMORTAL(x);
360
347
  slot2 = NULL;
361
348
  }
362
349
  }
@@ -368,7 +355,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_INT_OBJECT(Py
368
355
  goto exit_binary_result_object;
369
356
  }
370
357
 
371
- Py_DECREF(x);
358
+ Py_DECREF_IMMORTAL(x);
372
359
  }
373
360
 
374
361
  if (slot2 != NULL) {
@@ -379,7 +366,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_INT_OBJECT(Py
379
366
  goto exit_binary_result_object;
380
367
  }
381
368
 
382
- Py_DECREF(x);
369
+ Py_DECREF_IMMORTAL(x);
383
370
  }
384
371
 
385
372
  #if PYTHON_VERSION < 0x300
@@ -508,6 +495,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_INT_OBJECT(PyObject *operand1, PyO
508
495
  clong_result = x;
509
496
  goto exit_result_ok_clong;
510
497
  }
498
+
511
499
  {
512
500
  PyObject *operand1_object = operand1;
513
501
  PyObject *operand2_object = operand2;
@@ -520,7 +508,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_INT_OBJECT(PyObject *operand1, PyO
520
508
  }
521
509
 
522
510
  exit_result_ok_clong:
523
- result = PyInt_FromLong(clong_result);
511
+ result = Nuitka_PyInt_FromLong(clong_result);
524
512
  goto exit_result_ok;
525
513
 
526
514
  exit_result_object:
@@ -633,7 +621,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_OBJECT_INT(P
633
621
  goto exit_binary_result_object;
634
622
  }
635
623
 
636
- Py_DECREF(x);
624
+ Py_DECREF_IMMORTAL(x);
637
625
  }
638
626
 
639
627
  if (slot2 != NULL) {
@@ -644,7 +632,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_OBJECT_INT(P
644
632
  goto exit_binary_result_object;
645
633
  }
646
634
 
647
- Py_DECREF(x);
635
+ Py_DECREF_IMMORTAL(x);
648
636
  }
649
637
 
650
638
  #if PYTHON_VERSION < 0x300
@@ -844,7 +832,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_INT_OBJECT(P
844
832
  goto exit_binary_result_object;
845
833
  }
846
834
 
847
- Py_DECREF(x);
835
+ Py_DECREF_IMMORTAL(x);
848
836
  slot2 = NULL;
849
837
  }
850
838
  }
@@ -856,7 +844,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_INT_OBJECT(P
856
844
  goto exit_binary_result_object;
857
845
  }
858
846
 
859
- Py_DECREF(x);
847
+ Py_DECREF_IMMORTAL(x);
860
848
  }
861
849
 
862
850
  if (slot2 != NULL) {
@@ -867,7 +855,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_INT_OBJECT(P
867
855
  goto exit_binary_result_object;
868
856
  }
869
857
 
870
- Py_DECREF(x);
858
+ Py_DECREF_IMMORTAL(x);
871
859
  }
872
860
 
873
861
  #if PYTHON_VERSION < 0x300
@@ -1045,8 +1033,8 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_LONG(PyObject *operand1, PyOb
1045
1033
 
1046
1034
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
1047
1035
 
1048
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
1049
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
1036
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
1037
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
1050
1038
 
1051
1039
  clong_result = r;
1052
1040
  goto exit_result_ok_clong;
@@ -1055,17 +1043,17 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_LONG(PyObject *operand1, PyOb
1055
1043
  {
1056
1044
  PyLongObject *z;
1057
1045
 
1058
- digit const *a_digits = operand1_long_object->ob_digit;
1059
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
1060
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
1061
- digit const *b_digits = operand2_long_object->ob_digit;
1062
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
1063
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
1046
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
1047
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
1048
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1049
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1050
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1051
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1064
1052
 
1065
1053
  if (a_negative) {
1066
1054
  if (b_negative) {
1067
1055
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
1068
- Py_SET_SIZE(z, -(Py_SIZE(z)));
1056
+ Nuitka_LongFlipSign(z);
1069
1057
  } else {
1070
1058
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
1071
1059
  }
@@ -1139,7 +1127,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_LONG(P
1139
1127
  goto exit_binary_result_object;
1140
1128
  }
1141
1129
 
1142
- Py_DECREF(x);
1130
+ Py_DECREF_IMMORTAL(x);
1143
1131
  }
1144
1132
 
1145
1133
  if (slot2 != NULL) {
@@ -1150,7 +1138,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_LONG(P
1150
1138
  goto exit_binary_result_object;
1151
1139
  }
1152
1140
 
1153
- Py_DECREF(x);
1141
+ Py_DECREF_IMMORTAL(x);
1154
1142
  }
1155
1143
 
1156
1144
  #if PYTHON_VERSION < 0x300
@@ -1279,8 +1267,8 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_LONG(PyObject *operand1, Py
1279
1267
 
1280
1268
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
1281
1269
 
1282
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
1283
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
1270
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
1271
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
1284
1272
 
1285
1273
  clong_result = r;
1286
1274
  goto exit_result_ok_clong;
@@ -1289,17 +1277,17 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_LONG(PyObject *operand1, Py
1289
1277
  {
1290
1278
  PyLongObject *z;
1291
1279
 
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;
1280
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
1281
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
1282
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1283
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1284
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1285
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1298
1286
 
1299
1287
  if (a_negative) {
1300
1288
  if (b_negative) {
1301
1289
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
1302
- Py_SET_SIZE(z, -(Py_SIZE(z)));
1290
+ Nuitka_LongFlipSign(z);
1303
1291
  } else {
1304
1292
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
1305
1293
  }
@@ -1377,7 +1365,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_LONG_OBJECT(P
1377
1365
  goto exit_binary_result_object;
1378
1366
  }
1379
1367
 
1380
- Py_DECREF(x);
1368
+ Py_DECREF_IMMORTAL(x);
1381
1369
  slot2 = NULL;
1382
1370
  }
1383
1371
  }
@@ -1389,7 +1377,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_LONG_OBJECT(P
1389
1377
  goto exit_binary_result_object;
1390
1378
  }
1391
1379
 
1392
- Py_DECREF(x);
1380
+ Py_DECREF_IMMORTAL(x);
1393
1381
  }
1394
1382
 
1395
1383
  if (slot2 != NULL) {
@@ -1400,7 +1388,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_LONG_OBJECT(P
1400
1388
  goto exit_binary_result_object;
1401
1389
  }
1402
1390
 
1403
- Py_DECREF(x);
1391
+ Py_DECREF_IMMORTAL(x);
1404
1392
  }
1405
1393
 
1406
1394
  #if PYTHON_VERSION < 0x300
@@ -1521,8 +1509,8 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_OBJECT(PyObject *operand1, Py
1521
1509
 
1522
1510
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
1523
1511
 
1524
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
1525
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
1512
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
1513
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
1526
1514
 
1527
1515
  clong_result = r;
1528
1516
  goto exit_result_ok_clong;
@@ -1531,17 +1519,17 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_OBJECT(PyObject *operand1, Py
1531
1519
  {
1532
1520
  PyLongObject *z;
1533
1521
 
1534
- digit const *a_digits = operand1_long_object->ob_digit;
1535
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
1536
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
1537
- digit const *b_digits = operand2_long_object->ob_digit;
1538
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
1539
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
1522
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
1523
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
1524
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1525
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1526
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1527
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1540
1528
 
1541
1529
  if (a_negative) {
1542
1530
  if (b_negative) {
1543
1531
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
1544
- Py_SET_SIZE(z, -(Py_SIZE(z)));
1532
+ Nuitka_LongFlipSign(z);
1545
1533
  } else {
1546
1534
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
1547
1535
  }
@@ -1606,8 +1594,8 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_LONG(PyObject *operand1, PyO
1606
1594
 
1607
1595
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
1608
1596
 
1609
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
1610
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
1597
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
1598
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
1611
1599
 
1612
1600
  clong_result = r;
1613
1601
  goto exit_result_ok_clong;
@@ -1616,17 +1604,17 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_LONG(PyObject *operand1, PyO
1616
1604
  {
1617
1605
  PyLongObject *z;
1618
1606
 
1619
- digit const *a_digits = operand1_long_object->ob_digit;
1620
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
1621
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
1622
- digit const *b_digits = operand2_long_object->ob_digit;
1623
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
1624
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
1607
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
1608
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
1609
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1610
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1611
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1612
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1625
1613
 
1626
1614
  if (a_negative) {
1627
1615
  if (b_negative) {
1628
1616
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
1629
- Py_SET_SIZE(z, -(Py_SIZE(z)));
1617
+ Nuitka_LongFlipSign(z);
1630
1618
  } else {
1631
1619
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
1632
1620
  }
@@ -1702,7 +1690,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_OBJECT_LONG(
1702
1690
  goto exit_binary_result_object;
1703
1691
  }
1704
1692
 
1705
- Py_DECREF(x);
1693
+ Py_DECREF_IMMORTAL(x);
1706
1694
  }
1707
1695
 
1708
1696
  if (slot2 != NULL) {
@@ -1713,7 +1701,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_OBJECT_LONG(
1713
1701
  goto exit_binary_result_object;
1714
1702
  }
1715
1703
 
1716
- Py_DECREF(x);
1704
+ Py_DECREF_IMMORTAL(x);
1717
1705
  }
1718
1706
 
1719
1707
  #if PYTHON_VERSION < 0x300
@@ -1850,8 +1838,8 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_OBJECT_LONG(PyObject *operand1, P
1850
1838
 
1851
1839
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
1852
1840
 
1853
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
1854
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
1841
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
1842
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
1855
1843
 
1856
1844
  clong_result = r;
1857
1845
  goto exit_result_ok_clong;
@@ -1860,17 +1848,17 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_OBJECT_LONG(PyObject *operand1, P
1860
1848
  {
1861
1849
  PyLongObject *z;
1862
1850
 
1863
- digit const *a_digits = operand1_long_object->ob_digit;
1864
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
1865
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
1866
- digit const *b_digits = operand2_long_object->ob_digit;
1867
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
1868
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
1851
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
1852
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
1853
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1854
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1855
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1856
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1869
1857
 
1870
1858
  if (a_negative) {
1871
1859
  if (b_negative) {
1872
1860
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
1873
- Py_SET_SIZE(z, -(Py_SIZE(z)));
1861
+ Nuitka_LongFlipSign(z);
1874
1862
  } else {
1875
1863
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
1876
1864
  }
@@ -1950,7 +1938,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_LONG_OBJECT(
1950
1938
  goto exit_binary_result_object;
1951
1939
  }
1952
1940
 
1953
- Py_DECREF(x);
1941
+ Py_DECREF_IMMORTAL(x);
1954
1942
  slot2 = NULL;
1955
1943
  }
1956
1944
  }
@@ -1962,7 +1950,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_LONG_OBJECT(
1962
1950
  goto exit_binary_result_object;
1963
1951
  }
1964
1952
 
1965
- Py_DECREF(x);
1953
+ Py_DECREF_IMMORTAL(x);
1966
1954
  }
1967
1955
 
1968
1956
  if (slot2 != NULL) {
@@ -1973,7 +1961,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_LONG_OBJECT(
1973
1961
  goto exit_binary_result_object;
1974
1962
  }
1975
1963
 
1976
- Py_DECREF(x);
1964
+ Py_DECREF_IMMORTAL(x);
1977
1965
  }
1978
1966
 
1979
1967
  #if PYTHON_VERSION < 0x300
@@ -2102,8 +2090,8 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_OBJECT(PyObject *operand1, P
2102
2090
 
2103
2091
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
2104
2092
 
2105
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
2106
- long r = MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object);
2093
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
2094
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + MEDIUM_VALUE(operand2_long_object));
2107
2095
 
2108
2096
  clong_result = r;
2109
2097
  goto exit_result_ok_clong;
@@ -2112,17 +2100,17 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_OBJECT(PyObject *operand1, P
2112
2100
  {
2113
2101
  PyLongObject *z;
2114
2102
 
2115
- digit const *a_digits = operand1_long_object->ob_digit;
2116
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
2117
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
2118
- digit const *b_digits = operand2_long_object->ob_digit;
2119
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
2120
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
2103
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
2104
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
2105
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
2106
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
2107
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
2108
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
2121
2109
 
2122
2110
  if (a_negative) {
2123
2111
  if (b_negative) {
2124
2112
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
2125
- Py_SET_SIZE(z, -(Py_SIZE(z)));
2113
+ Nuitka_LongFlipSign(z);
2126
2114
  } else {
2127
2115
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
2128
2116
  }
@@ -2247,7 +2235,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_FLOAT(
2247
2235
  goto exit_binary_result_object;
2248
2236
  }
2249
2237
 
2250
- Py_DECREF(x);
2238
+ Py_DECREF_IMMORTAL(x);
2251
2239
  }
2252
2240
 
2253
2241
  if (slot2 != NULL) {
@@ -2258,7 +2246,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_FLOAT(
2258
2246
  goto exit_binary_result_object;
2259
2247
  }
2260
2248
 
2261
- Py_DECREF(x);
2249
+ Py_DECREF_IMMORTAL(x);
2262
2250
  }
2263
2251
 
2264
2252
  #if PYTHON_VERSION < 0x300
@@ -2446,7 +2434,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_FLOAT_OBJECT(
2446
2434
  goto exit_binary_result_object;
2447
2435
  }
2448
2436
 
2449
- Py_DECREF(x);
2437
+ Py_DECREF_IMMORTAL(x);
2450
2438
  slot2 = NULL;
2451
2439
  }
2452
2440
  }
@@ -2458,7 +2446,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_FLOAT_OBJECT(
2458
2446
  goto exit_binary_result_object;
2459
2447
  }
2460
2448
 
2461
- Py_DECREF(x);
2449
+ Py_DECREF_IMMORTAL(x);
2462
2450
  }
2463
2451
 
2464
2452
  if (slot2 != NULL) {
@@ -2469,7 +2457,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_FLOAT_OBJECT(
2469
2457
  goto exit_binary_result_object;
2470
2458
  }
2471
2459
 
2472
- Py_DECREF(x);
2460
+ Py_DECREF_IMMORTAL(x);
2473
2461
  }
2474
2462
 
2475
2463
  #if PYTHON_VERSION < 0x300
@@ -2694,7 +2682,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_OBJECT_FLOAT
2694
2682
  goto exit_binary_result_object;
2695
2683
  }
2696
2684
 
2697
- Py_DECREF(x);
2685
+ Py_DECREF_IMMORTAL(x);
2698
2686
  }
2699
2687
 
2700
2688
  if (slot2 != NULL) {
@@ -2705,7 +2693,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_OBJECT_FLOAT
2705
2693
  goto exit_binary_result_object;
2706
2694
  }
2707
2695
 
2708
- Py_DECREF(x);
2696
+ Py_DECREF_IMMORTAL(x);
2709
2697
  }
2710
2698
 
2711
2699
  #if PYTHON_VERSION < 0x300
@@ -2901,7 +2889,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_FLOAT_OBJECT
2901
2889
  goto exit_binary_result_object;
2902
2890
  }
2903
2891
 
2904
- Py_DECREF(x);
2892
+ Py_DECREF_IMMORTAL(x);
2905
2893
  slot2 = NULL;
2906
2894
  }
2907
2895
  }
@@ -2913,7 +2901,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_FLOAT_OBJECT
2913
2901
  goto exit_binary_result_object;
2914
2902
  }
2915
2903
 
2916
- Py_DECREF(x);
2904
+ Py_DECREF_IMMORTAL(x);
2917
2905
  }
2918
2906
 
2919
2907
  if (slot2 != NULL) {
@@ -2924,7 +2912,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_FLOAT_OBJECT
2924
2912
  goto exit_binary_result_object;
2925
2913
  }
2926
2914
 
2927
- Py_DECREF(x);
2915
+ Py_DECREF_IMMORTAL(x);
2928
2916
  }
2929
2917
 
2930
2918
  #if PYTHON_VERSION < 0x300
@@ -3102,7 +3090,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_FLOAT_LONG(PyObject *operand1, PyO
3102
3090
  goto exit_binary_result_object;
3103
3091
  }
3104
3092
 
3105
- Py_DECREF(x);
3093
+ Py_DECREF_IMMORTAL(x);
3106
3094
  }
3107
3095
 
3108
3096
  // Statically recognized that coercion is not possible with these types
@@ -3157,7 +3145,7 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_FLOAT_LONG(PyObject *operand1, Py
3157
3145
  goto exit_binary_result_object;
3158
3146
  }
3159
3147
 
3160
- Py_DECREF(x);
3148
+ Py_DECREF_IMMORTAL(x);
3161
3149
  }
3162
3150
 
3163
3151
  // Statically recognized that coercion is not possible with these types
@@ -3221,7 +3209,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_FLOAT_INT(PyObject *operand1, PyOb
3221
3209
  goto exit_binary_result_object;
3222
3210
  }
3223
3211
 
3224
- Py_DECREF(x);
3212
+ Py_DECREF_IMMORTAL(x);
3225
3213
  }
3226
3214
 
3227
3215
  // Statically recognized that coercion is not possible with these types
@@ -3274,7 +3262,7 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_FLOAT_INT(PyObject *operand1, PyO
3274
3262
  goto exit_binary_result_object;
3275
3263
  }
3276
3264
 
3277
- Py_DECREF(x);
3265
+ Py_DECREF_IMMORTAL(x);
3278
3266
  }
3279
3267
 
3280
3268
  // Statically recognized that coercion is not possible with these types
@@ -3335,7 +3323,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_INT(PyObject *operand1, PyObj
3335
3323
  goto exit_binary_result_object;
3336
3324
  }
3337
3325
 
3338
- Py_DECREF(x);
3326
+ Py_DECREF_IMMORTAL(x);
3339
3327
  }
3340
3328
 
3341
3329
  // Statically recognized that coercion is not possible with these types
@@ -3388,7 +3376,7 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_INT(PyObject *operand1, PyOb
3388
3376
  goto exit_binary_result_object;
3389
3377
  }
3390
3378
 
3391
- Py_DECREF(x);
3379
+ Py_DECREF_IMMORTAL(x);
3392
3380
  }
3393
3381
 
3394
3382
  // Statically recognized that coercion is not possible with these types
@@ -3453,9 +3441,10 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_INT_CLONG(PyObject *operand1, long
3453
3441
  clong_result = x;
3454
3442
  goto exit_result_ok_clong;
3455
3443
  }
3444
+
3456
3445
  {
3457
3446
  PyObject *operand1_object = operand1;
3458
- PyObject *operand2_object = PyLong_FromLong(operand2);
3447
+ PyObject *operand2_object = Nuitka_PyLong_FromLong(operand2);
3459
3448
 
3460
3449
  PyObject *r = PyLong_Type.tp_as_number->nb_add(operand1_object, operand2_object);
3461
3450
  assert(r != Py_NotImplemented);
@@ -3467,7 +3456,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_INT_CLONG(PyObject *operand1, long
3467
3456
  }
3468
3457
 
3469
3458
  exit_result_ok_clong:
3470
- result = PyInt_FromLong(clong_result);
3459
+ result = Nuitka_PyInt_FromLong(clong_result);
3471
3460
  goto exit_result_ok;
3472
3461
 
3473
3462
  exit_result_object:
@@ -3558,8 +3547,8 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_DIGIT(PyObject *operand1, lon
3558
3547
 
3559
3548
  PyLongObject *operand1_long_object = (PyLongObject *)operand1;
3560
3549
 
3561
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
3562
- long r = MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2;
3550
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
3551
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2);
3563
3552
 
3564
3553
  clong_result = r;
3565
3554
  goto exit_result_ok_clong;
@@ -3568,9 +3557,9 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_DIGIT(PyObject *operand1, lon
3568
3557
  {
3569
3558
  PyLongObject *z;
3570
3559
 
3571
- digit const *a_digits = operand1_long_object->ob_digit;
3572
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
3573
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
3560
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
3561
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
3562
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
3574
3563
  digit const *b_digits = (digit *)&operand2;
3575
3564
  Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
3576
3565
  bool b_negative = operand2 < 0;
@@ -3578,7 +3567,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_DIGIT(PyObject *operand1, lon
3578
3567
  if (a_negative) {
3579
3568
  if (b_negative) {
3580
3569
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
3581
- Py_SET_SIZE(z, -(Py_SIZE(z)));
3570
+ Nuitka_LongFlipSign(z);
3582
3571
  } else {
3583
3572
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
3584
3573
  }
@@ -3638,8 +3627,8 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_DIGIT(PyObject *operand1, lo
3638
3627
 
3639
3628
  PyLongObject *operand1_long_object = (PyLongObject *)operand1;
3640
3629
 
3641
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
3642
- long r = MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2;
3630
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
3631
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2);
3643
3632
 
3644
3633
  clong_result = r;
3645
3634
  goto exit_result_ok_clong;
@@ -3648,9 +3637,9 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_DIGIT(PyObject *operand1, lo
3648
3637
  {
3649
3638
  PyLongObject *z;
3650
3639
 
3651
- digit const *a_digits = operand1_long_object->ob_digit;
3652
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
3653
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
3640
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
3641
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
3642
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
3654
3643
  digit const *b_digits = (digit *)&operand2;
3655
3644
  Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
3656
3645
  bool b_negative = operand2 < 0;
@@ -3658,7 +3647,7 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_DIGIT(PyObject *operand1, lo
3658
3647
  if (a_negative) {
3659
3648
  if (b_negative) {
3660
3649
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
3661
- Py_SET_SIZE(z, -(Py_SIZE(z)));
3650
+ Nuitka_LongFlipSign(z);
3662
3651
  } else {
3663
3652
  z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
3664
3653
  }
@@ -3697,6 +3686,219 @@ nuitka_bool BINARY_OPERATION_ADD_NBOOL_LONG_DIGIT(PyObject *operand1, long opera
3697
3686
  return _BINARY_OPERATION_ADD_NBOOL_LONG_DIGIT(operand1, operand2);
3698
3687
  }
3699
3688
 
3689
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "CLONG" to C platform long value. */
3690
+ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LONG_CLONG(PyObject *operand1, long operand2) {
3691
+ CHECK_OBJECT(operand1);
3692
+ assert(PyLong_CheckExact(operand1));
3693
+
3694
+ PyObject *result;
3695
+
3696
+ // Not every code path will make use of all possible results.
3697
+ #ifdef _MSC_VER
3698
+ #pragma warning(push)
3699
+ #pragma warning(disable : 4101)
3700
+ #endif
3701
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
3702
+ NUITKA_MAY_BE_UNUSED long clong_result;
3703
+ #ifdef _MSC_VER
3704
+ #pragma warning(pop)
3705
+ #endif
3706
+
3707
+ PyLongObject *operand1_long_object = (PyLongObject *)operand1;
3708
+
3709
+ bool operand2_is_negative;
3710
+ unsigned long operand2_abs_ival;
3711
+
3712
+ if (operand2 < 0) {
3713
+ operand2_abs_ival = (unsigned long)(-1 - operand2) + 1;
3714
+ operand2_is_negative = true;
3715
+ } else {
3716
+ operand2_abs_ival = (unsigned long)operand2;
3717
+ operand2_is_negative = false;
3718
+ }
3719
+
3720
+ Py_ssize_t operand2_digit_count = 0;
3721
+ digit operand2_digits[5] = {0}; // Could be more minimal and depend on sizeof(digit)
3722
+ {
3723
+ unsigned long t = operand2_abs_ival;
3724
+
3725
+ while (t != 0) {
3726
+ operand2_digit_count += 1;
3727
+ assert(operand2_digit_count <= (Py_ssize_t)(sizeof(operand2_digit_count) / sizeof(digit)));
3728
+
3729
+ operand2_digits[operand2_digit_count] = (digit)(t & PyLong_MASK);
3730
+ t >>= PyLong_SHIFT;
3731
+ }
3732
+ }
3733
+
3734
+ NUITKA_MAY_BE_UNUSED Py_ssize_t operand2_size =
3735
+ operand2_is_negative == false ? operand2_digit_count : -operand2_digit_count;
3736
+
3737
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && operand2_digit_count <= 1) {
3738
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2);
3739
+
3740
+ clong_result = r;
3741
+ goto exit_result_ok_clong;
3742
+ }
3743
+
3744
+ {
3745
+ PyLongObject *z;
3746
+
3747
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
3748
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
3749
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
3750
+ digit const *b_digits = operand2_digits;
3751
+ Py_ssize_t b_digit_count = operand2_digit_count;
3752
+ bool b_negative = operand2_is_negative;
3753
+
3754
+ if (a_negative) {
3755
+ if (b_negative) {
3756
+ z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
3757
+ Nuitka_LongFlipSign(z);
3758
+ } else {
3759
+ z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
3760
+ }
3761
+ } else {
3762
+ if (b_negative) {
3763
+ z = _Nuitka_LongSubDigits(a_digits, a_digit_count, b_digits, b_digit_count);
3764
+ } else {
3765
+ z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
3766
+ }
3767
+ }
3768
+
3769
+ obj_result = (PyObject *)z;
3770
+ goto exit_result_object;
3771
+ }
3772
+
3773
+ exit_result_object:
3774
+ if (unlikely(obj_result == NULL)) {
3775
+ goto exit_result_exception;
3776
+ }
3777
+ result = obj_result;
3778
+ goto exit_result_ok;
3779
+
3780
+ exit_result_ok_clong:
3781
+ result = Nuitka_LongFromCLong(clong_result);
3782
+ goto exit_result_ok;
3783
+
3784
+ exit_result_ok:
3785
+ return result;
3786
+
3787
+ exit_result_exception:
3788
+ return NULL;
3789
+ }
3790
+
3791
+ PyObject *BINARY_OPERATION_ADD_OBJECT_LONG_CLONG(PyObject *operand1, long operand2) {
3792
+ return _BINARY_OPERATION_ADD_OBJECT_LONG_CLONG(operand1, operand2);
3793
+ }
3794
+
3795
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "CLONG" to C platform long value. */
3796
+ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LONG_CLONG(PyObject *operand1, long operand2) {
3797
+ CHECK_OBJECT(operand1);
3798
+ assert(PyLong_CheckExact(operand1));
3799
+
3800
+ nuitka_bool result;
3801
+
3802
+ // Not every code path will make use of all possible results.
3803
+ #ifdef _MSC_VER
3804
+ #pragma warning(push)
3805
+ #pragma warning(disable : 4101)
3806
+ #endif
3807
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
3808
+ NUITKA_MAY_BE_UNUSED long clong_result;
3809
+ #ifdef _MSC_VER
3810
+ #pragma warning(pop)
3811
+ #endif
3812
+
3813
+ PyLongObject *operand1_long_object = (PyLongObject *)operand1;
3814
+
3815
+ bool operand2_is_negative;
3816
+ unsigned long operand2_abs_ival;
3817
+
3818
+ if (operand2 < 0) {
3819
+ operand2_abs_ival = (unsigned long)(-1 - operand2) + 1;
3820
+ operand2_is_negative = true;
3821
+ } else {
3822
+ operand2_abs_ival = (unsigned long)operand2;
3823
+ operand2_is_negative = false;
3824
+ }
3825
+
3826
+ Py_ssize_t operand2_digit_count = 0;
3827
+ digit operand2_digits[5] = {0}; // Could be more minimal and depend on sizeof(digit)
3828
+ {
3829
+ unsigned long t = operand2_abs_ival;
3830
+
3831
+ while (t != 0) {
3832
+ operand2_digit_count += 1;
3833
+ assert(operand2_digit_count <= (Py_ssize_t)(sizeof(operand2_digit_count) / sizeof(digit)));
3834
+
3835
+ operand2_digits[operand2_digit_count] = (digit)(t & PyLong_MASK);
3836
+ t >>= PyLong_SHIFT;
3837
+ }
3838
+ }
3839
+
3840
+ NUITKA_MAY_BE_UNUSED Py_ssize_t operand2_size =
3841
+ operand2_is_negative == false ? operand2_digit_count : -operand2_digit_count;
3842
+
3843
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && operand2_digit_count <= 1) {
3844
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) + (sdigit)operand2);
3845
+
3846
+ clong_result = r;
3847
+ goto exit_result_ok_clong;
3848
+ }
3849
+
3850
+ {
3851
+ PyLongObject *z;
3852
+
3853
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
3854
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
3855
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
3856
+ digit const *b_digits = operand2_digits;
3857
+ Py_ssize_t b_digit_count = operand2_digit_count;
3858
+ bool b_negative = operand2_is_negative;
3859
+
3860
+ if (a_negative) {
3861
+ if (b_negative) {
3862
+ z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
3863
+ Nuitka_LongFlipSign(z);
3864
+ } else {
3865
+ z = _Nuitka_LongSubDigits(b_digits, b_digit_count, a_digits, a_digit_count);
3866
+ }
3867
+ } else {
3868
+ if (b_negative) {
3869
+ z = _Nuitka_LongSubDigits(a_digits, a_digit_count, b_digits, b_digit_count);
3870
+ } else {
3871
+ z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
3872
+ }
3873
+ }
3874
+
3875
+ obj_result = (PyObject *)z;
3876
+ goto exit_result_object;
3877
+ }
3878
+
3879
+ exit_result_object:
3880
+ if (unlikely(obj_result == NULL)) {
3881
+ goto exit_result_exception;
3882
+ }
3883
+ result = CHECK_IF_TRUE(obj_result) ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE;
3884
+ Py_DECREF(obj_result);
3885
+ goto exit_result_ok;
3886
+
3887
+ exit_result_ok_clong:
3888
+ result = clong_result != 0 ? NUITKA_BOOL_TRUE : NUITKA_BOOL_FALSE;
3889
+ goto exit_result_ok;
3890
+
3891
+ exit_result_ok:
3892
+ return result;
3893
+
3894
+ exit_result_exception:
3895
+ return NUITKA_BOOL_EXCEPTION;
3896
+ }
3897
+
3898
+ nuitka_bool BINARY_OPERATION_ADD_NBOOL_LONG_CLONG(PyObject *operand1, long operand2) {
3899
+ return _BINARY_OPERATION_ADD_NBOOL_LONG_CLONG(operand1, operand2);
3900
+ }
3901
+
3700
3902
  /* Code referring to "FLOAT" corresponds to Python 'float' and "CFLOAT" to C platform float value. */
3701
3903
  static PyObject *_BINARY_OPERATION_ADD_OBJECT_FLOAT_CFLOAT(PyObject *operand1, double operand2) {
3702
3904
  CHECK_OBJECT(operand1);
@@ -3845,7 +4047,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_STR(Py
3845
4047
  goto exit_binary_result_object;
3846
4048
  }
3847
4049
 
3848
- Py_DECREF(x);
4050
+ Py_DECREF_IMMORTAL(x);
3849
4051
  }
3850
4052
 
3851
4053
  #if PYTHON_VERSION < 0x300
@@ -3983,7 +4185,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_STR_OBJECT(Py
3983
4185
  goto exit_binary_result_object;
3984
4186
  }
3985
4187
 
3986
- Py_DECREF(x);
4188
+ Py_DECREF_IMMORTAL(x);
3987
4189
  }
3988
4190
 
3989
4191
  #if PYTHON_VERSION < 0x300
@@ -4150,7 +4352,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_UNICOD
4150
4352
  goto exit_binary_result_object;
4151
4353
  }
4152
4354
 
4153
- Py_DECREF(x);
4355
+ Py_DECREF_IMMORTAL(x);
4154
4356
  }
4155
4357
 
4156
4358
  #if PYTHON_VERSION < 0x300
@@ -4293,7 +4495,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_UNICODE_OBJEC
4293
4495
  goto exit_binary_result_object;
4294
4496
  }
4295
4497
 
4296
- Py_DECREF(x);
4498
+ Py_DECREF_IMMORTAL(x);
4297
4499
  }
4298
4500
 
4299
4501
  #if PYTHON_VERSION < 0x300
@@ -4461,7 +4663,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_BYTES(
4461
4663
  goto exit_binary_result_object;
4462
4664
  }
4463
4665
 
4464
- Py_DECREF(x);
4666
+ Py_DECREF_IMMORTAL(x);
4465
4667
  }
4466
4668
 
4467
4669
  #if PYTHON_VERSION < 0x300
@@ -4600,7 +4802,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_BYTES_OBJECT(
4600
4802
  goto exit_binary_result_object;
4601
4803
  }
4602
4804
 
4603
- Py_DECREF(x);
4805
+ Py_DECREF_IMMORTAL(x);
4604
4806
  }
4605
4807
 
4606
4808
  #if PYTHON_VERSION < 0x300
@@ -4714,7 +4916,10 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_TUPLE_TUPLE(PyObject *operand1, Py
4714
4916
  // Not every code path will make use of all possible results.
4715
4917
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4716
4918
 
4717
- PyObject *x = TUPLE_CONCAT(operand1, operand2);
4919
+ // TODO: Have this more globally passed in
4920
+ PyThreadState *tstate = PyThreadState_GET();
4921
+
4922
+ PyObject *x = TUPLE_CONCAT(tstate, operand1, operand2);
4718
4923
 
4719
4924
  assert(x != Py_NotImplemented);
4720
4925
  obj_result = x;
@@ -4764,7 +4969,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_TUPLE(
4764
4969
  goto exit_binary_result_object;
4765
4970
  }
4766
4971
 
4767
- Py_DECREF(x);
4972
+ Py_DECREF_IMMORTAL(x);
4768
4973
  }
4769
4974
 
4770
4975
  #if PYTHON_VERSION < 0x300
@@ -4843,7 +5048,10 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_TUPLE(PyObject *operand1, P
4843
5048
  // Not every code path will make use of all possible results.
4844
5049
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4845
5050
 
4846
- PyObject *x = TUPLE_CONCAT(operand1, operand2);
5051
+ // TODO: Have this more globally passed in
5052
+ PyThreadState *tstate = PyThreadState_GET();
5053
+
5054
+ PyObject *x = TUPLE_CONCAT(tstate, operand1, operand2);
4847
5055
 
4848
5056
  assert(x != Py_NotImplemented);
4849
5057
  obj_result = x;
@@ -4901,7 +5109,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_TUPLE_OBJECT(
4901
5109
  goto exit_binary_result_object;
4902
5110
  }
4903
5111
 
4904
- Py_DECREF(x);
5112
+ Py_DECREF_IMMORTAL(x);
4905
5113
  }
4906
5114
 
4907
5115
  #if PYTHON_VERSION < 0x300
@@ -4975,7 +5183,10 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_TUPLE_OBJECT(PyObject *operand1, P
4975
5183
  // Not every code path will make use of all possible results.
4976
5184
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4977
5185
 
4978
- PyObject *x = TUPLE_CONCAT(operand1, operand2);
5186
+ // TODO: Have this more globally passed in
5187
+ PyThreadState *tstate = PyThreadState_GET();
5188
+
5189
+ PyObject *x = TUPLE_CONCAT(tstate, operand1, operand2);
4979
5190
 
4980
5191
  assert(x != Py_NotImplemented);
4981
5192
  obj_result = x;
@@ -5014,7 +5225,10 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LIST_LIST(PyObject *operand1, PyOb
5014
5225
  // Not every code path will make use of all possible results.
5015
5226
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
5016
5227
 
5017
- PyObject *x = LIST_CONCAT(operand1, operand2);
5228
+ // TODO: Have this more globally passed in
5229
+ PyThreadState *tstate = PyThreadState_GET();
5230
+
5231
+ PyObject *x = LIST_CONCAT(tstate, operand1, operand2);
5018
5232
  assert(x != Py_NotImplemented);
5019
5233
 
5020
5234
  obj_result = x;
@@ -5063,7 +5277,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_OBJECT_LIST(P
5063
5277
  goto exit_binary_result_object;
5064
5278
  }
5065
5279
 
5066
- Py_DECREF(x);
5280
+ Py_DECREF_IMMORTAL(x);
5067
5281
  }
5068
5282
 
5069
5283
  #if PYTHON_VERSION < 0x300
@@ -5142,7 +5356,10 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_LIST(PyObject *operand1, Py
5142
5356
  // Not every code path will make use of all possible results.
5143
5357
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
5144
5358
 
5145
- PyObject *x = LIST_CONCAT(operand1, operand2);
5359
+ // TODO: Have this more globally passed in
5360
+ PyThreadState *tstate = PyThreadState_GET();
5361
+
5362
+ PyObject *x = LIST_CONCAT(tstate, operand1, operand2);
5146
5363
  assert(x != Py_NotImplemented);
5147
5364
 
5148
5365
  obj_result = x;
@@ -5199,7 +5416,7 @@ static HEDLEY_NEVER_INLINE PyObject *__BINARY_OPERATION_ADD_OBJECT_LIST_OBJECT(P
5199
5416
  goto exit_binary_result_object;
5200
5417
  }
5201
5418
 
5202
- Py_DECREF(x);
5419
+ Py_DECREF_IMMORTAL(x);
5203
5420
  }
5204
5421
 
5205
5422
  #if PYTHON_VERSION < 0x300
@@ -5273,7 +5490,10 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_LIST_OBJECT(PyObject *operand1, Py
5273
5490
  // Not every code path will make use of all possible results.
5274
5491
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
5275
5492
 
5276
- PyObject *x = LIST_CONCAT(operand1, operand2);
5493
+ // TODO: Have this more globally passed in
5494
+ PyThreadState *tstate = PyThreadState_GET();
5495
+
5496
+ PyObject *x = LIST_CONCAT(tstate, operand1, operand2);
5277
5497
  assert(x != Py_NotImplemented);
5278
5498
 
5279
5499
  obj_result = x;
@@ -5312,7 +5532,10 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LIST_LIST(PyObject *operand1, PyO
5312
5532
  // Not every code path will make use of all possible results.
5313
5533
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
5314
5534
 
5315
- PyObject *x = LIST_CONCAT(operand1, operand2);
5535
+ // TODO: Have this more globally passed in
5536
+ PyThreadState *tstate = PyThreadState_GET();
5537
+
5538
+ PyObject *x = LIST_CONCAT(tstate, operand1, operand2);
5316
5539
  assert(x != Py_NotImplemented);
5317
5540
 
5318
5541
  obj_result = x;
@@ -5363,7 +5586,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_OBJECT_LIST(
5363
5586
  goto exit_binary_result_object;
5364
5587
  }
5365
5588
 
5366
- Py_DECREF(x);
5589
+ Py_DECREF_IMMORTAL(x);
5367
5590
  }
5368
5591
 
5369
5592
  #if PYTHON_VERSION < 0x300
@@ -5450,7 +5673,10 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_OBJECT_LIST(PyObject *operand1, P
5450
5673
  // Not every code path will make use of all possible results.
5451
5674
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
5452
5675
 
5453
- PyObject *x = LIST_CONCAT(operand1, operand2);
5676
+ // TODO: Have this more globally passed in
5677
+ PyThreadState *tstate = PyThreadState_GET();
5678
+
5679
+ PyObject *x = LIST_CONCAT(tstate, operand1, operand2);
5454
5680
  assert(x != Py_NotImplemented);
5455
5681
 
5456
5682
  obj_result = x;
@@ -5509,7 +5735,7 @@ static HEDLEY_NEVER_INLINE nuitka_bool __BINARY_OPERATION_ADD_NBOOL_LIST_OBJECT(
5509
5735
  goto exit_binary_result_object;
5510
5736
  }
5511
5737
 
5512
- Py_DECREF(x);
5738
+ Py_DECREF_IMMORTAL(x);
5513
5739
  }
5514
5740
 
5515
5741
  #if PYTHON_VERSION < 0x300
@@ -5591,7 +5817,10 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_LIST_OBJECT(PyObject *operand1, P
5591
5817
  // Not every code path will make use of all possible results.
5592
5818
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
5593
5819
 
5594
- PyObject *x = LIST_CONCAT(operand1, operand2);
5820
+ // TODO: Have this more globally passed in
5821
+ PyThreadState *tstate = PyThreadState_GET();
5822
+
5823
+ PyObject *x = LIST_CONCAT(tstate, operand1, operand2);
5595
5824
  assert(x != Py_NotImplemented);
5596
5825
 
5597
5826
  obj_result = x;
@@ -5819,6 +6048,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_OBJECT(PyObject *operand1,
5819
6048
  clong_result = x;
5820
6049
  goto exit_result_ok_clong;
5821
6050
  }
6051
+
5822
6052
  {
5823
6053
  PyObject *operand1_object = operand1;
5824
6054
  PyObject *operand2_object = operand2;
@@ -5831,7 +6061,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_OBJECT(PyObject *operand1,
5831
6061
  }
5832
6062
 
5833
6063
  exit_result_ok_clong:
5834
- result = PyInt_FromLong(clong_result);
6064
+ result = Nuitka_PyInt_FromLong(clong_result);
5835
6065
  goto exit_result_ok;
5836
6066
 
5837
6067
  exit_result_object:
@@ -5886,7 +6116,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_OBJECT(PyObject *operand1,
5886
6116
  goto exit_binary_result_object;
5887
6117
  }
5888
6118
 
5889
- Py_DECREF(x);
6119
+ Py_DECREF_IMMORTAL(x);
5890
6120
  slot2 = NULL;
5891
6121
  }
5892
6122
  }
@@ -5898,7 +6128,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_OBJECT(PyObject *operand1,
5898
6128
  goto exit_binary_result_object;
5899
6129
  }
5900
6130
 
5901
- Py_DECREF(x);
6131
+ Py_DECREF_IMMORTAL(x);
5902
6132
  }
5903
6133
 
5904
6134
  if (slot2 != NULL) {
@@ -5909,7 +6139,7 @@ static PyObject *_BINARY_OPERATION_ADD_OBJECT_OBJECT_OBJECT(PyObject *operand1,
5909
6139
  goto exit_binary_result_object;
5910
6140
  }
5911
6141
 
5912
- Py_DECREF(x);
6142
+ Py_DECREF_IMMORTAL(x);
5913
6143
  }
5914
6144
 
5915
6145
  #if PYTHON_VERSION < 0x300
@@ -6096,7 +6326,7 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_OBJECT_OBJECT(PyObject *operand1,
6096
6326
  goto exit_binary_result_object;
6097
6327
  }
6098
6328
 
6099
- Py_DECREF(x);
6329
+ Py_DECREF_IMMORTAL(x);
6100
6330
  slot2 = NULL;
6101
6331
  }
6102
6332
  }
@@ -6108,7 +6338,7 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_OBJECT_OBJECT(PyObject *operand1,
6108
6338
  goto exit_binary_result_object;
6109
6339
  }
6110
6340
 
6111
- Py_DECREF(x);
6341
+ Py_DECREF_IMMORTAL(x);
6112
6342
  }
6113
6343
 
6114
6344
  if (slot2 != NULL) {
@@ -6119,7 +6349,7 @@ static nuitka_bool _BINARY_OPERATION_ADD_NBOOL_OBJECT_OBJECT(PyObject *operand1,
6119
6349
  goto exit_binary_result_object;
6120
6350
  }
6121
6351
 
6122
- Py_DECREF(x);
6352
+ Py_DECREF_IMMORTAL(x);
6123
6353
  }
6124
6354
 
6125
6355
  #if PYTHON_VERSION < 0x300
@@ -6230,3 +6460,18 @@ exit_binary_exception:
6230
6460
  nuitka_bool BINARY_OPERATION_ADD_NBOOL_OBJECT_OBJECT(PyObject *operand1, PyObject *operand2) {
6231
6461
  return _BINARY_OPERATION_ADD_NBOOL_OBJECT_OBJECT(operand1, operand2);
6232
6462
  }
6463
+
6464
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
6465
+ // integrates with CPython, but also works on its own.
6466
+ //
6467
+ // Licensed under the Apache License, Version 2.0 (the "License");
6468
+ // you may not use this file except in compliance with the License.
6469
+ // You may obtain a copy of the License at
6470
+ //
6471
+ // http://www.apache.org/licenses/LICENSE-2.0
6472
+ //
6473
+ // Unless required by applicable law or agreed to in writing, software
6474
+ // distributed under the License is distributed on an "AS IS" BASIS,
6475
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6476
+ // See the License for the specific language governing permissions and
6477
+ // limitations under the License.