Nuitka-winsvc 2.2.2__cp311-cp311-win_amd64.whl → 2.3__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.
Files changed (199) hide show
  1. {Nuitka_winsvc-2.2.2.dist-info → Nuitka_winsvc-2.3.dist-info}/METADATA +1 -1
  2. {Nuitka_winsvc-2.2.2.dist-info → Nuitka_winsvc-2.3.dist-info}/RECORD +199 -198
  3. nuitka/Bytecodes.py +4 -2
  4. nuitka/HardImportRegistry.py +1 -0
  5. nuitka/MainControl.py +16 -10
  6. nuitka/ModuleRegistry.py +15 -0
  7. nuitka/OptionParsing.py +30 -8
  8. nuitka/Options.py +104 -44
  9. nuitka/PostProcessing.py +9 -8
  10. nuitka/PythonVersions.py +2 -1
  11. nuitka/Serialization.py +47 -30
  12. nuitka/Version.py +1 -1
  13. nuitka/build/Backend.scons +46 -19
  14. nuitka/build/CCompilerVersion.scons +3 -3
  15. nuitka/build/Onefile.scons +4 -4
  16. nuitka/build/SconsCaching.py +3 -2
  17. nuitka/build/SconsCompilerSettings.py +11 -5
  18. nuitka/build/SconsInterface.py +22 -6
  19. nuitka/build/SconsUtils.py +9 -1
  20. nuitka/build/include/nuitka/allocator.h +58 -2
  21. nuitka/build/include/nuitka/compiled_frame.h +48 -13
  22. nuitka/build/include/nuitka/compiled_function.h +4 -0
  23. nuitka/build/include/nuitka/constants.h +6 -0
  24. nuitka/build/include/nuitka/exception_groups.h +6 -6
  25. nuitka/build/include/nuitka/exceptions.h +3 -3
  26. nuitka/build/include/nuitka/freelists.h +11 -0
  27. nuitka/build/include/nuitka/helper/dictionaries.h +5 -4
  28. nuitka/build/include/nuitka/helper/lists.h +5 -5
  29. nuitka/build/include/nuitka/helper/lists_generated.h +12 -12
  30. nuitka/build/include/nuitka/helper/sequences.h +6 -0
  31. nuitka/build/include/nuitka/helper/slices.h +14 -8
  32. nuitka/build/include/nuitka/helper/subscripts.h +1 -184
  33. nuitka/build/include/nuitka/helper/tuples.h +42 -33
  34. nuitka/build/include/nuitka/importing.h +5 -0
  35. nuitka/build/include/nuitka/prelude.h +35 -2
  36. nuitka/build/include/nuitka/safe_string_ops.h +1 -0
  37. nuitka/build/include/nuitka/threading.h +13 -10
  38. nuitka/build/static_src/CompiledAsyncgenType.c +19 -8
  39. nuitka/build/static_src/CompiledCellType.c +1 -1
  40. nuitka/build/static_src/CompiledCodeHelpers.c +18 -16
  41. nuitka/build/static_src/CompiledCoroutineType.c +23 -19
  42. nuitka/build/static_src/CompiledFrameType.c +46 -34
  43. nuitka/build/static_src/CompiledFunctionType.c +55 -34
  44. nuitka/build/static_src/CompiledGeneratorType.c +21 -19
  45. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +127 -130
  46. nuitka/build/static_src/CompiledMethodType.c +15 -17
  47. nuitka/build/static_src/HelpersAllocator.c +71 -0
  48. nuitka/build/static_src/HelpersAttributes.c +1 -1
  49. nuitka/build/static_src/HelpersBuiltin.c +5 -5
  50. nuitka/build/static_src/HelpersBytes.c +2 -2
  51. nuitka/build/static_src/HelpersCalling.c +3 -0
  52. nuitka/build/static_src/HelpersCallingGenerated.c +131 -131
  53. nuitka/build/static_src/HelpersComparisonEq.c +329 -329
  54. nuitka/build/static_src/HelpersComparisonEqUtils.c +3 -1
  55. nuitka/build/static_src/HelpersComparisonGe.c +322 -322
  56. nuitka/build/static_src/HelpersComparisonGt.c +321 -321
  57. nuitka/build/static_src/HelpersComparisonLe.c +322 -322
  58. nuitka/build/static_src/HelpersComparisonLt.c +321 -321
  59. nuitka/build/static_src/HelpersComparisonNe.c +329 -329
  60. nuitka/build/static_src/HelpersConsole.c +96 -0
  61. nuitka/build/static_src/HelpersConstantsBlob.c +10 -6
  62. nuitka/build/static_src/HelpersDeepcopy.c +10 -8
  63. nuitka/build/static_src/HelpersDictionaries.c +17 -11
  64. nuitka/build/static_src/HelpersDictionariesGenerated.c +65 -29
  65. nuitka/build/static_src/HelpersExceptions.c +107 -9
  66. nuitka/build/static_src/HelpersFilesystemPaths.c +64 -4
  67. nuitka/build/static_src/HelpersFloats.c +20 -14
  68. nuitka/build/static_src/HelpersImport.c +1 -1
  69. nuitka/build/static_src/HelpersJitSources.c +1 -1
  70. nuitka/build/static_src/HelpersLists.c +29 -19
  71. nuitka/build/static_src/HelpersListsGenerated.c +24 -24
  72. nuitka/build/static_src/HelpersMatching.c +32 -5
  73. nuitka/build/static_src/HelpersOperationBinaryAdd.c +90 -63
  74. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +4 -4
  75. nuitka/build/static_src/HelpersOperationBinaryBitand.c +33 -33
  76. nuitka/build/static_src/HelpersOperationBinaryBitor.c +33 -33
  77. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +33 -33
  78. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +24 -24
  79. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +24 -24
  80. nuitka/build/static_src/HelpersOperationBinaryLshift.c +30 -30
  81. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +7 -7
  82. nuitka/build/static_src/HelpersOperationBinaryMod.c +90 -90
  83. nuitka/build/static_src/HelpersOperationBinaryMult.c +64 -58
  84. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +24 -24
  85. nuitka/build/static_src/HelpersOperationBinaryPow.c +27 -27
  86. nuitka/build/static_src/HelpersOperationBinaryRshift.c +30 -30
  87. nuitka/build/static_src/HelpersOperationBinarySub.c +24 -24
  88. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +24 -24
  89. nuitka/build/static_src/HelpersOperationInplaceAdd.c +67 -49
  90. nuitka/build/static_src/HelpersOperationInplaceBitand.c +25 -25
  91. nuitka/build/static_src/HelpersOperationInplaceBitor.c +25 -25
  92. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +25 -25
  93. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +28 -28
  94. nuitka/build/static_src/HelpersOperationInplaceLshift.c +18 -18
  95. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +10 -10
  96. nuitka/build/static_src/HelpersOperationInplaceMod.c +70 -70
  97. nuitka/build/static_src/HelpersOperationInplaceMult.c +33 -33
  98. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +28 -28
  99. nuitka/build/static_src/HelpersOperationInplacePow.c +28 -28
  100. nuitka/build/static_src/HelpersOperationInplaceRshift.c +18 -18
  101. nuitka/build/static_src/HelpersOperationInplaceSub.c +28 -28
  102. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +28 -28
  103. nuitka/build/static_src/HelpersRaising.c +10 -3
  104. nuitka/build/static_src/HelpersSafeStrings.c +14 -4
  105. nuitka/build/static_src/HelpersSlices.c +12 -5
  106. nuitka/build/static_src/HelpersStrings.c +1 -1
  107. nuitka/build/static_src/HelpersTuples.c +20 -15
  108. nuitka/build/static_src/InspectPatcher.c +74 -6
  109. nuitka/build/static_src/MainProgram.c +90 -25
  110. nuitka/build/static_src/MetaPathBasedLoader.c +81 -45
  111. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +2 -2
  112. nuitka/build/static_src/OnefileBootstrap.c +17 -20
  113. nuitka/code_generation/CodeGeneration.py +5 -2
  114. nuitka/code_generation/ConstantCodes.py +2 -2
  115. nuitka/code_generation/DictCodes.py +2 -2
  116. nuitka/code_generation/GlobalConstants.py +5 -0
  117. nuitka/code_generation/GlobalsLocalsCodes.py +2 -2
  118. nuitka/code_generation/ListCodes.py +2 -2
  119. nuitka/code_generation/LocalsDictCodes.py +1 -1
  120. nuitka/code_generation/ModuleCodes.py +19 -0
  121. nuitka/code_generation/PackageResourceCodes.py +14 -0
  122. nuitka/code_generation/SliceCodes.py +3 -3
  123. nuitka/code_generation/SubscriptCodes.py +5 -13
  124. nuitka/code_generation/TupleCodes.py +1 -1
  125. nuitka/code_generation/c_types/CTypePyObjectPointers.py +7 -7
  126. nuitka/code_generation/templates/CodeTemplatesConstants.py +7 -5
  127. nuitka/code_generation/templates/CodeTemplatesLoader.py +2 -0
  128. nuitka/code_generation/templates/CodeTemplatesModules.py +78 -54
  129. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +1 -1
  130. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +8 -8
  131. nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +5 -5
  132. nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +2 -2
  133. nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +2 -2
  134. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +57 -21
  135. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +1 -1
  136. nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +5 -5
  137. nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +18 -18
  138. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +11 -11
  139. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +3 -3
  140. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +3 -3
  141. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +7 -7
  142. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +3 -3
  143. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +11 -11
  144. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +7 -7
  145. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +10 -10
  146. nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +1 -1
  147. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +3 -3
  148. nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +4 -1
  149. nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +4 -1
  150. nuitka/finalizations/FinalizeMarkups.py +0 -18
  151. nuitka/freezer/DependsExe.py +9 -4
  152. nuitka/freezer/DllDependenciesMacOS.py +1 -1
  153. nuitka/freezer/DllDependenciesWin32.py +1 -1
  154. nuitka/freezer/ImportDetection.py +1 -0
  155. nuitka/freezer/IncludedDataFiles.py +13 -4
  156. nuitka/freezer/Onefile.py +0 -1
  157. nuitka/freezer/Standalone.py +3 -1
  158. nuitka/importing/ImportCache.py +3 -2
  159. nuitka/importing/Importing.py +16 -3
  160. nuitka/importing/StandardLibrary.py +4 -0
  161. nuitka/nodes/ChildrenHavingMixins.py +2 -0
  162. nuitka/nodes/ExpressionBasesGenerated.py +4 -0
  163. nuitka/nodes/HardImportNodesGenerated.py +83 -0
  164. nuitka/nodes/ModuleNodes.py +10 -2
  165. nuitka/nodes/OsSysNodes.py +16 -0
  166. nuitka/nodes/SubscriptNodes.py +3 -3
  167. nuitka/plugins/PluginBase.py +2 -0
  168. nuitka/plugins/standard/DataFilesPlugin.py +22 -1
  169. nuitka/plugins/standard/DillPlugin/DillPlugin.c +3 -3
  170. nuitka/plugins/standard/OptionsNannyPlugin.py +9 -41
  171. nuitka/plugins/standard/PkgResourcesPlugin.py +8 -2
  172. nuitka/plugins/standard/PySidePyQtPlugin.py +4 -0
  173. nuitka/plugins/standard/standard.nuitka-package.config.yml +29 -13
  174. nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +2 -2
  175. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +2 -2
  176. nuitka/specs/HardImportSpecs.py +3 -0
  177. nuitka/specs/ParameterSpecs.py +26 -15
  178. nuitka/tools/general/find_module/FindModuleCode.py +3 -2
  179. nuitka/tools/specialize/CTypeDescriptions.py +11 -9
  180. nuitka/tools/testing/Common.py +12 -5
  181. nuitka/tools/testing/SearchModes.py +5 -1
  182. nuitka/tools/watch/GitHub.py +1 -7
  183. nuitka/tree/Building.py +9 -6
  184. nuitka/tree/ReformulationMatchStatements.py +39 -3
  185. nuitka/tree/TreeHelpers.py +8 -0
  186. nuitka/utils/CStrings.py +7 -0
  187. nuitka/utils/Execution.py +10 -1
  188. nuitka/utils/FileOperations.py +21 -13
  189. nuitka/utils/Images.py +1 -1
  190. nuitka/utils/Importing.py +24 -0
  191. nuitka/utils/ReExecute.py +7 -3
  192. nuitka/utils/SharedLibraries.py +17 -0
  193. nuitka/utils/Yaml.py +9 -1
  194. {Nuitka_winsvc-2.2.2.data → Nuitka_winsvc-2.3.data}/scripts/nuitka-run.bat +0 -0
  195. {Nuitka_winsvc-2.2.2.data → Nuitka_winsvc-2.3.data}/scripts/nuitka.bat +0 -0
  196. {Nuitka_winsvc-2.2.2.dist-info → Nuitka_winsvc-2.3.dist-info}/LICENSE.txt +0 -0
  197. {Nuitka_winsvc-2.2.2.dist-info → Nuitka_winsvc-2.3.dist-info}/WHEEL +0 -0
  198. {Nuitka_winsvc-2.2.2.dist-info → Nuitka_winsvc-2.3.dist-info}/entry_points.txt +0 -0
  199. {Nuitka_winsvc-2.2.2.dist-info → Nuitka_winsvc-2.3.dist-info}/top_level.txt +0 -0
@@ -116,7 +116,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
116
116
  goto exit_inplace_result_object;
117
117
  }
118
118
 
119
- Py_DECREF(x);
119
+ Py_DECREF_IMMORTAL(x);
120
120
  }
121
121
 
122
122
  {
@@ -142,7 +142,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
142
142
  goto exit_inplace_result_object;
143
143
  }
144
144
 
145
- Py_DECREF(x);
145
+ Py_DECREF_IMMORTAL(x);
146
146
  }
147
147
 
148
148
  if (slot2 != NULL) {
@@ -153,7 +153,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_INT(PyObject **op
153
153
  goto exit_inplace_result_object;
154
154
  }
155
155
 
156
- Py_DECREF(x);
156
+ Py_DECREF_IMMORTAL(x);
157
157
  }
158
158
 
159
159
  #if PYTHON_VERSION < 0x300
@@ -392,7 +392,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
392
392
  goto exit_inplace_result_object;
393
393
  }
394
394
 
395
- Py_DECREF(x);
395
+ Py_DECREF_IMMORTAL(x);
396
396
  slot2 = NULL;
397
397
  }
398
398
  }
@@ -404,7 +404,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
404
404
  goto exit_inplace_result_object;
405
405
  }
406
406
 
407
- Py_DECREF(x);
407
+ Py_DECREF_IMMORTAL(x);
408
408
  }
409
409
 
410
410
  if (slot2 != NULL) {
@@ -415,7 +415,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_INT_OBJECT(PyObject **op
415
415
  goto exit_inplace_result_object;
416
416
  }
417
417
 
418
- Py_DECREF(x);
418
+ Py_DECREF_IMMORTAL(x);
419
419
  }
420
420
 
421
421
  #if PYTHON_VERSION < 0x300
@@ -751,7 +751,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
751
751
  goto exit_inplace_result_object;
752
752
  }
753
753
 
754
- Py_DECREF(x);
754
+ Py_DECREF_IMMORTAL(x);
755
755
  }
756
756
 
757
757
  {
@@ -777,7 +777,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
777
777
  goto exit_inplace_result_object;
778
778
  }
779
779
 
780
- Py_DECREF(x);
780
+ Py_DECREF_IMMORTAL(x);
781
781
  }
782
782
 
783
783
  if (slot2 != NULL) {
@@ -788,7 +788,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LONG(PyObject **o
788
788
  goto exit_inplace_result_object;
789
789
  }
790
790
 
791
- Py_DECREF(x);
791
+ Py_DECREF_IMMORTAL(x);
792
792
  }
793
793
 
794
794
  #if PYTHON_VERSION < 0x300
@@ -1074,7 +1074,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
1074
1074
  goto exit_inplace_result_object;
1075
1075
  }
1076
1076
 
1077
- Py_DECREF(x);
1077
+ Py_DECREF_IMMORTAL(x);
1078
1078
  slot2 = NULL;
1079
1079
  }
1080
1080
  }
@@ -1086,7 +1086,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
1086
1086
  goto exit_inplace_result_object;
1087
1087
  }
1088
1088
 
1089
- Py_DECREF(x);
1089
+ Py_DECREF_IMMORTAL(x);
1090
1090
  }
1091
1091
 
1092
1092
  if (slot2 != NULL) {
@@ -1097,7 +1097,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LONG_OBJECT(PyObject **o
1097
1097
  goto exit_inplace_result_object;
1098
1098
  }
1099
1099
 
1100
- Py_DECREF(x);
1100
+ Py_DECREF_IMMORTAL(x);
1101
1101
  }
1102
1102
 
1103
1103
  #if PYTHON_VERSION < 0x300
@@ -1411,7 +1411,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
1411
1411
  goto exit_inplace_result_object;
1412
1412
  }
1413
1413
 
1414
- Py_DECREF(x);
1414
+ Py_DECREF_IMMORTAL(x);
1415
1415
  }
1416
1416
 
1417
1417
  {
@@ -1437,7 +1437,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
1437
1437
  goto exit_inplace_result_object;
1438
1438
  }
1439
1439
 
1440
- Py_DECREF(x);
1440
+ Py_DECREF_IMMORTAL(x);
1441
1441
  }
1442
1442
 
1443
1443
  if (slot2 != NULL) {
@@ -1448,7 +1448,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_FLOAT(PyObject **
1448
1448
  goto exit_inplace_result_object;
1449
1449
  }
1450
1450
 
1451
- Py_DECREF(x);
1451
+ Py_DECREF_IMMORTAL(x);
1452
1452
  }
1453
1453
 
1454
1454
  #if PYTHON_VERSION < 0x300
@@ -1660,7 +1660,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
1660
1660
  goto exit_inplace_result_object;
1661
1661
  }
1662
1662
 
1663
- Py_DECREF(x);
1663
+ Py_DECREF_IMMORTAL(x);
1664
1664
  slot2 = NULL;
1665
1665
  }
1666
1666
  }
@@ -1672,7 +1672,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
1672
1672
  goto exit_inplace_result_object;
1673
1673
  }
1674
1674
 
1675
- Py_DECREF(x);
1675
+ Py_DECREF_IMMORTAL(x);
1676
1676
  }
1677
1677
 
1678
1678
  if (slot2 != NULL) {
@@ -1683,7 +1683,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_FLOAT_OBJECT(PyObject **
1683
1683
  goto exit_inplace_result_object;
1684
1684
  }
1685
1685
 
1686
- Py_DECREF(x);
1686
+ Py_DECREF_IMMORTAL(x);
1687
1687
  }
1688
1688
 
1689
1689
  #if PYTHON_VERSION < 0x300
@@ -1878,7 +1878,7 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_LONG(PyObject **operand1, PyObje
1878
1878
  goto exit_inplace_result_object;
1879
1879
  }
1880
1880
 
1881
- Py_DECREF(x);
1881
+ Py_DECREF_IMMORTAL(x);
1882
1882
  }
1883
1883
 
1884
1884
  // Statically recognized that coercion is not possible with these types
@@ -1957,7 +1957,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_FLOAT(PyObject **operand1, PyObje
1957
1957
  goto exit_inplace_result_object;
1958
1958
  }
1959
1959
 
1960
- Py_DECREF(x);
1960
+ Py_DECREF_IMMORTAL(x);
1961
1961
  }
1962
1962
 
1963
1963
  // Statically recognized that coercion is not possible with these types
@@ -2031,7 +2031,7 @@ static inline bool _INPLACE_OPERATION_ADD_FLOAT_INT(PyObject **operand1, PyObjec
2031
2031
  goto exit_inplace_result_object;
2032
2032
  }
2033
2033
 
2034
- Py_DECREF(x);
2034
+ Py_DECREF_IMMORTAL(x);
2035
2035
  }
2036
2036
 
2037
2037
  // Statically recognized that coercion is not possible with these types
@@ -2108,7 +2108,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_FLOAT(PyObject **operand1, PyObjec
2108
2108
  goto exit_inplace_result_object;
2109
2109
  }
2110
2110
 
2111
- Py_DECREF(x);
2111
+ Py_DECREF_IMMORTAL(x);
2112
2112
  }
2113
2113
 
2114
2114
  // Statically recognized that coercion is not possible with these types
@@ -2179,7 +2179,7 @@ static inline bool _INPLACE_OPERATION_ADD_LONG_INT(PyObject **operand1, PyObject
2179
2179
  goto exit_inplace_result_object;
2180
2180
  }
2181
2181
 
2182
- Py_DECREF(x);
2182
+ Py_DECREF_IMMORTAL(x);
2183
2183
  }
2184
2184
 
2185
2185
  // Statically recognized that coercion is not possible with these types
@@ -2256,7 +2256,7 @@ static inline bool _INPLACE_OPERATION_ADD_INT_LONG(PyObject **operand1, PyObject
2256
2256
  goto exit_inplace_result_object;
2257
2257
  }
2258
2258
 
2259
- Py_DECREF(x);
2259
+ Py_DECREF_IMMORTAL(x);
2260
2260
  }
2261
2261
 
2262
2262
  // Statically recognized that coercion is not possible with these types
@@ -2630,7 +2630,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **op
2630
2630
  goto exit_inplace_result_object;
2631
2631
  }
2632
2632
 
2633
- Py_DECREF(x);
2633
+ Py_DECREF_IMMORTAL(x);
2634
2634
  }
2635
2635
 
2636
2636
  {
@@ -2645,7 +2645,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_STR(PyObject **op
2645
2645
  goto exit_inplace_result_object;
2646
2646
  }
2647
2647
 
2648
- Py_DECREF(x);
2648
+ Py_DECREF_IMMORTAL(x);
2649
2649
  }
2650
2650
 
2651
2651
  #if PYTHON_VERSION < 0x300
@@ -2814,7 +2814,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_STR_OBJECT(PyObject **op
2814
2814
  goto exit_inplace_result_object;
2815
2815
  }
2816
2816
 
2817
- Py_DECREF(x);
2817
+ Py_DECREF_IMMORTAL(x);
2818
2818
  }
2819
2819
 
2820
2820
  #if PYTHON_VERSION < 0x300
@@ -3022,7 +3022,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject
3022
3022
  goto exit_inplace_result_object;
3023
3023
  }
3024
3024
 
3025
- Py_DECREF(x);
3025
+ Py_DECREF_IMMORTAL(x);
3026
3026
  }
3027
3027
 
3028
3028
  {
@@ -3037,7 +3037,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_UNICODE(PyObject
3037
3037
  goto exit_inplace_result_object;
3038
3038
  }
3039
3039
 
3040
- Py_DECREF(x);
3040
+ Py_DECREF_IMMORTAL(x);
3041
3041
  }
3042
3042
 
3043
3043
  #if PYTHON_VERSION < 0x300
@@ -3214,7 +3214,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_UNICODE_OBJECT(PyObject
3214
3214
  goto exit_inplace_result_object;
3215
3215
  }
3216
3216
 
3217
- Py_DECREF(x);
3217
+ Py_DECREF_IMMORTAL(x);
3218
3218
  }
3219
3219
 
3220
3220
  #if PYTHON_VERSION < 0x300
@@ -3424,7 +3424,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **
3424
3424
  goto exit_inplace_result_object;
3425
3425
  }
3426
3426
 
3427
- Py_DECREF(x);
3427
+ Py_DECREF_IMMORTAL(x);
3428
3428
  }
3429
3429
 
3430
3430
  {
@@ -3439,7 +3439,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_BYTES(PyObject **
3439
3439
  goto exit_inplace_result_object;
3440
3440
  }
3441
3441
 
3442
- Py_DECREF(x);
3442
+ Py_DECREF_IMMORTAL(x);
3443
3443
  }
3444
3444
 
3445
3445
  #if PYTHON_VERSION < 0x300
@@ -3609,7 +3609,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_BYTES_OBJECT(PyObject **
3609
3609
  goto exit_inplace_result_object;
3610
3610
  }
3611
3611
 
3612
- Py_DECREF(x);
3612
+ Py_DECREF_IMMORTAL(x);
3613
3613
  }
3614
3614
 
3615
3615
  #if PYTHON_VERSION < 0x300
@@ -3762,7 +3762,10 @@ static inline bool _INPLACE_OPERATION_ADD_TUPLE_TUPLE(PyObject **operand1, PyObj
3762
3762
  // Not every code path will make use of all possible results.
3763
3763
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
3764
3764
 
3765
- PyObject *x = TUPLE_CONCAT(*operand1, operand2);
3765
+ // TODO: Have this more globally passed in
3766
+ PyThreadState *tstate = PyThreadState_GET();
3767
+
3768
+ PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
3766
3769
 
3767
3770
  assert(x != Py_NotImplemented);
3768
3771
  obj_result = x;
@@ -3814,7 +3817,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **
3814
3817
  goto exit_inplace_result_object;
3815
3818
  }
3816
3819
 
3817
- Py_DECREF(x);
3820
+ Py_DECREF_IMMORTAL(x);
3818
3821
  }
3819
3822
 
3820
3823
  {
@@ -3829,7 +3832,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **
3829
3832
  goto exit_inplace_result_object;
3830
3833
  }
3831
3834
 
3832
- Py_DECREF(x);
3835
+ Py_DECREF_IMMORTAL(x);
3833
3836
  }
3834
3837
 
3835
3838
  #if PYTHON_VERSION < 0x300
@@ -3923,7 +3926,10 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_TUPLE(PyObject **operand1, PyOb
3923
3926
  // Not every code path will make use of all possible results.
3924
3927
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
3925
3928
 
3926
- PyObject *x = TUPLE_CONCAT(*operand1, operand2);
3929
+ // TODO: Have this more globally passed in
3930
+ PyThreadState *tstate = PyThreadState_GET();
3931
+
3932
+ PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
3927
3933
 
3928
3934
  assert(x != Py_NotImplemented);
3929
3935
  obj_result = x;
@@ -3986,7 +3992,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_TUPLE_OBJECT(PyObject **
3986
3992
  goto exit_inplace_result_object;
3987
3993
  }
3988
3994
 
3989
- Py_DECREF(x);
3995
+ Py_DECREF_IMMORTAL(x);
3990
3996
  }
3991
3997
 
3992
3998
  #if PYTHON_VERSION < 0x300
@@ -4085,7 +4091,10 @@ static inline bool _INPLACE_OPERATION_ADD_TUPLE_OBJECT(PyObject **operand1, PyOb
4085
4091
  // Not every code path will make use of all possible results.
4086
4092
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4087
4093
 
4088
- PyObject *x = TUPLE_CONCAT(*operand1, operand2);
4094
+ // TODO: Have this more globally passed in
4095
+ PyThreadState *tstate = PyThreadState_GET();
4096
+
4097
+ PyObject *x = TUPLE_CONCAT(tstate, *operand1, operand2);
4089
4098
 
4090
4099
  assert(x != Py_NotImplemented);
4091
4100
  obj_result = x;
@@ -4144,7 +4153,10 @@ static inline bool _INPLACE_OPERATION_ADD_LIST_LIST(PyObject **operand1, PyObjec
4144
4153
  // Not every code path will make use of all possible results.
4145
4154
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4146
4155
 
4147
- PyObject *x = LIST_CONCAT(*operand1, operand2);
4156
+ // TODO: Have this more globally passed in
4157
+ PyThreadState *tstate = PyThreadState_GET();
4158
+
4159
+ PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
4148
4160
  assert(x != Py_NotImplemented);
4149
4161
 
4150
4162
  obj_result = x;
@@ -4197,7 +4209,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **o
4197
4209
  goto exit_inplace_result_object;
4198
4210
  }
4199
4211
 
4200
- Py_DECREF(x);
4212
+ Py_DECREF_IMMORTAL(x);
4201
4213
  }
4202
4214
 
4203
4215
  {
@@ -4212,7 +4224,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **o
4212
4224
  goto exit_inplace_result_object;
4213
4225
  }
4214
4226
 
4215
- Py_DECREF(x);
4227
+ Py_DECREF_IMMORTAL(x);
4216
4228
  }
4217
4229
 
4218
4230
  #if PYTHON_VERSION < 0x300
@@ -4310,7 +4322,10 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_LIST(PyObject **operand1, PyObj
4310
4322
  // Not every code path will make use of all possible results.
4311
4323
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4312
4324
 
4313
- PyObject *x = LIST_CONCAT(*operand1, operand2);
4325
+ // TODO: Have this more globally passed in
4326
+ PyThreadState *tstate = PyThreadState_GET();
4327
+
4328
+ PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
4314
4329
  assert(x != Py_NotImplemented);
4315
4330
 
4316
4331
  obj_result = x;
@@ -4374,7 +4389,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_ADD_LIST_OBJECT(PyObject **o
4374
4389
  goto exit_inplace_result_object;
4375
4390
  }
4376
4391
 
4377
- Py_DECREF(x);
4392
+ Py_DECREF_IMMORTAL(x);
4378
4393
  }
4379
4394
 
4380
4395
  #if PYTHON_VERSION < 0x300
@@ -4482,7 +4497,10 @@ static inline bool _INPLACE_OPERATION_ADD_LIST_OBJECT(PyObject **operand1, PyObj
4482
4497
  // Not every code path will make use of all possible results.
4483
4498
  NUITKA_MAY_BE_UNUSED PyObject *obj_result;
4484
4499
 
4485
- PyObject *x = LIST_CONCAT(*operand1, operand2);
4500
+ // TODO: Have this more globally passed in
4501
+ PyThreadState *tstate = PyThreadState_GET();
4502
+
4503
+ PyObject *x = LIST_CONCAT(tstate, *operand1, operand2);
4486
4504
  assert(x != Py_NotImplemented);
4487
4505
 
4488
4506
  obj_result = x;
@@ -4783,7 +4801,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4783
4801
  goto exit_inplace_result_object;
4784
4802
  }
4785
4803
 
4786
- Py_DECREF(x);
4804
+ Py_DECREF_IMMORTAL(x);
4787
4805
  }
4788
4806
 
4789
4807
  {
@@ -4811,7 +4829,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4811
4829
  goto exit_inplace_result_object;
4812
4830
  }
4813
4831
 
4814
- Py_DECREF(x);
4832
+ Py_DECREF_IMMORTAL(x);
4815
4833
  slot2 = NULL;
4816
4834
  }
4817
4835
  }
@@ -4823,7 +4841,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4823
4841
  goto exit_inplace_result_object;
4824
4842
  }
4825
4843
 
4826
- Py_DECREF(x);
4844
+ Py_DECREF_IMMORTAL(x);
4827
4845
  }
4828
4846
 
4829
4847
  if (slot2 != NULL) {
@@ -4834,7 +4852,7 @@ static inline bool _INPLACE_OPERATION_ADD_OBJECT_OBJECT(PyObject **operand1, PyO
4834
4852
  goto exit_inplace_result_object;
4835
4853
  }
4836
4854
 
4837
- Py_DECREF(x);
4855
+ Py_DECREF_IMMORTAL(x);
4838
4856
  }
4839
4857
 
4840
4858
  #if PYTHON_VERSION < 0x300
@@ -80,7 +80,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_LONG(PyObject
80
80
  goto exit_inplace_result_object;
81
81
  }
82
82
 
83
- Py_DECREF(x);
83
+ Py_DECREF_IMMORTAL(x);
84
84
  }
85
85
 
86
86
  {
@@ -106,7 +106,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_LONG(PyObject
106
106
  goto exit_inplace_result_object;
107
107
  }
108
108
 
109
- Py_DECREF(x);
109
+ Py_DECREF_IMMORTAL(x);
110
110
  }
111
111
 
112
112
  if (slot2 != NULL) {
@@ -117,7 +117,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_LONG(PyObject
117
117
  goto exit_inplace_result_object;
118
118
  }
119
119
 
120
- Py_DECREF(x);
120
+ Py_DECREF_IMMORTAL(x);
121
121
  }
122
122
 
123
123
  #if PYTHON_VERSION < 0x300
@@ -311,7 +311,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_LONG_OBJECT(PyObject
311
311
  goto exit_inplace_result_object;
312
312
  }
313
313
 
314
- Py_DECREF(x);
314
+ Py_DECREF_IMMORTAL(x);
315
315
  slot2 = NULL;
316
316
  }
317
317
  }
@@ -323,7 +323,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_LONG_OBJECT(PyObject
323
323
  goto exit_inplace_result_object;
324
324
  }
325
325
 
326
- Py_DECREF(x);
326
+ Py_DECREF_IMMORTAL(x);
327
327
  }
328
328
 
329
329
  if (slot2 != NULL) {
@@ -334,7 +334,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_LONG_OBJECT(PyObject
334
334
  goto exit_inplace_result_object;
335
335
  }
336
336
 
337
- Py_DECREF(x);
337
+ Py_DECREF_IMMORTAL(x);
338
338
  }
339
339
 
340
340
  #if PYTHON_VERSION < 0x300
@@ -569,7 +569,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_INT(PyObject *
569
569
  goto exit_inplace_result_object;
570
570
  }
571
571
 
572
- Py_DECREF(x);
572
+ Py_DECREF_IMMORTAL(x);
573
573
  }
574
574
 
575
575
  {
@@ -595,7 +595,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_INT(PyObject *
595
595
  goto exit_inplace_result_object;
596
596
  }
597
597
 
598
- Py_DECREF(x);
598
+ Py_DECREF_IMMORTAL(x);
599
599
  }
600
600
 
601
601
  if (slot2 != NULL) {
@@ -606,7 +606,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_INT(PyObject *
606
606
  goto exit_inplace_result_object;
607
607
  }
608
608
 
609
- Py_DECREF(x);
609
+ Py_DECREF_IMMORTAL(x);
610
610
  }
611
611
 
612
612
  #if PYTHON_VERSION < 0x300
@@ -805,7 +805,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_INT_OBJECT(PyObject *
805
805
  goto exit_inplace_result_object;
806
806
  }
807
807
 
808
- Py_DECREF(x);
808
+ Py_DECREF_IMMORTAL(x);
809
809
  slot2 = NULL;
810
810
  }
811
811
  }
@@ -817,7 +817,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_INT_OBJECT(PyObject *
817
817
  goto exit_inplace_result_object;
818
818
  }
819
819
 
820
- Py_DECREF(x);
820
+ Py_DECREF_IMMORTAL(x);
821
821
  }
822
822
 
823
823
  if (slot2 != NULL) {
@@ -828,7 +828,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_INT_OBJECT(PyObject *
828
828
  goto exit_inplace_result_object;
829
829
  }
830
830
 
831
- Py_DECREF(x);
831
+ Py_DECREF_IMMORTAL(x);
832
832
  }
833
833
 
834
834
  #if PYTHON_VERSION < 0x300
@@ -1071,7 +1071,7 @@ static inline bool _INPLACE_OPERATION_BITAND_LONG_INT(PyObject **operand1, PyObj
1071
1071
  goto exit_inplace_result_object;
1072
1072
  }
1073
1073
 
1074
- Py_DECREF(x);
1074
+ Py_DECREF_IMMORTAL(x);
1075
1075
  }
1076
1076
 
1077
1077
  // Statically recognized that coercion is not possible with these types
@@ -1143,7 +1143,7 @@ static inline bool _INPLACE_OPERATION_BITAND_INT_LONG(PyObject **operand1, PyObj
1143
1143
  goto exit_inplace_result_object;
1144
1144
  }
1145
1145
 
1146
- Py_DECREF(x);
1146
+ Py_DECREF_IMMORTAL(x);
1147
1147
  }
1148
1148
 
1149
1149
  // Statically recognized that coercion is not possible with these types
@@ -1240,7 +1240,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_SET(PyObject *
1240
1240
  goto exit_inplace_result_object;
1241
1241
  }
1242
1242
 
1243
- Py_DECREF(x);
1243
+ Py_DECREF_IMMORTAL(x);
1244
1244
  }
1245
1245
 
1246
1246
  {
@@ -1266,7 +1266,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_SET(PyObject *
1266
1266
  goto exit_inplace_result_object;
1267
1267
  }
1268
1268
 
1269
- Py_DECREF(x);
1269
+ Py_DECREF_IMMORTAL(x);
1270
1270
  }
1271
1271
 
1272
1272
  if (slot2 != NULL) {
@@ -1277,7 +1277,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_OBJECT_SET(PyObject *
1277
1277
  goto exit_inplace_result_object;
1278
1278
  }
1279
1279
 
1280
- Py_DECREF(x);
1280
+ Py_DECREF_IMMORTAL(x);
1281
1281
  }
1282
1282
 
1283
1283
  #if PYTHON_VERSION < 0x300
@@ -1411,7 +1411,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_SET_OBJECT(PyObject *
1411
1411
  goto exit_inplace_result_object;
1412
1412
  }
1413
1413
 
1414
- Py_DECREF(x);
1414
+ Py_DECREF_IMMORTAL(x);
1415
1415
  }
1416
1416
 
1417
1417
  {
@@ -1438,7 +1438,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_SET_OBJECT(PyObject *
1438
1438
  goto exit_inplace_result_object;
1439
1439
  }
1440
1440
 
1441
- Py_DECREF(x);
1441
+ Py_DECREF_IMMORTAL(x);
1442
1442
  slot2 = NULL;
1443
1443
  }
1444
1444
  }
@@ -1450,7 +1450,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_SET_OBJECT(PyObject *
1450
1450
  goto exit_inplace_result_object;
1451
1451
  }
1452
1452
 
1453
- Py_DECREF(x);
1453
+ Py_DECREF_IMMORTAL(x);
1454
1454
  }
1455
1455
 
1456
1456
  if (slot2 != NULL) {
@@ -1461,7 +1461,7 @@ static HEDLEY_NEVER_INLINE bool __INPLACE_OPERATION_BITAND_SET_OBJECT(PyObject *
1461
1461
  goto exit_inplace_result_object;
1462
1462
  }
1463
1463
 
1464
- Py_DECREF(x);
1464
+ Py_DECREF_IMMORTAL(x);
1465
1465
  }
1466
1466
 
1467
1467
  #if PYTHON_VERSION < 0x300
@@ -1654,7 +1654,7 @@ static inline bool _INPLACE_OPERATION_BITAND_OBJECT_OBJECT(PyObject **operand1,
1654
1654
  goto exit_inplace_result_object;
1655
1655
  }
1656
1656
 
1657
- Py_DECREF(x);
1657
+ Py_DECREF_IMMORTAL(x);
1658
1658
  }
1659
1659
 
1660
1660
  {
@@ -1682,7 +1682,7 @@ static inline bool _INPLACE_OPERATION_BITAND_OBJECT_OBJECT(PyObject **operand1,
1682
1682
  goto exit_inplace_result_object;
1683
1683
  }
1684
1684
 
1685
- Py_DECREF(x);
1685
+ Py_DECREF_IMMORTAL(x);
1686
1686
  slot2 = NULL;
1687
1687
  }
1688
1688
  }
@@ -1694,7 +1694,7 @@ static inline bool _INPLACE_OPERATION_BITAND_OBJECT_OBJECT(PyObject **operand1,
1694
1694
  goto exit_inplace_result_object;
1695
1695
  }
1696
1696
 
1697
- Py_DECREF(x);
1697
+ Py_DECREF_IMMORTAL(x);
1698
1698
  }
1699
1699
 
1700
1700
  if (slot2 != NULL) {
@@ -1705,7 +1705,7 @@ static inline bool _INPLACE_OPERATION_BITAND_OBJECT_OBJECT(PyObject **operand1,
1705
1705
  goto exit_inplace_result_object;
1706
1706
  }
1707
1707
 
1708
- Py_DECREF(x);
1708
+ Py_DECREF_IMMORTAL(x);
1709
1709
  }
1710
1710
 
1711
1711
  #if PYTHON_VERSION < 0x300