From f5bd621a6db920f46b15b7c4fb24801606a6c000 Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sat, 9 Dec 2023 00:09:59 -0600 Subject: [PATCH 1/6] Make functions compatible with Tcl_EventProc where needed --- Modules/_tkinter.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 64e752c305aae1..469461e89508d2 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -1306,8 +1306,9 @@ Tkapp_ObjectResult(TkappObject *self) hold the Python lock. */ static int -Tkapp_CallProc(Tkapp_CallEvent *e, int flags) +Tkapp_CallProc(Tcl_Event *evPtr, int flags) { + Tkapp_CallEvent *e = (Tkapp_CallEvent *)evPtr; Tcl_Obj *objStore[ARGSZ]; Tcl_Obj **objv; int objc; @@ -1385,7 +1386,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) PyErr_NoMemory(); return NULL; } - ev->ev.proc = (Tcl_EventProc*)Tkapp_CallProc; + ev->ev.proc = Tkapp_CallProc; ev->self = self; ev->args = args; ev->res = &res; @@ -1624,8 +1625,9 @@ var_perform(VarEvent *ev) } static int -var_proc(VarEvent* ev, int flags) +var_proc(Tcl_Event *evPtr, int flags) { + VarEvent *ev = (VarEvent *)evPtr; ENTER_PYTHON var_perform(ev); Tcl_MutexLock(&var_mutex); @@ -1663,7 +1665,7 @@ var_invoke(EventFunc func, PyObject *selfptr, PyObject *args, int flags) ev->res = &res; ev->exc = &exc; ev->cond = &cond; - ev->ev.proc = (Tcl_EventProc*)var_proc; + ev->ev.proc = var_proc; Tkapp_ThreadSend(self, (Tcl_Event*)ev, &cond, &var_mutex); Tcl_ConditionFinalize(&cond); if (!res) { @@ -2236,8 +2238,9 @@ typedef struct CommandEvent{ } CommandEvent; static int -Tkapp_CommandProc(CommandEvent *ev, int flags) +Tkapp_CommandProc(Tcl_Event *evPtr, int flags) { + CommandEvent *ev = (CommandEvent *)evPtr; if (ev->create) *ev->status = Tcl_CreateObjCommand( ev->interp, ev->name, PythonCmd, @@ -2290,7 +2293,7 @@ _tkinter_tkapp_createcommand_impl(TkappObject *self, const char *name, PyMem_Free(data); return NULL; } - ev->ev.proc = (Tcl_EventProc*)Tkapp_CommandProc; + ev->ev.proc = Tkapp_CommandProc; ev->interp = self->interp; ev->create = 1; ev->name = name; @@ -2343,7 +2346,7 @@ _tkinter_tkapp_deletecommand_impl(TkappObject *self, const char *name) PyErr_NoMemory(); return NULL; } - ev->ev.proc = (Tcl_EventProc*)Tkapp_CommandProc; + ev->ev.proc = Tkapp_CommandProc; ev->interp = self->interp; ev->create = 0; ev->name = name; From cb062e3b883294c6af29549c9e8f9b771d7ee8c9 Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sat, 9 Dec 2023 00:52:58 -0600 Subject: [PATCH 2/6] Make PyTclObject_string() compatible with getter --- Modules/_tkinter.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 469461e89508d2..96677ca74ecfd3 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -749,8 +749,9 @@ PyDoc_STRVAR(PyTclObject_string__doc__, "the string representation of this object, either as str or bytes"); static PyObject * -PyTclObject_string(PyTclObject *self, void *ignored) +PyTclObject_string(PyObject *_self, void *ignored) { + PyTclObject *self = (PyTclObject *)_self; if (!self->string) { self->string = unicodeFromTclObj(self->value); if (!self->string) @@ -817,7 +818,7 @@ get_typename(PyTclObject* obj, void* ignored) static PyGetSetDef PyTclObject_getsetlist[] = { {"typename", (getter)get_typename, NULL, get_typename__doc__}, - {"string", (getter)PyTclObject_string, NULL, + {"string", PyTclObject_string, NULL, PyTclObject_string__doc__}, {0}, }; From c3099170527fcd09692c6ec92f99e331b0176ad3 Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sat, 9 Dec 2023 00:53:26 -0600 Subject: [PATCH 3/6] Make get_typename() compatible with getter --- Modules/_tkinter.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 96677ca74ecfd3..d27184dd0d17e3 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -810,14 +810,15 @@ PyTclObject_richcompare(PyObject *self, PyObject *other, int op) PyDoc_STRVAR(get_typename__doc__, "name of the Tcl type"); static PyObject* -get_typename(PyTclObject* obj, void* ignored) +get_typename(PyObject *self, void* ignored) { + PyTclObject *obj = (PyTclObject *)self; return unicodeFromTclString(obj->value->typePtr->name); } static PyGetSetDef PyTclObject_getsetlist[] = { - {"typename", (getter)get_typename, NULL, get_typename__doc__}, + {"typename", get_typename, NULL, get_typename__doc__}, {"string", PyTclObject_string, NULL, PyTclObject_string__doc__}, {0}, From 98c082d809e83bdfc268c697d3b856471ab348dc Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sat, 9 Dec 2023 00:56:27 -0600 Subject: [PATCH 4/6] Make PyTclObject_repr() compatible with reprfunc --- Modules/_tkinter.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index d27184dd0d17e3..f8410f98607fa8 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -771,8 +771,9 @@ PyTclObject_str(PyTclObject *self) } static PyObject * -PyTclObject_repr(PyTclObject *self) +PyTclObject_repr(PyObject *_self) { + PyTclObject *self = (PyTclObject *)_self; PyObject *repr, *str = PyTclObject_str(self); if (str == NULL) return NULL; @@ -826,7 +827,7 @@ static PyGetSetDef PyTclObject_getsetlist[] = { static PyType_Slot PyTclObject_Type_slots[] = { {Py_tp_dealloc, (destructor)PyTclObject_dealloc}, - {Py_tp_repr, (reprfunc)PyTclObject_repr}, + {Py_tp_repr, PyTclObject_repr}, {Py_tp_str, (reprfunc)PyTclObject_str}, {Py_tp_getattro, PyObject_GenericGetAttr}, {Py_tp_richcompare, PyTclObject_richcompare}, From 352876b5966bacfb572072666a6af056e0313dff Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sat, 9 Dec 2023 00:59:06 -0600 Subject: [PATCH 5/6] Make PyTclObject_str() compatible with reprfunc --- Modules/_tkinter.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index f8410f98607fa8..d81fe42caeb64e 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -761,8 +761,9 @@ PyTclObject_string(PyObject *_self, void *ignored) } static PyObject * -PyTclObject_str(PyTclObject *self) +PyTclObject_str(PyObject *_self) { + PyTclObject *self = (PyTclObject *)_self; if (self->string) { return Py_NewRef(self->string); } @@ -774,7 +775,7 @@ static PyObject * PyTclObject_repr(PyObject *_self) { PyTclObject *self = (PyTclObject *)_self; - PyObject *repr, *str = PyTclObject_str(self); + PyObject *repr, *str = PyTclObject_str(_self); if (str == NULL) return NULL; repr = PyUnicode_FromFormat("<%s object: %R>", @@ -828,7 +829,7 @@ static PyGetSetDef PyTclObject_getsetlist[] = { static PyType_Slot PyTclObject_Type_slots[] = { {Py_tp_dealloc, (destructor)PyTclObject_dealloc}, {Py_tp_repr, PyTclObject_repr}, - {Py_tp_str, (reprfunc)PyTclObject_str}, + {Py_tp_str, PyTclObject_str}, {Py_tp_getattro, PyObject_GenericGetAttr}, {Py_tp_richcompare, PyTclObject_richcompare}, {Py_tp_getset, PyTclObject_getsetlist}, From 001b4cf28ed3be88d2b6be59a42c5e440dba4e76 Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sat, 9 Dec 2023 01:13:58 -0600 Subject: [PATCH 6/6] Make PyTclObject_dealloc() compatible with destructor --- Modules/_tkinter.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index d81fe42caeb64e..f6181168a85ae1 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -735,8 +735,9 @@ newPyTclObject(Tcl_Obj *arg) } static void -PyTclObject_dealloc(PyTclObject *self) +PyTclObject_dealloc(PyObject *_self) { + PyTclObject *self = (PyTclObject *)_self; PyObject *tp = (PyObject *) Py_TYPE(self); Tcl_DecrRefCount(self->value); Py_XDECREF(self->string); @@ -827,7 +828,7 @@ static PyGetSetDef PyTclObject_getsetlist[] = { }; static PyType_Slot PyTclObject_Type_slots[] = { - {Py_tp_dealloc, (destructor)PyTclObject_dealloc}, + {Py_tp_dealloc, PyTclObject_dealloc}, {Py_tp_repr, PyTclObject_repr}, {Py_tp_str, PyTclObject_str}, {Py_tp_getattro, PyObject_GenericGetAttr},