]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-106078: Move DecimalException to _decimal state (#106301)
authorCharlie Zhao <zhaoyu_hit@qq.com>
Sun, 2 Jul 2023 16:50:40 +0000 (00:50 +0800)
committerGitHub <noreply@github.com>
Sun, 2 Jul 2023 16:50:40 +0000 (16:50 +0000)
Modules/_decimal/_decimal.c
Tools/c-analyzer/cpython/globals-to-fix.tsv

index b7cb19515b3002ba195d9e15abf198a5ec36a45d..da623725003428b485a3c330e0668f7bb974362a 100644 (file)
@@ -46,6 +46,9 @@ typedef struct {
     PyTypeObject *PyDec_Type;
     PyTypeObject *PyDecSignalDict_Type;
     PyTypeObject *DecimalTuple;
+
+    /* Top level Exception; inherits from ArithmeticError */
+    PyObject *DecimalException;
 } decimal_state;
 
 static decimal_state global_state;
@@ -164,9 +167,6 @@ typedef struct {
     PyObject *ex;       /* corresponding exception */
 } DecCondMap;
 
-/* Top level Exception; inherits from ArithmeticError */
-static PyObject *DecimalException = NULL;
-
 /* Exceptions that correspond to IEEE signals */
 #define SUBNORMAL 5
 #define INEXACT 6
@@ -5902,10 +5902,10 @@ PyInit__decimal(void)
     CHECK_INT(PyModule_AddType(m, state->DecimalTuple));
 
     /* Create top level exception */
-    ASSIGN_PTR(DecimalException, PyErr_NewException(
+    ASSIGN_PTR(state->DecimalException, PyErr_NewException(
                                      "decimal.DecimalException",
                                      PyExc_ArithmeticError, NULL));
-    CHECK_INT(PyModule_AddObject(m, "DecimalException", Py_NewRef(DecimalException)));
+    CHECK_INT(PyModule_AddType(m, (PyTypeObject *)state->DecimalException));
 
     /* Create signal tuple */
     ASSIGN_PTR(SignalTuple, PyTuple_New(SIGNAL_MAP_LEN));
@@ -5918,10 +5918,11 @@ PyInit__decimal(void)
 
         switch (cm->flag) {
         case MPD_Float_operation:
-            base = PyTuple_Pack(2, DecimalException, PyExc_TypeError);
+            base = PyTuple_Pack(2, state->DecimalException, PyExc_TypeError);
             break;
         case MPD_Division_by_zero:
-            base = PyTuple_Pack(2, DecimalException, PyExc_ZeroDivisionError);
+            base = PyTuple_Pack(2, state->DecimalException,
+                                PyExc_ZeroDivisionError);
             break;
         case MPD_Overflow:
             base = PyTuple_Pack(2, signal_map[INEXACT].ex,
@@ -5933,7 +5934,7 @@ PyInit__decimal(void)
                                    signal_map[SUBNORMAL].ex);
             break;
         default:
-            base = PyTuple_Pack(1, DecimalException);
+            base = PyTuple_Pack(1, state->DecimalException);
             break;
         }
 
index 1131edff265ee41c8f17ae56751c96664f6de15d..8fdc54df2b0722342e08e5d4c27c4a5bd2293824 100644 (file)
@@ -393,7 +393,6 @@ Modules/xxlimited_35.c      -       Xxo_Type        -
 ## exception types
 Modules/_ctypes/_ctypes.c      -       PyExc_ArgError  -
 Modules/_cursesmodule.c        -       PyCursesError   -
-Modules/_decimal/_decimal.c    -       DecimalException        -
 Modules/_tkinter.c     -       Tkinter_TclError        -
 Modules/xxlimited_35.c -       ErrorObject     -
 Modules/xxmodule.c     -       ErrorObject     -