Visitar URL original
gh-106078: Move `DecimalException` to global state by CharlieZhao95 · Pull Request #106301 · python/cpython · GitHub
Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Move DecimalException to global state
  • Loading branch information
CharlieZhao95 committed Jul 1, 2023
commit aeb5b11baa09a156fabb80fe5e07d9eafac332c5
16 changes: 8 additions & 8 deletions Modules/_decimal/_decimal.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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));
Expand All @@ -5918,10 +5918,10 @@ 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);
Comment thread
erlend-aasland marked this conversation as resolved.
Outdated
break;
case MPD_Overflow:
base = PyTuple_Pack(2, signal_map[INEXACT].ex,
Expand All @@ -5933,7 +5933,7 @@ PyInit__decimal(void)
signal_map[SUBNORMAL].ex);
break;
default:
base = PyTuple_Pack(1, DecimalException);
base = PyTuple_Pack(1, state->DecimalException);
break;
}

Expand Down