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 HelperOperationInplace.c.j2 instead! */
19
4
 
20
5
  /* This file is included from another C file, help IDEs to still parse it on its own. */
@@ -61,6 +46,7 @@ static inline bool _INPLACE_OPERATION_SUB_INT_INT(PyObject **operand1, PyObject
61
46
  clong_result = x;
62
47
  goto exit_result_ok_clong;
63
48
  }
49
+
64
50
  {
65
51
  PyObject *operand1_object = *operand1;
66
52
  PyObject *operand2_object = operand2;
@@ -79,7 +65,7 @@ exit_result_ok_clong:
79
65
 
80
66
  // That's our return value then. As we use a dedicated variable, it's
81
67
  // OK that way.
82
- *operand1 = PyInt_FromLong(clong_result);
68
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
83
69
  goto exit_result_ok;
84
70
 
85
71
  exit_result_object:
@@ -130,7 +116,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **op
130
116
  goto exit_inplace_result_object;
131
117
  }
132
118
 
133
- Py_DECREF(x);
119
+ Py_DECREF_IMMORTAL(x);
134
120
  }
135
121
 
136
122
  {
@@ -156,7 +142,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **op
156
142
  goto exit_inplace_result_object;
157
143
  }
158
144
 
159
- Py_DECREF(x);
145
+ Py_DECREF_IMMORTAL(x);
160
146
  }
161
147
 
162
148
  if (slot2 != NULL) {
@@ -167,7 +153,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **op
167
153
  goto exit_inplace_result_object;
168
154
  }
169
155
 
170
- Py_DECREF(x);
156
+ Py_DECREF_IMMORTAL(x);
171
157
  }
172
158
 
173
159
  #if PYTHON_VERSION < 0x300
@@ -244,7 +230,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **op
244
230
  }
245
231
  #endif
246
232
 
247
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: '%s' and 'int'", type1->tp_name);
233
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and 'int'", type1->tp_name);
248
234
  goto exit_inplace_exception;
249
235
  }
250
236
 
@@ -304,6 +290,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **operand1, PyObje
304
290
  clong_result = x;
305
291
  goto exit_result_ok_clong;
306
292
  }
293
+
307
294
  {
308
295
  PyObject *operand1_object = *operand1;
309
296
  PyObject *operand2_object = operand2;
@@ -322,7 +309,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_INT(PyObject **operand1, PyObje
322
309
 
323
310
  // That's our return value then. As we use a dedicated variable, it's
324
311
  // OK that way.
325
- *operand1 = PyInt_FromLong(clong_result);
312
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
326
313
  goto exit_result_ok;
327
314
 
328
315
  exit_result_object:
@@ -392,7 +379,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **op
392
379
  goto exit_inplace_result_object;
393
380
  }
394
381
 
395
- Py_DECREF(x);
382
+ Py_DECREF_IMMORTAL(x);
396
383
  slot2 = NULL;
397
384
  }
398
385
  }
@@ -404,7 +391,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **op
404
391
  goto exit_inplace_result_object;
405
392
  }
406
393
 
407
- Py_DECREF(x);
394
+ Py_DECREF_IMMORTAL(x);
408
395
  }
409
396
 
410
397
  if (slot2 != NULL) {
@@ -415,7 +402,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **op
415
402
  goto exit_inplace_result_object;
416
403
  }
417
404
 
418
- Py_DECREF(x);
405
+ Py_DECREF_IMMORTAL(x);
419
406
  }
420
407
 
421
408
  #if PYTHON_VERSION < 0x300
@@ -492,7 +479,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **op
492
479
  }
493
480
  #endif
494
481
 
495
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'int' and '%s'", type2->tp_name);
482
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and '%s'", type2->tp_name);
496
483
  goto exit_inplace_exception;
497
484
  }
498
485
 
@@ -552,6 +539,7 @@ static inline bool _INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **operand1, PyObje
552
539
  clong_result = x;
553
540
  goto exit_result_ok_clong;
554
541
  }
542
+
555
543
  {
556
544
  PyObject *operand1_object = *operand1;
557
545
  PyObject *operand2_object = operand2;
@@ -570,7 +558,7 @@ static inline bool _INPLACE_OPERATION_SUB_INT_OBJECT(PyObject **operand1, PyObje
570
558
 
571
559
  // That's our return value then. As we use a dedicated variable, it's
572
560
  // OK that way.
573
- *operand1 = PyInt_FromLong(clong_result);
561
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
574
562
  goto exit_result_ok;
575
563
 
576
564
  exit_result_object:
@@ -622,8 +610,8 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_LONG(PyObject **operand1, PyObjec
622
610
 
623
611
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
624
612
 
625
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
626
- long r = MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object);
613
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
614
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object));
627
615
 
628
616
  if (Py_REFCNT(*operand1) == 1) {
629
617
  Nuitka_LongUpdateFromCLong(&*operand1, r);
@@ -639,18 +627,18 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_LONG(PyObject **operand1, PyObjec
639
627
  }
640
628
 
641
629
  if (Py_REFCNT(*operand1) == 1) {
642
- digit const *b_digits = operand2_long_object->ob_digit;
643
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
630
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
631
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
644
632
 
645
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
646
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
633
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
634
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
647
635
 
648
636
  if (a_negative) {
649
637
  if (b_negative) {
650
638
  *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
651
639
  } else {
652
640
  *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
653
- Py_SET_SIZE(*operand1, -Py_ABS(Py_SIZE(*operand1)));
641
+ Nuitka_LongSetSignNegative(*operand1);
654
642
  }
655
643
  } else {
656
644
  if (b_negative) {
@@ -665,12 +653,12 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_LONG(PyObject **operand1, PyObjec
665
653
  {
666
654
  PyLongObject *z;
667
655
 
668
- digit const *a_digits = operand1_long_object->ob_digit;
669
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
670
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
671
- digit const *b_digits = operand2_long_object->ob_digit;
672
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
673
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
656
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
657
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
658
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
659
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
660
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
661
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
674
662
 
675
663
  if (a_negative) {
676
664
  if (b_negative) {
@@ -679,7 +667,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_LONG(PyObject **operand1, PyObjec
679
667
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
680
668
  }
681
669
 
682
- Py_SET_SIZE(z, -(Py_SIZE(z)));
670
+ Nuitka_LongFlipSign(z);
683
671
  } else {
684
672
  if (b_negative) {
685
673
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
@@ -708,7 +696,7 @@ exit_result_ok_clong:
708
696
 
709
697
  // That's our return value then. As we use a dedicated variable, it's
710
698
  // OK that way.
711
- *operand1 = PyLong_FromLong(clong_result);
699
+ *operand1 = Nuitka_PyLong_FromLong(clong_result);
712
700
  goto exit_result_ok;
713
701
 
714
702
  exit_result_ok:
@@ -747,7 +735,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **o
747
735
  goto exit_inplace_result_object;
748
736
  }
749
737
 
750
- Py_DECREF(x);
738
+ Py_DECREF_IMMORTAL(x);
751
739
  }
752
740
 
753
741
  {
@@ -773,7 +761,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **o
773
761
  goto exit_inplace_result_object;
774
762
  }
775
763
 
776
- Py_DECREF(x);
764
+ Py_DECREF_IMMORTAL(x);
777
765
  }
778
766
 
779
767
  if (slot2 != NULL) {
@@ -784,7 +772,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **o
784
772
  goto exit_inplace_result_object;
785
773
  }
786
774
 
787
- Py_DECREF(x);
775
+ Py_DECREF_IMMORTAL(x);
788
776
  }
789
777
 
790
778
  #if PYTHON_VERSION < 0x300
@@ -862,9 +850,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **o
862
850
  #endif
863
851
 
864
852
  #if PYTHON_VERSION < 0x300
865
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: '%s' and 'long'", type1->tp_name);
853
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and 'long'", type1->tp_name);
866
854
  #else
867
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: '%s' and 'int'", type1->tp_name);
855
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and 'int'", type1->tp_name);
868
856
  #endif
869
857
  goto exit_inplace_exception;
870
858
  }
@@ -913,8 +901,8 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
913
901
 
914
902
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
915
903
 
916
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
917
- long r = MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object);
904
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
905
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object));
918
906
 
919
907
  if (Py_REFCNT(*operand1) == 1) {
920
908
  Nuitka_LongUpdateFromCLong(&*operand1, r);
@@ -930,18 +918,18 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
930
918
  }
931
919
 
932
920
  if (Py_REFCNT(*operand1) == 1) {
933
- digit const *b_digits = operand2_long_object->ob_digit;
934
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
921
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
922
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
935
923
 
936
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
937
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
924
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
925
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
938
926
 
939
927
  if (a_negative) {
940
928
  if (b_negative) {
941
929
  *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
942
930
  } else {
943
931
  *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
944
- Py_SET_SIZE(*operand1, -Py_ABS(Py_SIZE(*operand1)));
932
+ Nuitka_LongSetSignNegative(*operand1);
945
933
  }
946
934
  } else {
947
935
  if (b_negative) {
@@ -956,12 +944,12 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
956
944
  {
957
945
  PyLongObject *z;
958
946
 
959
- digit const *a_digits = operand1_long_object->ob_digit;
960
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
961
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
962
- digit const *b_digits = operand2_long_object->ob_digit;
963
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
964
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
947
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
948
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
949
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
950
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
951
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
952
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
965
953
 
966
954
  if (a_negative) {
967
955
  if (b_negative) {
@@ -970,7 +958,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
970
958
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
971
959
  }
972
960
 
973
- Py_SET_SIZE(z, -(Py_SIZE(z)));
961
+ Nuitka_LongFlipSign(z);
974
962
  } else {
975
963
  if (b_negative) {
976
964
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
@@ -999,7 +987,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_LONG(PyObject **operand1, PyObj
999
987
 
1000
988
  // That's our return value then. As we use a dedicated variable, it's
1001
989
  // OK that way.
1002
- *operand1 = PyLong_FromLong(clong_result);
990
+ *operand1 = Nuitka_PyLong_FromLong(clong_result);
1003
991
  goto exit_result_ok;
1004
992
 
1005
993
  exit_result_ok:
@@ -1057,7 +1045,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **o
1057
1045
  goto exit_inplace_result_object;
1058
1046
  }
1059
1047
 
1060
- Py_DECREF(x);
1048
+ Py_DECREF_IMMORTAL(x);
1061
1049
  slot2 = NULL;
1062
1050
  }
1063
1051
  }
@@ -1069,7 +1057,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **o
1069
1057
  goto exit_inplace_result_object;
1070
1058
  }
1071
1059
 
1072
- Py_DECREF(x);
1060
+ Py_DECREF_IMMORTAL(x);
1073
1061
  }
1074
1062
 
1075
1063
  if (slot2 != NULL) {
@@ -1080,7 +1068,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **o
1080
1068
  goto exit_inplace_result_object;
1081
1069
  }
1082
1070
 
1083
- Py_DECREF(x);
1071
+ Py_DECREF_IMMORTAL(x);
1084
1072
  }
1085
1073
 
1086
1074
  #if PYTHON_VERSION < 0x300
@@ -1158,9 +1146,9 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **o
1158
1146
  #endif
1159
1147
 
1160
1148
  #if PYTHON_VERSION < 0x300
1161
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'long' and '%s'", type2->tp_name);
1149
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'long' and '%s'", type2->tp_name);
1162
1150
  #else
1163
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'int' and '%s'", type2->tp_name);
1151
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and '%s'", type2->tp_name);
1164
1152
  #endif
1165
1153
  goto exit_inplace_exception;
1166
1154
  }
@@ -1209,8 +1197,8 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
1209
1197
 
1210
1198
  PyLongObject *operand2_long_object = (PyLongObject *)operand2;
1211
1199
 
1212
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && Py_ABS(Py_SIZE(operand2_long_object)) <= 1) {
1213
- long r = MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object);
1200
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && Nuitka_LongGetDigitSize(operand2_long_object) <= 1) {
1201
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) - MEDIUM_VALUE(operand2_long_object));
1214
1202
 
1215
1203
  if (Py_REFCNT(*operand1) == 1) {
1216
1204
  Nuitka_LongUpdateFromCLong(&*operand1, r);
@@ -1226,18 +1214,18 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
1226
1214
  }
1227
1215
 
1228
1216
  if (Py_REFCNT(*operand1) == 1) {
1229
- digit const *b_digits = operand2_long_object->ob_digit;
1230
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
1217
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1218
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1231
1219
 
1232
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
1233
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
1220
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1221
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1234
1222
 
1235
1223
  if (a_negative) {
1236
1224
  if (b_negative) {
1237
1225
  *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
1238
1226
  } else {
1239
1227
  *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
1240
- Py_SET_SIZE(*operand1, -Py_ABS(Py_SIZE(*operand1)));
1228
+ Nuitka_LongSetSignNegative(*operand1);
1241
1229
  }
1242
1230
  } else {
1243
1231
  if (b_negative) {
@@ -1252,12 +1240,12 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
1252
1240
  {
1253
1241
  PyLongObject *z;
1254
1242
 
1255
- digit const *a_digits = operand1_long_object->ob_digit;
1256
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
1257
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
1258
- digit const *b_digits = operand2_long_object->ob_digit;
1259
- Py_ssize_t b_digit_count = Py_ABS(Py_SIZE(operand2_long_object));
1260
- bool b_negative = Py_SIZE(operand2_long_object) < 0;
1243
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
1244
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
1245
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
1246
+ digit const *b_digits = Nuitka_LongGetDigitPointer(operand2_long_object);
1247
+ Py_ssize_t b_digit_count = Nuitka_LongGetDigitSize(operand2_long_object);
1248
+ bool b_negative = Nuitka_LongIsNegative(operand2_long_object);
1261
1249
 
1262
1250
  if (a_negative) {
1263
1251
  if (b_negative) {
@@ -1266,7 +1254,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
1266
1254
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
1267
1255
  }
1268
1256
 
1269
- Py_SET_SIZE(z, -(Py_SIZE(z)));
1257
+ Nuitka_LongFlipSign(z);
1270
1258
  } else {
1271
1259
  if (b_negative) {
1272
1260
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
@@ -1295,7 +1283,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_OBJECT(PyObject **operand1, PyObj
1295
1283
 
1296
1284
  // That's our return value then. As we use a dedicated variable, it's
1297
1285
  // OK that way.
1298
- *operand1 = PyLong_FromLong(clong_result);
1286
+ *operand1 = Nuitka_PyLong_FromLong(clong_result);
1299
1287
  goto exit_result_ok;
1300
1288
 
1301
1289
  exit_result_ok:
@@ -1390,7 +1378,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_FLOAT(PyObject **
1390
1378
  goto exit_inplace_result_object;
1391
1379
  }
1392
1380
 
1393
- Py_DECREF(x);
1381
+ Py_DECREF_IMMORTAL(x);
1394
1382
  }
1395
1383
 
1396
1384
  {
@@ -1416,7 +1404,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_FLOAT(PyObject **
1416
1404
  goto exit_inplace_result_object;
1417
1405
  }
1418
1406
 
1419
- Py_DECREF(x);
1407
+ Py_DECREF_IMMORTAL(x);
1420
1408
  }
1421
1409
 
1422
1410
  if (slot2 != NULL) {
@@ -1427,7 +1415,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_FLOAT(PyObject **
1427
1415
  goto exit_inplace_result_object;
1428
1416
  }
1429
1417
 
1430
- Py_DECREF(x);
1418
+ Py_DECREF_IMMORTAL(x);
1431
1419
  }
1432
1420
 
1433
1421
  #if PYTHON_VERSION < 0x300
@@ -1504,7 +1492,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_OBJECT_FLOAT(PyObject **
1504
1492
  }
1505
1493
  #endif
1506
1494
 
1507
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: '%s' and 'float'", type1->tp_name);
1495
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and 'float'", type1->tp_name);
1508
1496
  goto exit_inplace_exception;
1509
1497
  }
1510
1498
 
@@ -1625,7 +1613,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_FLOAT_OBJECT(PyObject **
1625
1613
  goto exit_inplace_result_object;
1626
1614
  }
1627
1615
 
1628
- Py_DECREF(x);
1616
+ Py_DECREF_IMMORTAL(x);
1629
1617
  slot2 = NULL;
1630
1618
  }
1631
1619
  }
@@ -1637,7 +1625,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_FLOAT_OBJECT(PyObject **
1637
1625
  goto exit_inplace_result_object;
1638
1626
  }
1639
1627
 
1640
- Py_DECREF(x);
1628
+ Py_DECREF_IMMORTAL(x);
1641
1629
  }
1642
1630
 
1643
1631
  if (slot2 != NULL) {
@@ -1648,7 +1636,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_FLOAT_OBJECT(PyObject **
1648
1636
  goto exit_inplace_result_object;
1649
1637
  }
1650
1638
 
1651
- Py_DECREF(x);
1639
+ Py_DECREF_IMMORTAL(x);
1652
1640
  }
1653
1641
 
1654
1642
  #if PYTHON_VERSION < 0x300
@@ -1725,7 +1713,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_SUB_FLOAT_OBJECT(PyObject **
1725
1713
  }
1726
1714
  #endif
1727
1715
 
1728
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'float' and '%s'", type2->tp_name);
1716
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'float' and '%s'", type2->tp_name);
1729
1717
  goto exit_inplace_exception;
1730
1718
  }
1731
1719
 
@@ -1838,15 +1826,15 @@ static inline bool _INPLACE_OPERATION_SUB_FLOAT_LONG(PyObject **operand1, PyObje
1838
1826
  goto exit_inplace_result_object;
1839
1827
  }
1840
1828
 
1841
- Py_DECREF(x);
1829
+ Py_DECREF_IMMORTAL(x);
1842
1830
  }
1843
1831
 
1844
1832
  // Statically recognized that coercion is not possible with these types
1845
1833
 
1846
1834
  #if PYTHON_VERSION < 0x300
1847
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'float' and 'long'");
1835
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'float' and 'long'");
1848
1836
  #else
1849
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'float' and 'int'");
1837
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'float' and 'int'");
1850
1838
  #endif
1851
1839
  goto exit_inplace_exception;
1852
1840
  }
@@ -1912,15 +1900,15 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_FLOAT(PyObject **operand1, PyObje
1912
1900
  goto exit_inplace_result_object;
1913
1901
  }
1914
1902
 
1915
- Py_DECREF(x);
1903
+ Py_DECREF_IMMORTAL(x);
1916
1904
  }
1917
1905
 
1918
1906
  // Statically recognized that coercion is not possible with these types
1919
1907
 
1920
1908
  #if PYTHON_VERSION < 0x300
1921
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'long' and 'float'");
1909
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'long' and 'float'");
1922
1910
  #else
1923
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'int' and 'float'");
1911
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and 'float'");
1924
1912
  #endif
1925
1913
  goto exit_inplace_exception;
1926
1914
  }
@@ -1981,12 +1969,12 @@ static inline bool _INPLACE_OPERATION_SUB_FLOAT_INT(PyObject **operand1, PyObjec
1981
1969
  goto exit_inplace_result_object;
1982
1970
  }
1983
1971
 
1984
- Py_DECREF(x);
1972
+ Py_DECREF_IMMORTAL(x);
1985
1973
  }
1986
1974
 
1987
1975
  // Statically recognized that coercion is not possible with these types
1988
1976
 
1989
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'float' and 'int'");
1977
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'float' and 'int'");
1990
1978
  goto exit_inplace_exception;
1991
1979
  }
1992
1980
 
@@ -2053,12 +2041,12 @@ static inline bool _INPLACE_OPERATION_SUB_INT_FLOAT(PyObject **operand1, PyObjec
2053
2041
  goto exit_inplace_result_object;
2054
2042
  }
2055
2043
 
2056
- Py_DECREF(x);
2044
+ Py_DECREF_IMMORTAL(x);
2057
2045
  }
2058
2046
 
2059
2047
  // Statically recognized that coercion is not possible with these types
2060
2048
 
2061
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'int' and 'float'");
2049
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and 'float'");
2062
2050
  goto exit_inplace_exception;
2063
2051
  }
2064
2052
 
@@ -2119,12 +2107,12 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_INT(PyObject **operand1, PyObject
2119
2107
  goto exit_inplace_result_object;
2120
2108
  }
2121
2109
 
2122
- Py_DECREF(x);
2110
+ Py_DECREF_IMMORTAL(x);
2123
2111
  }
2124
2112
 
2125
2113
  // Statically recognized that coercion is not possible with these types
2126
2114
 
2127
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'long' and 'int'");
2115
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'long' and 'int'");
2128
2116
  goto exit_inplace_exception;
2129
2117
  }
2130
2118
 
@@ -2191,12 +2179,12 @@ static inline bool _INPLACE_OPERATION_SUB_INT_LONG(PyObject **operand1, PyObject
2191
2179
  goto exit_inplace_result_object;
2192
2180
  }
2193
2181
 
2194
- Py_DECREF(x);
2182
+ Py_DECREF_IMMORTAL(x);
2195
2183
  }
2196
2184
 
2197
2185
  // Statically recognized that coercion is not possible with these types
2198
2186
 
2199
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: 'int' and 'long'");
2187
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: 'int' and 'long'");
2200
2188
  goto exit_inplace_exception;
2201
2189
  }
2202
2190
 
@@ -2256,9 +2244,10 @@ static inline bool _INPLACE_OPERATION_SUB_INT_CLONG(PyObject **operand1, long op
2256
2244
  clong_result = x;
2257
2245
  goto exit_result_ok_clong;
2258
2246
  }
2247
+
2259
2248
  {
2260
2249
  PyObject *operand1_object = *operand1;
2261
- PyObject *operand2_object = PyLong_FromLong(operand2);
2250
+ PyObject *operand2_object = Nuitka_PyLong_FromLong(operand2);
2262
2251
 
2263
2252
  PyObject *r = PyLong_Type.tp_as_number->nb_subtract(operand1_object, operand2_object);
2264
2253
  assert(r != Py_NotImplemented);
@@ -2276,7 +2265,7 @@ exit_result_ok_clong:
2276
2265
 
2277
2266
  // That's our return value then. As we use a dedicated variable, it's
2278
2267
  // OK that way.
2279
- *operand1 = PyInt_FromLong(clong_result);
2268
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
2280
2269
  goto exit_result_ok;
2281
2270
 
2282
2271
  exit_result_object:
@@ -2323,8 +2312,8 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
2323
2312
 
2324
2313
  PyLongObject *operand1_long_object = (PyLongObject *)*operand1;
2325
2314
 
2326
- if (Py_ABS(Py_SIZE(operand1_long_object)) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
2327
- long r = MEDIUM_VALUE(operand1_long_object) - (sdigit)operand2;
2315
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && (operand2 == 0 ? 0 : 1) <= 1) {
2316
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) - (sdigit)operand2);
2328
2317
 
2329
2318
  if (Py_REFCNT(*operand1) == 1) {
2330
2319
  Nuitka_LongUpdateFromCLong(&*operand1, r);
@@ -2343,7 +2332,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
2343
2332
  digit const *b_digits = (digit *)&operand2;
2344
2333
  Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
2345
2334
 
2346
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
2335
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
2347
2336
  bool b_negative = operand2 < 0;
2348
2337
 
2349
2338
  if (a_negative) {
@@ -2351,7 +2340,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
2351
2340
  *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
2352
2341
  } else {
2353
2342
  *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
2354
- Py_SET_SIZE(*operand1, -Py_ABS(Py_SIZE(*operand1)));
2343
+ Nuitka_LongSetSignNegative(*operand1);
2355
2344
  }
2356
2345
  } else {
2357
2346
  if (b_negative) {
@@ -2366,9 +2355,9 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
2366
2355
  {
2367
2356
  PyLongObject *z;
2368
2357
 
2369
- digit const *a_digits = operand1_long_object->ob_digit;
2370
- Py_ssize_t a_digit_count = Py_ABS(Py_SIZE(operand1_long_object));
2371
- bool a_negative = Py_SIZE(operand1_long_object) < 0;
2358
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
2359
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
2360
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
2372
2361
  digit const *b_digits = (digit *)&operand2;
2373
2362
  Py_ssize_t b_digit_count = (operand2 == 0 ? 0 : 1);
2374
2363
  bool b_negative = operand2 < 0;
@@ -2380,7 +2369,7 @@ static inline bool _INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long o
2380
2369
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
2381
2370
  }
2382
2371
 
2383
- Py_SET_SIZE(z, -(Py_SIZE(z)));
2372
+ Nuitka_LongFlipSign(z);
2384
2373
  } else {
2385
2374
  if (b_negative) {
2386
2375
  z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
@@ -2409,7 +2398,7 @@ exit_result_ok_clong:
2409
2398
 
2410
2399
  // That's our return value then. As we use a dedicated variable, it's
2411
2400
  // OK that way.
2412
- *operand1 = PyLong_FromLong(clong_result);
2401
+ *operand1 = Nuitka_PyLong_FromLong(clong_result);
2413
2402
  goto exit_result_ok;
2414
2403
 
2415
2404
  exit_result_ok:
@@ -2423,6 +2412,154 @@ bool INPLACE_OPERATION_SUB_LONG_DIGIT(PyObject **operand1, long operand2) {
2423
2412
  return _INPLACE_OPERATION_SUB_LONG_DIGIT(operand1, operand2);
2424
2413
  }
2425
2414
 
2415
+ /* Code referring to "LONG" corresponds to Python2 'long', Python3 'int' and "CLONG" to C platform long value. */
2416
+ static inline bool _INPLACE_OPERATION_SUB_LONG_CLONG(PyObject **operand1, long operand2) {
2417
+ assert(operand1); // Pointer must be non-null.
2418
+
2419
+ CHECK_OBJECT(*operand1);
2420
+ assert(PyLong_CheckExact(*operand1));
2421
+
2422
+ // Not every code path will make use of all possible results.
2423
+ #ifdef _MSC_VER
2424
+ #pragma warning(push)
2425
+ #pragma warning(disable : 4101)
2426
+ #endif
2427
+ NUITKA_MAY_BE_UNUSED PyObject *obj_result;
2428
+ NUITKA_MAY_BE_UNUSED long clong_result;
2429
+ #ifdef _MSC_VER
2430
+ #pragma warning(pop)
2431
+ #endif
2432
+
2433
+ PyLongObject *operand1_long_object = (PyLongObject *)*operand1;
2434
+
2435
+ bool operand2_is_negative;
2436
+ unsigned long operand2_abs_ival;
2437
+
2438
+ if (operand2 < 0) {
2439
+ operand2_abs_ival = (unsigned long)(-1 - operand2) + 1;
2440
+ operand2_is_negative = true;
2441
+ } else {
2442
+ operand2_abs_ival = (unsigned long)operand2;
2443
+ operand2_is_negative = false;
2444
+ }
2445
+
2446
+ Py_ssize_t operand2_digit_count = 0;
2447
+ digit operand2_digits[5] = {0}; // Could be more minimal and depend on sizeof(digit)
2448
+ {
2449
+ unsigned long t = operand2_abs_ival;
2450
+
2451
+ while (t != 0) {
2452
+ operand2_digit_count += 1;
2453
+ assert(operand2_digit_count <= (Py_ssize_t)(sizeof(operand2_digit_count) / sizeof(digit)));
2454
+
2455
+ operand2_digits[operand2_digit_count] = (digit)(t & PyLong_MASK);
2456
+ t >>= PyLong_SHIFT;
2457
+ }
2458
+ }
2459
+
2460
+ NUITKA_MAY_BE_UNUSED Py_ssize_t operand2_size =
2461
+ operand2_is_negative == false ? operand2_digit_count : -operand2_digit_count;
2462
+
2463
+ if (Nuitka_LongGetDigitSize(operand1_long_object) <= 1 && operand2_digit_count <= 1) {
2464
+ long r = (long)(MEDIUM_VALUE(operand1_long_object) - (sdigit)operand2);
2465
+
2466
+ if (Py_REFCNT(*operand1) == 1) {
2467
+ Nuitka_LongUpdateFromCLong(&*operand1, r);
2468
+ goto exit_result_ok;
2469
+ } else {
2470
+ PyObject *obj = Nuitka_LongFromCLong(r);
2471
+
2472
+ obj_result = obj;
2473
+ goto exit_result_object;
2474
+ }
2475
+ clong_result = r;
2476
+ goto exit_result_ok_clong;
2477
+ }
2478
+
2479
+ if (Py_REFCNT(*operand1) == 1) {
2480
+ digit const *b_digits = operand2_digits;
2481
+ Py_ssize_t b_digit_count = operand2_digit_count;
2482
+
2483
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
2484
+ bool b_negative = operand2_is_negative;
2485
+
2486
+ if (a_negative) {
2487
+ if (b_negative) {
2488
+ *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, -1);
2489
+ } else {
2490
+ *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
2491
+ Nuitka_LongSetSignNegative(*operand1);
2492
+ }
2493
+ } else {
2494
+ if (b_negative) {
2495
+ *operand1 = _Nuitka_LongAddInplaceDigits(*operand1, b_digits, b_digit_count);
2496
+ } else {
2497
+ *operand1 = _Nuitka_LongSubInplaceDigits(*operand1, b_digits, b_digit_count, 1);
2498
+ }
2499
+ }
2500
+
2501
+ goto exit_result_ok;
2502
+ }
2503
+ {
2504
+ PyLongObject *z;
2505
+
2506
+ digit const *a_digits = Nuitka_LongGetDigitPointer(operand1_long_object);
2507
+ Py_ssize_t a_digit_count = Nuitka_LongGetDigitSize(operand1_long_object);
2508
+ bool a_negative = Nuitka_LongIsNegative(operand1_long_object);
2509
+ digit const *b_digits = operand2_digits;
2510
+ Py_ssize_t b_digit_count = operand2_digit_count;
2511
+ bool b_negative = operand2_is_negative;
2512
+
2513
+ if (a_negative) {
2514
+ if (b_negative) {
2515
+ z = _Nuitka_LongSubDigits(a_digits, a_digit_count, b_digits, b_digit_count);
2516
+ } else {
2517
+ z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
2518
+ }
2519
+
2520
+ Nuitka_LongFlipSign(z);
2521
+ } else {
2522
+ if (b_negative) {
2523
+ z = _Nuitka_LongAddDigits(a_digits, a_digit_count, b_digits, b_digit_count);
2524
+ } else {
2525
+ z = _Nuitka_LongSubDigits(a_digits, a_digit_count, b_digits, b_digit_count);
2526
+ }
2527
+ }
2528
+
2529
+ obj_result = (PyObject *)z;
2530
+ goto exit_result_object;
2531
+ }
2532
+
2533
+ exit_result_object:
2534
+ if (unlikely(obj_result == NULL)) {
2535
+ goto exit_result_exception;
2536
+ }
2537
+ // We got an object handed, that we have to release.
2538
+ Py_DECREF(*operand1);
2539
+ *operand1 = obj_result;
2540
+ goto exit_result_ok;
2541
+
2542
+ exit_result_ok_clong:
2543
+
2544
+ // We got an object handed, that we have to release.
2545
+ Py_DECREF(*operand1);
2546
+
2547
+ // That's our return value then. As we use a dedicated variable, it's
2548
+ // OK that way.
2549
+ *operand1 = Nuitka_PyLong_FromLong(clong_result);
2550
+ goto exit_result_ok;
2551
+
2552
+ exit_result_ok:
2553
+ return true;
2554
+
2555
+ exit_result_exception:
2556
+ return false;
2557
+ }
2558
+
2559
+ bool INPLACE_OPERATION_SUB_LONG_CLONG(PyObject **operand1, long operand2) {
2560
+ return _INPLACE_OPERATION_SUB_LONG_CLONG(operand1, operand2);
2561
+ }
2562
+
2426
2563
  /* Code referring to "FLOAT" corresponds to Python 'float' and "CFLOAT" to C platform float value. */
2427
2564
  static inline bool _INPLACE_OPERATION_SUB_FLOAT_CFLOAT(PyObject **operand1, double operand2) {
2428
2565
  assert(operand1); // Pointer must be non-null.
@@ -2509,6 +2646,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
2509
2646
  clong_result = x;
2510
2647
  goto exit_result_ok_clong;
2511
2648
  }
2649
+
2512
2650
  {
2513
2651
  PyObject *operand1_object = *operand1;
2514
2652
  PyObject *operand2_object = operand2;
@@ -2527,7 +2665,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
2527
2665
 
2528
2666
  // That's our return value then. As we use a dedicated variable, it's
2529
2667
  // OK that way.
2530
- *operand1 = PyInt_FromLong(clong_result);
2668
+ *operand1 = Nuitka_PyInt_FromLong(clong_result);
2531
2669
  goto exit_result_ok;
2532
2670
 
2533
2671
  exit_result_object:
@@ -2583,7 +2721,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
2583
2721
  goto exit_inplace_result_object;
2584
2722
  }
2585
2723
 
2586
- Py_DECREF(x);
2724
+ Py_DECREF_IMMORTAL(x);
2587
2725
  }
2588
2726
 
2589
2727
  {
@@ -2612,7 +2750,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
2612
2750
  goto exit_inplace_result_object;
2613
2751
  }
2614
2752
 
2615
- Py_DECREF(x);
2753
+ Py_DECREF_IMMORTAL(x);
2616
2754
  slot2 = NULL;
2617
2755
  }
2618
2756
  }
@@ -2624,7 +2762,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
2624
2762
  goto exit_inplace_result_object;
2625
2763
  }
2626
2764
 
2627
- Py_DECREF(x);
2765
+ Py_DECREF_IMMORTAL(x);
2628
2766
  }
2629
2767
 
2630
2768
  if (slot2 != NULL) {
@@ -2635,7 +2773,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
2635
2773
  goto exit_inplace_result_object;
2636
2774
  }
2637
2775
 
2638
- Py_DECREF(x);
2776
+ Py_DECREF_IMMORTAL(x);
2639
2777
  }
2640
2778
 
2641
2779
  #if PYTHON_VERSION < 0x300
@@ -2713,7 +2851,7 @@ static inline bool _INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyO
2713
2851
  }
2714
2852
  #endif
2715
2853
 
2716
- PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -: '%s' and '%s'", type1->tp_name,
2854
+ PyErr_Format(PyExc_TypeError, "unsupported operand type(s) for -=: '%s' and '%s'", type1->tp_name,
2717
2855
  type2->tp_name);
2718
2856
  goto exit_inplace_exception;
2719
2857
  }
@@ -2739,3 +2877,18 @@ exit_inplace_exception:
2739
2877
  bool INPLACE_OPERATION_SUB_OBJECT_OBJECT(PyObject **operand1, PyObject *operand2) {
2740
2878
  return _INPLACE_OPERATION_SUB_OBJECT_OBJECT(operand1, operand2);
2741
2879
  }
2880
+
2881
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
2882
+ // integrates with CPython, but also works on its own.
2883
+ //
2884
+ // Licensed under the Apache License, Version 2.0 (the "License");
2885
+ // you may not use this file except in compliance with the License.
2886
+ // You may obtain a copy of the License at
2887
+ //
2888
+ // http://www.apache.org/licenses/LICENSE-2.0
2889
+ //
2890
+ // Unless required by applicable law or agreed to in writing, software
2891
+ // distributed under the License is distributed on an "AS IS" BASIS,
2892
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2893
+ // See the License for the specific language governing permissions and
2894
+ // limitations under the License.