Nuitka-winsvc 2.4.11__cp311-cp311-win_amd64.whl → 2.5.6__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 (304) hide show
  1. {Nuitka_winsvc-2.4.11.dist-info → Nuitka_winsvc-2.5.6.dist-info}/METADATA +56 -109
  2. {Nuitka_winsvc-2.4.11.dist-info → Nuitka_winsvc-2.5.6.dist-info}/RECORD +304 -280
  3. {Nuitka_winsvc-2.4.11.dist-info → Nuitka_winsvc-2.5.6.dist-info}/WHEEL +1 -1
  4. nuitka/Builtins.py +31 -0
  5. nuitka/HardImportRegistry.py +8 -0
  6. nuitka/MainControl.py +9 -4
  7. nuitka/OptionParsing.py +108 -54
  8. nuitka/Options.py +69 -13
  9. nuitka/OutputDirectories.py +7 -2
  10. nuitka/PostProcessing.py +69 -38
  11. nuitka/Progress.py +16 -1
  12. nuitka/PythonVersions.py +2 -1
  13. nuitka/Serialization.py +4 -2
  14. nuitka/Tracing.py +69 -1
  15. nuitka/Version.py +2 -2
  16. nuitka/build/Backend.scons +45 -5
  17. nuitka/build/CCompilerVersion.scons +6 -0
  18. nuitka/build/Onefile.scons +6 -0
  19. nuitka/build/SconsCaching.py +4 -0
  20. nuitka/build/SconsCompilerSettings.py +14 -3
  21. nuitka/build/SconsInterface.py +3 -0
  22. nuitka/build/SconsUtils.py +5 -0
  23. nuitka/build/include/nuitka/allocator.h +124 -1
  24. nuitka/build/include/nuitka/calling.h +6 -6
  25. nuitka/build/include/nuitka/compiled_asyncgen.h +10 -7
  26. nuitka/build/include/nuitka/compiled_frame.h +2 -1
  27. nuitka/build/include/nuitka/constants.h +8 -0
  28. nuitka/build/include/nuitka/debug_settings.h +60 -0
  29. nuitka/build/include/nuitka/exceptions.h +264 -121
  30. nuitka/build/include/nuitka/helper/attributes.h +0 -4
  31. nuitka/build/include/nuitka/helper/calling_generated.h +52 -52
  32. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  33. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  34. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  35. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  36. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  37. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  38. nuitka/build/include/nuitka/helper/dictionaries.h +75 -31
  39. nuitka/build/include/nuitka/helper/ints.h +86 -37
  40. nuitka/build/include/nuitka/helper/iterators.h +82 -34
  41. nuitka/build/include/nuitka/helper/operations.h +3 -0
  42. nuitka/build/include/nuitka/helper/operations_binary_add.h +6 -0
  43. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  44. nuitka/build/include/nuitka/helper/operations_binary_sub.h +6 -0
  45. nuitka/build/include/nuitka/helper/operations_inplace_add.h +3 -0
  46. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +3 -0
  47. nuitka/build/include/nuitka/helper/raising.h +47 -28
  48. nuitka/build/include/nuitka/helper/richcomparisons.h +7 -0
  49. nuitka/build/include/nuitka/helper/tuples.h +12 -0
  50. nuitka/build/include/nuitka/helpers.h +12 -2
  51. nuitka/build/include/nuitka/prelude.h +36 -25
  52. nuitka/build/include/nuitka/printing.h +9 -7
  53. nuitka/build/include/nuitka/threading.h +15 -1
  54. nuitka/build/include/nuitka/type_aliases.h +3 -0
  55. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  56. nuitka/build/inline_copy/stubgen/six.py +998 -0
  57. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  58. nuitka/build/static_src/CompiledAsyncgenType.c +45 -39
  59. nuitka/build/static_src/CompiledCellType.c +6 -4
  60. nuitka/build/static_src/CompiledCodeHelpers.c +106 -40
  61. nuitka/build/static_src/CompiledCoroutineType.c +41 -31
  62. nuitka/build/static_src/CompiledFrameType.c +110 -79
  63. nuitka/build/static_src/CompiledFunctionType.c +173 -151
  64. nuitka/build/static_src/CompiledGeneratorType.c +51 -49
  65. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +433 -46
  66. nuitka/build/static_src/CompiledMethodType.c +6 -12
  67. nuitka/build/static_src/HelpersAllocator.c +266 -28
  68. nuitka/build/static_src/HelpersAttributes.c +0 -21
  69. nuitka/build/static_src/HelpersBuiltin.c +23 -14
  70. nuitka/build/static_src/HelpersCalling.c +7 -7
  71. nuitka/build/static_src/HelpersCallingGenerated.c +70 -70
  72. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  73. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  74. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  75. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  76. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  77. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  78. nuitka/build/static_src/HelpersComparisonEq.c +18 -4
  79. nuitka/build/static_src/HelpersComparisonGe.c +18 -4
  80. nuitka/build/static_src/HelpersComparisonGt.c +18 -4
  81. nuitka/build/static_src/HelpersComparisonLe.c +18 -4
  82. nuitka/build/static_src/HelpersComparisonLt.c +18 -4
  83. nuitka/build/static_src/HelpersComparisonNe.c +18 -4
  84. nuitka/build/static_src/HelpersConsole.c +34 -8
  85. nuitka/build/static_src/HelpersConstantsBlob.c +4 -2
  86. nuitka/build/static_src/HelpersDeepcopy.c +1 -0
  87. nuitka/build/static_src/HelpersDictionaries.c +195 -36
  88. nuitka/build/static_src/HelpersDictionariesGenerated.c +12 -107
  89. nuitka/build/static_src/HelpersExceptions.c +24 -50
  90. nuitka/build/static_src/HelpersFiles.c +79 -5
  91. nuitka/build/static_src/HelpersImport.c +13 -9
  92. nuitka/build/static_src/HelpersImportHard.c +23 -46
  93. nuitka/build/static_src/HelpersLists.c +98 -9
  94. nuitka/build/static_src/HelpersOperationBinaryAdd.c +224 -6
  95. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +3 -0
  96. nuitka/build/static_src/HelpersOperationBinaryBitand.c +5 -5
  97. nuitka/build/static_src/HelpersOperationBinaryBitor.c +5 -5
  98. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +5 -5
  99. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +8 -2
  100. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  101. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +14 -8
  102. nuitka/build/static_src/HelpersOperationBinaryLshift.c +36 -36
  103. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +1 -0
  104. nuitka/build/static_src/HelpersOperationBinaryMod.c +22 -10
  105. nuitka/build/static_src/HelpersOperationBinaryMult.c +17 -7
  106. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +14 -8
  107. nuitka/build/static_src/HelpersOperationBinaryPow.c +24 -24
  108. nuitka/build/static_src/HelpersOperationBinaryRshift.c +4 -4
  109. nuitka/build/static_src/HelpersOperationBinarySub.c +229 -8
  110. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +8 -2
  111. nuitka/build/static_src/HelpersOperationInplaceAdd.c +162 -10
  112. nuitka/build/static_src/HelpersOperationInplaceBitand.c +5 -5
  113. nuitka/build/static_src/HelpersOperationInplaceBitor.c +5 -5
  114. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +5 -5
  115. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +11 -6
  116. nuitka/build/static_src/HelpersOperationInplaceLshift.c +20 -20
  117. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +1 -0
  118. nuitka/build/static_src/HelpersOperationInplaceMod.c +11 -6
  119. nuitka/build/static_src/HelpersOperationInplaceMult.c +11 -6
  120. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +11 -6
  121. nuitka/build/static_src/HelpersOperationInplacePow.c +20 -20
  122. nuitka/build/static_src/HelpersOperationInplaceRshift.c +4 -4
  123. nuitka/build/static_src/HelpersOperationInplaceSub.c +163 -10
  124. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +6 -1
  125. nuitka/build/static_src/HelpersProfiling.c +1 -1
  126. nuitka/build/static_src/HelpersRaising.c +255 -310
  127. nuitka/build/static_src/HelpersStrings.c +1 -1
  128. nuitka/build/static_src/HelpersTuples.c +2 -2
  129. nuitka/build/static_src/HelpersTypes.c +98 -2
  130. nuitka/build/static_src/MainProgram.c +132 -28
  131. nuitka/build/static_src/MetaPathBasedLoader.c +18 -19
  132. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +134 -11
  133. nuitka/build/static_src/OnefileBootstrap.c +6 -1
  134. nuitka/code_generation/AsyncgenCodes.py +2 -6
  135. nuitka/code_generation/BinaryOperationHelperDefinitions.py +269 -167
  136. nuitka/code_generation/BuiltinCodes.py +9 -1
  137. nuitka/code_generation/CallCodes.py +16 -16
  138. nuitka/code_generation/CodeGeneration.py +14 -2
  139. nuitka/code_generation/CodeHelperSelection.py +1 -1
  140. nuitka/code_generation/CodeHelpers.py +4 -1
  141. nuitka/code_generation/CodeObjectCodes.py +2 -2
  142. nuitka/code_generation/ComparisonCodes.py +13 -2
  143. nuitka/code_generation/ComparisonHelperDefinitions.py +23 -8
  144. nuitka/code_generation/Contexts.py +28 -16
  145. nuitka/code_generation/CoroutineCodes.py +2 -6
  146. nuitka/code_generation/DictCodes.py +3 -3
  147. nuitka/code_generation/ErrorCodes.py +34 -50
  148. nuitka/code_generation/ExceptionCodes.py +165 -96
  149. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +25 -10
  150. nuitka/code_generation/FrameCodes.py +4 -11
  151. nuitka/code_generation/FunctionCodes.py +2 -6
  152. nuitka/code_generation/GeneratorCodes.py +2 -6
  153. nuitka/code_generation/GlobalConstants.py +8 -2
  154. nuitka/code_generation/GlobalsLocalsCodes.py +2 -2
  155. nuitka/code_generation/IteratorCodes.py +67 -54
  156. nuitka/code_generation/LineNumberCodes.py +1 -3
  157. nuitka/code_generation/ModuleCodes.py +28 -4
  158. nuitka/code_generation/OperationCodes.py +51 -20
  159. nuitka/code_generation/PackageResourceCodes.py +37 -0
  160. nuitka/code_generation/RaisingCodes.py +164 -90
  161. nuitka/code_generation/Reports.py +13 -5
  162. nuitka/code_generation/ReturnCodes.py +2 -16
  163. nuitka/code_generation/TryCodes.py +12 -24
  164. nuitka/code_generation/TypeAliasCodes.py +48 -0
  165. nuitka/code_generation/VariableCodes.py +99 -40
  166. nuitka/code_generation/VariableDeclarations.py +8 -8
  167. nuitka/code_generation/YieldCodes.py +1 -1
  168. nuitka/code_generation/c_types/CTypeBases.py +10 -2
  169. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +3 -0
  170. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +3 -4
  171. nuitka/code_generation/c_types/CTypeNuitkaInts.py +70 -25
  172. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +1 -1
  173. nuitka/code_generation/c_types/CTypePyObjectPointers.py +16 -6
  174. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +2 -2
  175. nuitka/code_generation/templates/CodeTemplatesConstants.py +11 -3
  176. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +2 -2
  177. nuitka/code_generation/templates/CodeTemplatesExceptions.py +15 -16
  178. nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -10
  179. nuitka/code_generation/templates/CodeTemplatesFunction.py +2 -2
  180. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +2 -2
  181. nuitka/code_generation/templates/CodeTemplatesIterators.py +1 -35
  182. nuitka/code_generation/templates/CodeTemplatesModules.py +34 -4
  183. nuitka/code_generation/templates/CodeTemplatesVariables.py +76 -0
  184. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +3 -3
  185. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +3 -3
  186. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +4 -106
  187. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +1 -2
  188. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +1 -1
  189. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  190. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +9 -9
  191. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  192. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +1 -1
  193. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +1 -1
  194. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +9 -9
  195. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +7 -7
  196. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +9 -9
  197. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +7 -7
  198. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +4 -4
  199. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +1 -1
  200. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +31 -31
  201. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +1 -1
  202. nuitka/containers/Namedtuples.py +6 -0
  203. nuitka/containers/OrderedSets.py +105 -5
  204. nuitka/distutils/Build.py +14 -0
  205. nuitka/distutils/DistutilCommands.py +50 -10
  206. nuitka/finalizations/Finalization.py +3 -3
  207. nuitka/finalizations/FinalizeMarkups.py +10 -14
  208. nuitka/freezer/DependsExe.py +5 -2
  209. nuitka/freezer/DllDependenciesMacOS.py +18 -1
  210. nuitka/freezer/DllDependenciesWin32.py +26 -12
  211. nuitka/freezer/ImportDetection.py +6 -0
  212. nuitka/freezer/IncludedDataFiles.py +37 -6
  213. nuitka/freezer/Onefile.py +1 -0
  214. nuitka/freezer/Standalone.py +72 -18
  215. nuitka/importing/Importing.py +33 -6
  216. nuitka/importing/Recursion.py +5 -2
  217. nuitka/importing/StandardLibrary.py +57 -59
  218. nuitka/nodes/AsyncgenNodes.py +3 -6
  219. nuitka/nodes/BuiltinIteratorNodes.py +2 -2
  220. nuitka/nodes/BuiltinRefNodes.py +14 -30
  221. nuitka/nodes/ChildrenHavingMixins.py +439 -46
  222. nuitka/nodes/ConditionalNodes.py +3 -2
  223. nuitka/nodes/CoroutineNodes.py +3 -6
  224. nuitka/nodes/DictionaryNodes.py +1 -1
  225. nuitka/nodes/ExceptionNodes.py +102 -26
  226. nuitka/nodes/ExpressionBasesGenerated.py +288 -4
  227. nuitka/nodes/FrameNodes.py +22 -11
  228. nuitka/nodes/FunctionNodes.py +3 -3
  229. nuitka/nodes/GeneratorNodes.py +3 -6
  230. nuitka/nodes/HardImportNodesGenerated.py +182 -0
  231. nuitka/nodes/ImportNodes.py +2 -2
  232. nuitka/nodes/NodeBases.py +28 -1
  233. nuitka/nodes/NodeMakingHelpers.py +71 -50
  234. nuitka/nodes/OperatorNodesUnary.py +128 -3
  235. nuitka/nodes/OsSysNodes.py +37 -6
  236. nuitka/nodes/OutlineNodes.py +2 -2
  237. nuitka/nodes/StatementBasesGenerated.py +0 -2
  238. nuitka/nodes/StatementNodes.py +8 -7
  239. nuitka/nodes/SubscriptNodes.py +1 -1
  240. nuitka/nodes/TypeNodes.py +28 -1
  241. nuitka/nodes/VariableAssignNodes.py +2 -1
  242. nuitka/nodes/shapes/BuiltinTypeShapes.py +24 -7
  243. nuitka/nodes/shapes/IteratorShapes.py +71 -0
  244. nuitka/nodes/shapes/ShapeMixins.py +18 -0
  245. nuitka/nodes/shapes/StandardShapes.py +47 -44
  246. nuitka/optimizations/BytecodeDemotion.py +2 -1
  247. nuitka/plugins/PluginBase.py +64 -22
  248. nuitka/plugins/Plugins.py +16 -3
  249. nuitka/plugins/standard/AntiBloatPlugin.py +23 -12
  250. nuitka/plugins/standard/DllFilesPlugin.py +78 -2
  251. nuitka/plugins/standard/ImplicitImports.py +5 -15
  252. nuitka/plugins/standard/KivyPlugin.py +3 -12
  253. nuitka/plugins/standard/MatplotlibPlugin.py +12 -1
  254. nuitka/plugins/standard/MultiprocessingPlugin.py +11 -20
  255. nuitka/plugins/standard/OptionsNannyPlugin.py +5 -4
  256. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  257. nuitka/plugins/standard/PySidePyQtPlugin.py +8 -0
  258. nuitka/plugins/standard/TkinterPlugin.py +23 -3
  259. nuitka/plugins/standard/TransformersPlugin.py +70 -275
  260. nuitka/plugins/standard/standard.nuitka-package.config.yml +413 -30
  261. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +35 -2
  262. nuitka/reports/CompilationReportReader.py +12 -0
  263. nuitka/reports/Reports.py +11 -0
  264. nuitka/specs/BuiltinParameterSpecs.py +5 -1
  265. nuitka/specs/HardImportSpecs.py +7 -0
  266. nuitka/specs/ParameterSpecs.py +4 -4
  267. nuitka/tools/environments/Virtualenv.py +13 -5
  268. nuitka/tools/general/dll_report/__main__.py +10 -1
  269. nuitka/tools/onefile_compressor/OnefileCompressor.py +1 -1
  270. nuitka/tools/podman/__main__.py +4 -2
  271. nuitka/tools/specialize/CTypeDescriptions.py +158 -9
  272. nuitka/tools/specialize/SpecializeC.py +218 -56
  273. nuitka/tools/testing/Common.py +69 -62
  274. nuitka/tools/testing/compare_with_cpython/__main__.py +3 -1
  275. nuitka/tools/testing/measure_construct_performance/__main__.py +1 -8
  276. nuitka/tools/testing/run_nuitka_tests/__main__.py +77 -11
  277. nuitka/tools/watch/AutoStage.py +1 -0
  278. nuitka/tree/Building.py +10 -37
  279. nuitka/tree/ComplexCallHelperFunctions.py +4 -0
  280. nuitka/tree/ReformulationAssertStatements.py +31 -14
  281. nuitka/tree/ReformulationAssignmentStatements.py +5 -1
  282. nuitka/tree/ReformulationClasses3.py +94 -19
  283. nuitka/tree/ReformulationDictionaryCreation.py +1 -0
  284. nuitka/tree/ReformulationFunctionStatements.py +1 -1
  285. nuitka/tree/ReformulationMatchStatements.py +3 -1
  286. nuitka/tree/ReformulationYieldExpressions.py +23 -5
  287. nuitka/utils/CommandLineOptions.py +27 -3
  288. nuitka/utils/Download.py +2 -2
  289. nuitka/utils/Execution.py +36 -31
  290. nuitka/utils/FileOperations.py +18 -39
  291. nuitka/utils/Hashing.py +5 -1
  292. nuitka/utils/Importing.py +2 -14
  293. nuitka/utils/InlineCopies.py +52 -0
  294. nuitka/utils/InstalledPythons.py +9 -4
  295. nuitka/utils/Json.py +2 -2
  296. nuitka/utils/PackageResources.py +44 -0
  297. nuitka/utils/SharedLibraries.py +24 -0
  298. nuitka/utils/Signing.py +9 -1
  299. nuitka/utils/Utils.py +1 -0
  300. {Nuitka_winsvc-2.4.11.data → Nuitka_winsvc-2.5.6.data}/scripts/nuitka-run.cmd +0 -0
  301. {Nuitka_winsvc-2.4.11.data → Nuitka_winsvc-2.5.6.data}/scripts/nuitka.cmd +0 -0
  302. {Nuitka_winsvc-2.4.11.dist-info → Nuitka_winsvc-2.5.6.dist-info}/LICENSE.txt +0 -0
  303. {Nuitka_winsvc-2.4.11.dist-info → Nuitka_winsvc-2.5.6.dist-info}/entry_points.txt +0 -0
  304. {Nuitka_winsvc-2.4.11.dist-info → Nuitka_winsvc-2.5.6.dist-info}/top_level.txt +0 -0
@@ -9,87 +9,87 @@
9
9
 
10
10
  extern PyObject *CALL_FUNCTION_NO_ARGS(PyThreadState *tstate, PyObject *called);
11
11
  extern PyObject *CALL_FUNCTION_WITH_SINGLE_ARG(PyThreadState *tstate, PyObject *called, PyObject *arg);
12
- extern PyObject *CALL_FUNCTION_WITH_POSARGS1(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
12
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS1(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
13
13
  extern PyObject *CALL_FUNCTION_WITH_ARGS2(PyThreadState *tstate, PyObject *called, PyObject *const *args);
14
- extern PyObject *CALL_FUNCTION_WITH_POSARGS2(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
14
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS2(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
15
15
  extern PyObject *CALL_FUNCTION_WITH_ARGS3(PyThreadState *tstate, PyObject *called, PyObject *const *args);
16
- extern PyObject *CALL_FUNCTION_WITH_POSARGS3(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
16
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS3(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
17
17
  extern PyObject *CALL_FUNCTION_WITH_ARGS4(PyThreadState *tstate, PyObject *called, PyObject *const *args);
18
- extern PyObject *CALL_FUNCTION_WITH_POSARGS4(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
18
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS4(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
19
19
  extern PyObject *CALL_FUNCTION_WITH_ARGS5(PyThreadState *tstate, PyObject *called, PyObject *const *args);
20
- extern PyObject *CALL_FUNCTION_WITH_POSARGS5(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
20
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS5(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
21
21
  extern PyObject *CALL_FUNCTION_WITH_ARGS6(PyThreadState *tstate, PyObject *called, PyObject *const *args);
22
- extern PyObject *CALL_FUNCTION_WITH_POSARGS6(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
22
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS6(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
23
23
  extern PyObject *CALL_FUNCTION_WITH_ARGS7(PyThreadState *tstate, PyObject *called, PyObject *const *args);
24
- extern PyObject *CALL_FUNCTION_WITH_POSARGS7(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
24
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS7(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
25
25
  extern PyObject *CALL_FUNCTION_WITH_ARGS8(PyThreadState *tstate, PyObject *called, PyObject *const *args);
26
- extern PyObject *CALL_FUNCTION_WITH_POSARGS8(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
26
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS8(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
27
27
  extern PyObject *CALL_FUNCTION_WITH_ARGS9(PyThreadState *tstate, PyObject *called, PyObject *const *args);
28
- extern PyObject *CALL_FUNCTION_WITH_POSARGS9(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
28
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS9(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
29
29
  extern PyObject *CALL_FUNCTION_WITH_ARGS10(PyThreadState *tstate, PyObject *called, PyObject *const *args);
30
- extern PyObject *CALL_FUNCTION_WITH_POSARGS10(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
31
- extern PyObject *CALL_FUNCTION_WITH_NO_ARGS_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *kw_values,
32
- PyObject *kw_names);
30
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS10(PyThreadState *tstate, PyObject *called, PyObject *pos_args);
31
+ extern PyObject *CALL_FUNCTION_WITH_NO_ARGS_KW_SPLIT(PyThreadState *tstate, PyObject *called,
32
+ PyObject *const *kw_values, PyObject *kw_names);
33
33
  extern PyObject *CALL_FUNCTION_WITH_ARGS1_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
34
34
  PyObject *kw_names);
35
- extern PyObject *CALL_FUNCTION_WITH_ARGS1_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
36
- PyObject *const *kw_values, PyObject *kw_names);
37
- extern PyObject *CALL_FUNCTION_WITH_POSARGS1_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
38
- PyObject *const *kw_values, PyObject *kw_names);
35
+ extern PyObject *CALL_FUNCTION_WITH_ARGS1_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
36
+ PyObject *const *kw_values, PyObject *kw_names);
37
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS1_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
38
+ PyObject *const *kw_values, PyObject *kw_names);
39
39
  extern PyObject *CALL_FUNCTION_WITH_ARGS2_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
40
40
  PyObject *kw_names);
41
- extern PyObject *CALL_FUNCTION_WITH_ARGS2_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
42
- PyObject *const *kw_values, PyObject *kw_names);
43
- extern PyObject *CALL_FUNCTION_WITH_POSARGS2_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
44
- PyObject *const *kw_values, PyObject *kw_names);
41
+ extern PyObject *CALL_FUNCTION_WITH_ARGS2_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
42
+ PyObject *const *kw_values, PyObject *kw_names);
43
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS2_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
44
+ PyObject *const *kw_values, PyObject *kw_names);
45
45
  extern PyObject *CALL_FUNCTION_WITH_ARGS3_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
46
46
  PyObject *kw_names);
47
- extern PyObject *CALL_FUNCTION_WITH_ARGS3_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
48
- PyObject *const *kw_values, PyObject *kw_names);
49
- extern PyObject *CALL_FUNCTION_WITH_POSARGS3_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
50
- PyObject *const *kw_values, PyObject *kw_names);
47
+ extern PyObject *CALL_FUNCTION_WITH_ARGS3_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
48
+ PyObject *const *kw_values, PyObject *kw_names);
49
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS3_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
50
+ PyObject *const *kw_values, PyObject *kw_names);
51
51
  extern PyObject *CALL_FUNCTION_WITH_ARGS4_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
52
52
  PyObject *kw_names);
53
- extern PyObject *CALL_FUNCTION_WITH_ARGS4_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
54
- PyObject *const *kw_values, PyObject *kw_names);
55
- extern PyObject *CALL_FUNCTION_WITH_POSARGS4_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
56
- PyObject *const *kw_values, PyObject *kw_names);
53
+ extern PyObject *CALL_FUNCTION_WITH_ARGS4_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
54
+ PyObject *const *kw_values, PyObject *kw_names);
55
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS4_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
56
+ PyObject *const *kw_values, PyObject *kw_names);
57
57
  extern PyObject *CALL_FUNCTION_WITH_ARGS5_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
58
58
  PyObject *kw_names);
59
- extern PyObject *CALL_FUNCTION_WITH_ARGS5_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
60
- PyObject *const *kw_values, PyObject *kw_names);
61
- extern PyObject *CALL_FUNCTION_WITH_POSARGS5_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
62
- PyObject *const *kw_values, PyObject *kw_names);
59
+ extern PyObject *CALL_FUNCTION_WITH_ARGS5_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
60
+ PyObject *const *kw_values, PyObject *kw_names);
61
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS5_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
62
+ PyObject *const *kw_values, PyObject *kw_names);
63
63
  extern PyObject *CALL_FUNCTION_WITH_ARGS6_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
64
64
  PyObject *kw_names);
65
- extern PyObject *CALL_FUNCTION_WITH_ARGS6_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
66
- PyObject *const *kw_values, PyObject *kw_names);
67
- extern PyObject *CALL_FUNCTION_WITH_POSARGS6_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
68
- PyObject *const *kw_values, PyObject *kw_names);
65
+ extern PyObject *CALL_FUNCTION_WITH_ARGS6_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
66
+ PyObject *const *kw_values, PyObject *kw_names);
67
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS6_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
68
+ PyObject *const *kw_values, PyObject *kw_names);
69
69
  extern PyObject *CALL_FUNCTION_WITH_ARGS7_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
70
70
  PyObject *kw_names);
71
- extern PyObject *CALL_FUNCTION_WITH_ARGS7_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
72
- PyObject *const *kw_values, PyObject *kw_names);
73
- extern PyObject *CALL_FUNCTION_WITH_POSARGS7_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
74
- PyObject *const *kw_values, PyObject *kw_names);
71
+ extern PyObject *CALL_FUNCTION_WITH_ARGS7_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
72
+ PyObject *const *kw_values, PyObject *kw_names);
73
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS7_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
74
+ PyObject *const *kw_values, PyObject *kw_names);
75
75
  extern PyObject *CALL_FUNCTION_WITH_ARGS8_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
76
76
  PyObject *kw_names);
77
- extern PyObject *CALL_FUNCTION_WITH_ARGS8_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
78
- PyObject *const *kw_values, PyObject *kw_names);
79
- extern PyObject *CALL_FUNCTION_WITH_POSARGS8_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
80
- PyObject *const *kw_values, PyObject *kw_names);
77
+ extern PyObject *CALL_FUNCTION_WITH_ARGS8_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
78
+ PyObject *const *kw_values, PyObject *kw_names);
79
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS8_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
80
+ PyObject *const *kw_values, PyObject *kw_names);
81
81
  extern PyObject *CALL_FUNCTION_WITH_ARGS9_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
82
82
  PyObject *kw_names);
83
- extern PyObject *CALL_FUNCTION_WITH_ARGS9_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
84
- PyObject *const *kw_values, PyObject *kw_names);
85
- extern PyObject *CALL_FUNCTION_WITH_POSARGS9_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
86
- PyObject *const *kw_values, PyObject *kw_names);
83
+ extern PyObject *CALL_FUNCTION_WITH_ARGS9_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
84
+ PyObject *const *kw_values, PyObject *kw_names);
85
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS9_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
86
+ PyObject *const *kw_values, PyObject *kw_names);
87
87
  extern PyObject *CALL_FUNCTION_WITH_ARGS10_VECTORCALL(PyThreadState *tstate, PyObject *called, PyObject *const *args,
88
88
  PyObject *kw_names);
89
- extern PyObject *CALL_FUNCTION_WITH_ARGS10_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
90
- PyObject *const *kw_values, PyObject *kw_names);
91
- extern PyObject *CALL_FUNCTION_WITH_POSARGS10_KWSPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
92
- PyObject *const *kw_values, PyObject *kw_names);
89
+ extern PyObject *CALL_FUNCTION_WITH_ARGS10_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *const *args,
90
+ PyObject *const *kw_values, PyObject *kw_names);
91
+ extern PyObject *CALL_FUNCTION_WITH_POS_ARGS10_KW_SPLIT(PyThreadState *tstate, PyObject *called, PyObject *pos_args,
92
+ PyObject *const *kw_values, PyObject *kw_names);
93
93
  extern PyObject *CALL_METHODDESCR_WITH_SINGLE_ARG(PyThreadState *tstate, PyObject *called, PyObject *arg);
94
94
  extern PyObject *CALL_METHODDESCR_WITH_ARGS2(PyThreadState *tstate, PyObject *called, PyObject *const *args);
95
95
  extern PyObject *CALL_METHODDESCR_WITH_ARGS3(PyThreadState *tstate, PyObject *called, PyObject *const *args);
@@ -0,0 +1,47 @@
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /* WARNING, this code is GENERATED. Modify the template HelperOperationComparisonDual.c.j2 instead! */
4
+
5
+ /* This file is included from another C file, help IDEs to still parse it on its own. */
6
+ #ifdef __IDE_ONLY__
7
+ #include "nuitka/prelude.h"
8
+ #endif
9
+
10
+ /* C helpers for type specialized "==" (EQ) comparisons */
11
+
12
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "NILONG" to Nuitka int/long/C long value.
13
+ */
14
+ extern PyObject *RICH_COMPARE_EQ_OBJECT_NILONG_NILONG(nuitka_ilong *operand1, nuitka_ilong *operand2);
15
+
16
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "NILONG" to Nuitka int/long/C long value.
17
+ */
18
+ extern bool RICH_COMPARE_EQ_CBOOL_NILONG_NILONG(nuitka_ilong *operand1, nuitka_ilong *operand2);
19
+
20
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
21
+ extern PyObject *RICH_COMPARE_EQ_OBJECT_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
22
+
23
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
24
+ extern bool RICH_COMPARE_EQ_CBOOL_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
25
+
26
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
27
+ * Python objects. */
28
+ extern PyObject *RICH_COMPARE_EQ_OBJECT_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
29
+
30
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
31
+ * Python objects. */
32
+ extern bool RICH_COMPARE_EQ_CBOOL_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
33
+
34
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
35
+ // integrates with CPython, but also works on its own.
36
+ //
37
+ // Licensed under the Apache License, Version 2.0 (the "License");
38
+ // you may not use this file except in compliance with the License.
39
+ // You may obtain a copy of the License at
40
+ //
41
+ // http://www.apache.org/licenses/LICENSE-2.0
42
+ //
43
+ // Unless required by applicable law or agreed to in writing, software
44
+ // distributed under the License is distributed on an "AS IS" BASIS,
45
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
46
+ // See the License for the specific language governing permissions and
47
+ // limitations under the License.
@@ -0,0 +1,39 @@
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /* WARNING, this code is GENERATED. Modify the template HelperOperationComparisonDual.c.j2 instead! */
4
+
5
+ /* This file is included from another C file, help IDEs to still parse it on its own. */
6
+ #ifdef __IDE_ONLY__
7
+ #include "nuitka/prelude.h"
8
+ #endif
9
+
10
+ /* C helpers for type specialized ">=" (GE) comparisons */
11
+
12
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
13
+ extern PyObject *RICH_COMPARE_GE_OBJECT_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
14
+
15
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
16
+ extern bool RICH_COMPARE_GE_CBOOL_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
17
+
18
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
19
+ * Python objects. */
20
+ extern PyObject *RICH_COMPARE_GE_OBJECT_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
21
+
22
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
23
+ * Python objects. */
24
+ extern bool RICH_COMPARE_GE_CBOOL_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
25
+
26
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
27
+ // integrates with CPython, but also works on its own.
28
+ //
29
+ // Licensed under the Apache License, Version 2.0 (the "License");
30
+ // you may not use this file except in compliance with the License.
31
+ // You may obtain a copy of the License at
32
+ //
33
+ // http://www.apache.org/licenses/LICENSE-2.0
34
+ //
35
+ // Unless required by applicable law or agreed to in writing, software
36
+ // distributed under the License is distributed on an "AS IS" BASIS,
37
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
38
+ // See the License for the specific language governing permissions and
39
+ // limitations under the License.
@@ -0,0 +1,39 @@
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /* WARNING, this code is GENERATED. Modify the template HelperOperationComparisonDual.c.j2 instead! */
4
+
5
+ /* This file is included from another C file, help IDEs to still parse it on its own. */
6
+ #ifdef __IDE_ONLY__
7
+ #include "nuitka/prelude.h"
8
+ #endif
9
+
10
+ /* C helpers for type specialized ">" (GT) comparisons */
11
+
12
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
13
+ extern PyObject *RICH_COMPARE_GT_OBJECT_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
14
+
15
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
16
+ extern bool RICH_COMPARE_GT_CBOOL_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
17
+
18
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
19
+ * Python objects. */
20
+ extern PyObject *RICH_COMPARE_GT_OBJECT_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
21
+
22
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
23
+ * Python objects. */
24
+ extern bool RICH_COMPARE_GT_CBOOL_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
25
+
26
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
27
+ // integrates with CPython, but also works on its own.
28
+ //
29
+ // Licensed under the Apache License, Version 2.0 (the "License");
30
+ // you may not use this file except in compliance with the License.
31
+ // You may obtain a copy of the License at
32
+ //
33
+ // http://www.apache.org/licenses/LICENSE-2.0
34
+ //
35
+ // Unless required by applicable law or agreed to in writing, software
36
+ // distributed under the License is distributed on an "AS IS" BASIS,
37
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
38
+ // See the License for the specific language governing permissions and
39
+ // limitations under the License.
@@ -0,0 +1,47 @@
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /* WARNING, this code is GENERATED. Modify the template HelperOperationComparisonDual.c.j2 instead! */
4
+
5
+ /* This file is included from another C file, help IDEs to still parse it on its own. */
6
+ #ifdef __IDE_ONLY__
7
+ #include "nuitka/prelude.h"
8
+ #endif
9
+
10
+ /* C helpers for type specialized "<=" (LE) comparisons */
11
+
12
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "NILONG" to Nuitka int/long/C long value.
13
+ */
14
+ extern PyObject *RICH_COMPARE_LE_OBJECT_NILONG_NILONG(nuitka_ilong *operand1, nuitka_ilong *operand2);
15
+
16
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "NILONG" to Nuitka int/long/C long value.
17
+ */
18
+ extern bool RICH_COMPARE_LE_CBOOL_NILONG_NILONG(nuitka_ilong *operand1, nuitka_ilong *operand2);
19
+
20
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
21
+ extern PyObject *RICH_COMPARE_LE_OBJECT_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
22
+
23
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
24
+ extern bool RICH_COMPARE_LE_CBOOL_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
25
+
26
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
27
+ * Python objects. */
28
+ extern PyObject *RICH_COMPARE_LE_OBJECT_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
29
+
30
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
31
+ * Python objects. */
32
+ extern bool RICH_COMPARE_LE_CBOOL_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
33
+
34
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
35
+ // integrates with CPython, but also works on its own.
36
+ //
37
+ // Licensed under the Apache License, Version 2.0 (the "License");
38
+ // you may not use this file except in compliance with the License.
39
+ // You may obtain a copy of the License at
40
+ //
41
+ // http://www.apache.org/licenses/LICENSE-2.0
42
+ //
43
+ // Unless required by applicable law or agreed to in writing, software
44
+ // distributed under the License is distributed on an "AS IS" BASIS,
45
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
46
+ // See the License for the specific language governing permissions and
47
+ // limitations under the License.
@@ -0,0 +1,47 @@
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /* WARNING, this code is GENERATED. Modify the template HelperOperationComparisonDual.c.j2 instead! */
4
+
5
+ /* This file is included from another C file, help IDEs to still parse it on its own. */
6
+ #ifdef __IDE_ONLY__
7
+ #include "nuitka/prelude.h"
8
+ #endif
9
+
10
+ /* C helpers for type specialized "<" (LT) comparisons */
11
+
12
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "NILONG" to Nuitka int/long/C long value.
13
+ */
14
+ extern PyObject *RICH_COMPARE_LT_OBJECT_NILONG_NILONG(nuitka_ilong *operand1, nuitka_ilong *operand2);
15
+
16
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "NILONG" to Nuitka int/long/C long value.
17
+ */
18
+ extern bool RICH_COMPARE_LT_CBOOL_NILONG_NILONG(nuitka_ilong *operand1, nuitka_ilong *operand2);
19
+
20
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
21
+ extern PyObject *RICH_COMPARE_LT_OBJECT_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
22
+
23
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
24
+ extern bool RICH_COMPARE_LT_CBOOL_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
25
+
26
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
27
+ * Python objects. */
28
+ extern PyObject *RICH_COMPARE_LT_OBJECT_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
29
+
30
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
31
+ * Python objects. */
32
+ extern bool RICH_COMPARE_LT_CBOOL_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
33
+
34
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
35
+ // integrates with CPython, but also works on its own.
36
+ //
37
+ // Licensed under the Apache License, Version 2.0 (the "License");
38
+ // you may not use this file except in compliance with the License.
39
+ // You may obtain a copy of the License at
40
+ //
41
+ // http://www.apache.org/licenses/LICENSE-2.0
42
+ //
43
+ // Unless required by applicable law or agreed to in writing, software
44
+ // distributed under the License is distributed on an "AS IS" BASIS,
45
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
46
+ // See the License for the specific language governing permissions and
47
+ // limitations under the License.
@@ -0,0 +1,39 @@
1
+ // Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
2
+
3
+ /* WARNING, this code is GENERATED. Modify the template HelperOperationComparisonDual.c.j2 instead! */
4
+
5
+ /* This file is included from another C file, help IDEs to still parse it on its own. */
6
+ #ifdef __IDE_ONLY__
7
+ #include "nuitka/prelude.h"
8
+ #endif
9
+
10
+ /* C helpers for type specialized "!=" (NE) comparisons */
11
+
12
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
13
+ extern PyObject *RICH_COMPARE_NE_OBJECT_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
14
+
15
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "CLONG" to C platform long value. */
16
+ extern bool RICH_COMPARE_NE_CBOOL_NILONG_CLONG(nuitka_ilong *operand1, long operand2);
17
+
18
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
19
+ * Python objects. */
20
+ extern PyObject *RICH_COMPARE_NE_OBJECT_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
21
+
22
+ /* Code referring to "NILONG" corresponds to Nuitka int/long/C long value and "DIGIT" to C platform digit value for long
23
+ * Python objects. */
24
+ extern bool RICH_COMPARE_NE_CBOOL_NILONG_DIGIT(nuitka_ilong *operand1, long operand2);
25
+
26
+ // Part of "Nuitka", an optimizing Python compiler that is compatible and
27
+ // integrates with CPython, but also works on its own.
28
+ //
29
+ // Licensed under the Apache License, Version 2.0 (the "License");
30
+ // you may not use this file except in compliance with the License.
31
+ // You may obtain a copy of the License at
32
+ //
33
+ // http://www.apache.org/licenses/LICENSE-2.0
34
+ //
35
+ // Unless required by applicable law or agreed to in writing, software
36
+ // distributed under the License is distributed on an "AS IS" BASIS,
37
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
38
+ // See the License for the specific language governing permissions and
39
+ // limitations under the License.
@@ -31,7 +31,7 @@ static PyDictEntry *GET_STRING_DICT_ENTRY(PyDictObject *dict, Nuitka_StringObjec
31
31
 
32
32
  // Only improvement would be to identify how to ensure that the hash is
33
33
  // computed already. Calling hash early on could do that potentially.
34
- if (hash == -1) {
34
+ if (unlikely(hash == -1)) {
35
35
  hash = PyString_Type.tp_hash((PyObject *)key);
36
36
  key->ob_shash = hash;
37
37
  }
@@ -57,7 +57,7 @@ static PyObject *GET_STRING_DICT_VALUE(PyDictObject *dict, Nuitka_StringObject *
57
57
 
58
58
  #else
59
59
 
60
- // Python 3.3 or higher.
60
+ // Python3
61
61
 
62
62
  // Quick dictionary lookup for a string value.
63
63
 
@@ -144,6 +144,8 @@ struct _dictkeysobject {
144
144
  typedef PyObject **Nuitka_DictEntryHandle;
145
145
 
146
146
  #if PYTHON_VERSION >= 0x3b0
147
+ extern Py_ssize_t Nuitka_Py_unicodekeys_lookup_unicode(PyDictKeysObject *dk, PyObject *key, Py_hash_t hash);
148
+
147
149
  extern Py_ssize_t Nuitka_PyDictLookup(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject ***value_addr);
148
150
  extern Py_ssize_t Nuitka_PyDictLookupStr(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject ***value_addr);
149
151
  #endif
@@ -188,18 +190,24 @@ static Nuitka_DictEntryHandle GET_STRING_DICT_ENTRY(PyDictObject *dict, Nuitka_S
188
190
 
189
191
  if (value == NULL) {
190
192
  return NULL;
191
- #ifndef PY_NOGIL
192
193
  } else if (_PyDict_HasSplitTable(dict)) {
193
194
  return &dict->ma_values[ix];
194
- #endif
195
195
  } else {
196
196
  return &DK_ENTRIES(dict->ma_keys)[ix].me_value;
197
197
  }
198
198
 
199
199
  #else
200
- // Will be written by Nuitka_PyDictLookupStr in all cases.
201
200
  PyObject **value;
202
- NUITKA_MAY_BE_UNUSED Py_ssize_t found = Nuitka_PyDictLookupStr(dict, (PyObject *)key, hash, &value);
201
+ NUITKA_MAY_BE_UNUSED Py_ssize_t found;
202
+
203
+ // We cannot use Nuitka_PyDictLookupStr in all cases, some modules misbehave
204
+ // and put non-strings in module dictionaries.
205
+ if (unlikely(dict->ma_keys->dk_kind == DICT_KEYS_GENERAL)) {
206
+ found = Nuitka_PyDictLookup(dict, (PyObject *)key, hash, &value);
207
+ } else {
208
+ found = Nuitka_PyDictLookupStr(dict, (PyObject *)key, hash, &value);
209
+ }
210
+
203
211
  assert(found != DKIX_ERROR);
204
212
 
205
213
  return value;
@@ -268,6 +276,17 @@ extern int DICT_HAS_ITEM(PyThreadState *tstate, PyObject *dict, PyObject *key);
268
276
  // Convert to dictionary, helper for built-in "dict" mainly.
269
277
  extern PyObject *TO_DICT(PyThreadState *tstate, PyObject *seq_obj, PyObject *dict_obj);
270
278
 
279
+ // For 3.6 to 3.10, the dictionary version tag is used for caching purposes, so
280
+ // we need to maintain it. However it's private value so we have to play a game
281
+ // of having our own number space inside of their 64 bit numbers.
282
+ #if PYTHON_VERSION >= 0x360 && PYTHON_VERSION <= 0x3c0
283
+ #define _NUITKA_MAINTAIN_DICT_VERSION_TAG 1
284
+ #endif
285
+
286
+ #if _NUITKA_MAINTAIN_DICT_VERSION_TAG
287
+ extern uint64_t nuitka_dict_version_tag_counter;
288
+ #endif
289
+
271
290
  NUITKA_MAY_BE_UNUSED static void UPDATE_STRING_DICT0(PyDictObject *dict, Nuitka_StringObject *key, PyObject *value) {
272
291
  CHECK_OBJECT(value);
273
292
 
@@ -281,18 +300,25 @@ NUITKA_MAY_BE_UNUSED static void UPDATE_STRING_DICT0(PyDictObject *dict, Nuitka_
281
300
  #endif
282
301
 
283
302
  PyObject *old = GET_DICT_ENTRY_VALUE(entry);
303
+ CHECK_OBJECT_X(old);
284
304
 
285
- // Values are more likely (more often) set than not set, in that case
286
- // speculatively try the quickest access method.
287
- if (likely(old != NULL)) {
288
- Py_INCREF(value);
289
- SET_DICT_ENTRY_VALUE(entry, value);
305
+ if (value != old) {
290
306
 
291
- CHECK_OBJECT(old);
307
+ // Values are more likely (more often) set than not set, in that case
308
+ // speculatively try the quickest access method.
309
+ if (likely(old != NULL)) {
310
+ Py_INCREF(value);
311
+ SET_DICT_ENTRY_VALUE(entry, value);
292
312
 
293
- Py_DECREF(old);
294
- } else {
295
- DICT_SET_ITEM((PyObject *)dict, (PyObject *)key, value);
313
+ #if _NUITKA_MAINTAIN_DICT_VERSION_TAG
314
+ dict->ma_version_tag = nuitka_dict_version_tag_counter++;
315
+ #endif
316
+ CHECK_OBJECT(old);
317
+
318
+ Py_DECREF(old);
319
+ } else {
320
+ DICT_SET_ITEM((PyObject *)dict, (PyObject *)key, value);
321
+ }
296
322
  }
297
323
  }
298
324
 
@@ -315,14 +341,23 @@ NUITKA_MAY_BE_UNUSED static void UPDATE_STRING_DICT_INPLACE(PyDictObject *dict,
315
341
 
316
342
  PyObject *old = GET_DICT_ENTRY_VALUE(entry);
317
343
 
318
- // Values are more likely (more often) set than not set, in that case
319
- // speculatively try the quickest access method.
320
- if (likely(old != NULL)) {
321
- SET_DICT_ENTRY_VALUE(entry, value);
344
+ if (old != value) {
345
+ // Values are more likely (more often) set than not set, in that case
346
+ // speculatively try the quickest access method.
347
+ if (likely(old != NULL)) {
348
+ SET_DICT_ENTRY_VALUE(entry, value);
349
+
350
+ #if _NUITKA_MAINTAIN_DICT_VERSION_TAG
351
+ dict->ma_version_tag = nuitka_dict_version_tag_counter++;
352
+ #endif
353
+ } else {
354
+ DICT_SET_ITEM((PyObject *)dict, (PyObject *)key, value);
355
+ Py_DECREF(value);
356
+
357
+ CHECK_OBJECT(value);
358
+ }
322
359
  } else {
323
- DICT_SET_ITEM((PyObject *)dict, (PyObject *)key, value);
324
360
  Py_DECREF(value);
325
-
326
361
  CHECK_OBJECT(value);
327
362
  }
328
363
  }
@@ -345,16 +380,25 @@ NUITKA_MAY_BE_UNUSED static void UPDATE_STRING_DICT1(PyDictObject *dict, Nuitka_
345
380
  #endif
346
381
 
347
382
  PyObject *old = GET_DICT_ENTRY_VALUE(entry);
383
+ CHECK_OBJECT_X(old);
348
384
 
349
- // Values are more likely (more often) set than not set, in that case
350
- // speculatively try the quickest access method.
351
- if (likely(old != NULL)) {
352
- SET_DICT_ENTRY_VALUE(entry, value);
385
+ if (old != value) {
386
+ // Values are more likely (more often) set than not set, in that case
387
+ // speculatively try the quickest access method.
388
+ if (likely(old != NULL)) {
389
+ SET_DICT_ENTRY_VALUE(entry, value);
353
390
 
354
- Py_DECREF(old);
355
- } else {
356
- DICT_SET_ITEM((PyObject *)dict, (PyObject *)key, value);
391
+ #if _NUITKA_MAINTAIN_DICT_VERSION_TAG
392
+ dict->ma_version_tag = nuitka_dict_version_tag_counter++;
393
+ #endif
394
+ Py_DECREF(old);
395
+ } else {
396
+ DICT_SET_ITEM((PyObject *)dict, (PyObject *)key, value);
357
397
 
398
+ Py_DECREF(value);
399
+ CHECK_OBJECT(value);
400
+ }
401
+ } else {
358
402
  Py_DECREF(value);
359
403
  CHECK_OBJECT(value);
360
404
  }
@@ -370,13 +414,13 @@ extern PyObject *DICT_ITEMS(PyObject *dict);
370
414
  #endif
371
415
 
372
416
  // Python3 dictionary keys, Python2 iterkeys returns dictionary keys iterator
373
- extern PyObject *DICT_ITERKEYS(PyObject *dict);
417
+ extern PyObject *DICT_ITERKEYS(PyThreadState *tstate, PyObject *dict);
374
418
 
375
419
  // Python3 dictionary values, Python2 itervalues returns dictionary values iterator
376
- extern PyObject *DICT_ITERVALUES(PyObject *dict);
420
+ extern PyObject *DICT_ITERVALUES(PyThreadState *tstate, PyObject *dict);
377
421
 
378
422
  // Python3 dictionary items, Python2 iteritems returns dictionary items iterator
379
- extern PyObject *DICT_ITERITEMS(PyObject *dict);
423
+ extern PyObject *DICT_ITERITEMS(PyThreadState *tstate, PyObject *dict);
380
424
 
381
425
  // Python dictionary keys view
382
426
  extern PyObject *DICT_VIEWKEYS(PyObject *dict);