Skip to content
Closed
Show file tree
Hide file tree
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
Prev Previous commit
Next Next commit
Add Tkinter_TclError to state
  • Loading branch information
erlend-aasland committed Mar 29, 2023
commit 6bfafccfe86461eb3fc1285e8015ad70508a7962
22 changes: 13 additions & 9 deletions Modules/_tkinter.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,6 @@ typedef struct {

/**** Error Handling ****/

static PyObject *Tkinter_TclError;
static int quitMainLoop = 0;
static int errorInCmd = 0;
static PyObject *excInCmd;
Expand All @@ -336,7 +335,8 @@ Tkinter_Error(TkappObject *self)
{
PyObject *res = Tkapp_UnicodeResult(self);
if (res != NULL) {
PyErr_SetObject(Tkinter_TclError, res);
module_state *st = GLOBAL_STATE();
PyErr_SetObject(st->Tkinter_TclError, res);
Py_DECREF(res);
}
return NULL;
Expand Down Expand Up @@ -1438,7 +1438,8 @@ Tkapp_Call(PyObject *selfptr, PyObject *args)
PyErr_SetRaisedException(exc);
}
else {
PyErr_SetObject(Tkinter_TclError, exc);
module_state *st = GLOBAL_STATE();
PyErr_SetObject(st->Tkinter_TclError, exc);
}
}
Tcl_ConditionFinalize(&cond);
Expand Down Expand Up @@ -2353,7 +2354,8 @@ _tkinter_tkapp_createcommand_impl(TkappObject *self, const char *name,
LEAVE_TCL
}
if (err) {
PyErr_SetString(Tkinter_TclError, "can't create Tcl command");
module_state *st = GLOBAL_STATE();
PyErr_SetString(st->Tkinter_TclError, "can't create Tcl command");
PyMem_Free(data);
return NULL;
}
Expand Down Expand Up @@ -2404,7 +2406,8 @@ _tkinter_tkapp_deletecommand_impl(TkappObject *self, const char *name)
LEAVE_TCL
}
if (err == -1) {
PyErr_SetString(Tkinter_TclError, "can't delete Tcl command");
module_state *st = GLOBAL_STATE();
PyErr_SetString(st->Tkinter_TclError, "can't delete Tcl command");
return NULL;
}
Py_RETURN_NONE;
Expand Down Expand Up @@ -2819,7 +2822,8 @@ _tkinter_tkapp_loadtk_impl(TkappObject *self)
* a static variable.
*/
if (tk_load_failed) {
PyErr_SetString(Tkinter_TclError, TKINTER_LOADTK_ERRMSG);
module_state *st = GLOBAL_STATE();
PyErr_SetString(st->Tkinter_TclError, TKINTER_LOADTK_ERRMSG);
return NULL;
}
#endif
Expand Down Expand Up @@ -3285,12 +3289,13 @@ PyInit__tkinter(void)
Py_DECREF(m);
return NULL;
}
if (PyModule_AddObject(m, "TclError", Py_NewRef(o))) {
if (PyModule_AddObjectRef(m, "TclError", o)) {
Py_DECREF(o);
Py_DECREF(m);
return NULL;
}
Tkinter_TclError = o;
module_state *st = GLOBAL_STATE();
st->Tkinter_TclError = o;

if (PyModule_AddIntConstant(m, "READABLE", TCL_READABLE)) {
Py_DECREF(m);
Expand Down Expand Up @@ -3347,7 +3352,6 @@ PyInit__tkinter(void)
Py_DECREF(m);
return NULL;
}
module_state *st = GLOBAL_STATE();
st->Tkapp_Type = o;

o = PyType_FromMetaclass(NULL, m, &Tktt_Type_spec, NULL);
Expand Down
1 change: 1 addition & 0 deletions Modules/tkinter.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ typedef struct {
PyObject *PyTclObject_Type;
PyObject *Tkapp_Type;
PyObject *Tktt_Type;
PyObject *Tkinter_TclError;
} module_state;

extern module_state global_state;
Expand Down
1 change: 0 additions & 1 deletion Tools/c-analyzer/cpython/globals-to-fix.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,6 @@ Modules/xxlimited_35.c - Xxo_Type -
Modules/_ctypes/_ctypes.c - PyExc_ArgError -
Modules/_cursesmodule.c - PyCursesError -
Modules/_decimal/_decimal.c - DecimalException -
Modules/_tkinter.c - Tkinter_TclError -
Modules/ossaudiodev.c - OSSAudioError -
Modules/socketmodule.c - socket_herror -
Modules/socketmodule.c - socket_gaierror -
Expand Down