From e4e403edbb3fffa30594b6d23b98443aacc9869d Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sun, 3 Dec 2023 17:59:05 -0600 Subject: [PATCH 1/5] Cosmetic change to make the next change clearer --- Modules/_tkinter.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index f9a18644945c65..40bbb8f3c3f681 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -1141,8 +1141,8 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) } if (value->typePtr == tkapp->ListType) { - int size; - int i, status; + int i, size; + int status; PyObject *elem; Tcl_Obj *tcl_elem; @@ -1361,7 +1361,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) { Tcl_Obj *objStore[ARGSZ]; Tcl_Obj **objv = NULL; - int objc, i; + int objc; PyObject *res = NULL; TkappObject *self = (TkappObject*)selfptr; int flags = TCL_EVAL_DIRECT | TCL_EVAL_GLOBAL; @@ -1407,6 +1407,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) else { + int i; objv = Tkapp_CallArgs(args, objStore, &objc); if (!objv) return NULL; @@ -2079,10 +2080,9 @@ _tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg) /*[clinic end generated code: output=13b51d34386d36fb input=2b2e13351e3c0b53]*/ { char *list; - int argc; + int argc, i; const char **argv; PyObject *v; - int i; if (PyTclObject_Check(arg)) { int objc; From f8aee7addb52a73e93ea30a18e628d760da2ee19 Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sun, 3 Dec 2023 21:28:15 -0600 Subject: [PATCH 2/5] Use Tcl_Size where needed --- Modules/_tkinter.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 40bbb8f3c3f681..729f7189be56ab 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -69,6 +69,12 @@ Copyright (C) 1994 Steen Lumholt. #define USE_DEPRECATED_TOMMATH_API 1 #endif +// As suggested by https://core.tcl-lang.org/tcl/wiki?name=Migrating+C+extensions+to+Tcl+9 +#ifndef TCL_SIZE_MAX +typedef Tcl_Size int; +#define TCL_SIZE_MAX INT_MAX +#endif + #if !(defined(MS_WINDOWS) || defined(__CYGWIN__)) #define HAVE_CREATEFILEHANDLER #endif @@ -487,7 +493,7 @@ unicodeFromTclString(const char *s) static PyObject * unicodeFromTclObj(Tcl_Obj *value) { - int len; + Tcl_Size len; #if USE_TCL_UNICODE int byteorder = NATIVE_BYTEORDER; const Tcl_UniChar *u = Tcl_GetUnicodeFromObj(value, &len); @@ -1107,7 +1113,7 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) } if (value->typePtr == tkapp->ByteArrayType) { - int size; + Tcl_Size size; char *data = (char*)Tcl_GetByteArrayFromObj(value, &size); return PyBytes_FromStringAndSize(data, size); } @@ -1141,7 +1147,7 @@ FromObj(TkappObject *tkapp, Tcl_Obj *value) } if (value->typePtr == tkapp->ListType) { - int i, size; + Tcl_Size i, size; int status; PyObject *elem; Tcl_Obj *tcl_elem; @@ -1203,9 +1209,9 @@ typedef struct Tkapp_CallEvent { } Tkapp_CallEvent; void -Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc) +Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, Tcl_Size objc) { - int i; + Tcl_Size i; for (i = 0; i < objc; i++) Tcl_DecrRefCount(objv[i]); if (objv != objStore) @@ -1216,7 +1222,7 @@ Tkapp_CallDeallocArgs(Tcl_Obj** objv, Tcl_Obj** objStore, int objc) interpreter thread, which may or may not be the calling thread. */ static Tcl_Obj** -Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) +Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, Tcl_Size *pobjc) { Tcl_Obj **objv = objStore; Py_ssize_t objc = 0, i; @@ -1264,10 +1270,10 @@ Tkapp_CallArgs(PyObject *args, Tcl_Obj** objStore, int *pobjc) Tcl_IncrRefCount(objv[i]); } } - *pobjc = (int)objc; + *pobjc = (Tcl_Size)objc; return objv; finally: - Tkapp_CallDeallocArgs(objv, objStore, (int)objc); + Tkapp_CallDeallocArgs(objv, objStore, (Tcl_Size)objc); return NULL; } @@ -1310,7 +1316,7 @@ Tkapp_CallProc(Tkapp_CallEvent *e, int flags) { Tcl_Obj *objStore[ARGSZ]; Tcl_Obj **objv; - int objc; + Tcl_Size objc; int i; ENTER_PYTHON objv = Tkapp_CallArgs(e->args, objStore, &objc); @@ -1361,7 +1367,7 @@ Tkapp_Call(PyObject *selfptr, PyObject *args) { Tcl_Obj *objStore[ARGSZ]; Tcl_Obj **objv = NULL; - int objc; + Tcl_Size objc; PyObject *res = NULL; TkappObject *self = (TkappObject*)selfptr; int flags = TCL_EVAL_DIRECT | TCL_EVAL_GLOBAL; @@ -2080,12 +2086,12 @@ _tkinter_tkapp_splitlist(TkappObject *self, PyObject *arg) /*[clinic end generated code: output=13b51d34386d36fb input=2b2e13351e3c0b53]*/ { char *list; - int argc, i; + Tcl_Size argc, i; const char **argv; PyObject *v; if (PyTclObject_Check(arg)) { - int objc; + Tcl_Size objc; Tcl_Obj **objv; if (Tcl_ListObjGetElements(Tkapp_Interp(self), ((PyTclObject*)arg)->value, From f15bf1a82b112191e2412f01323c408d7c4f6106 Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sun, 3 Dec 2023 21:49:04 -0600 Subject: [PATCH 3/5] There is a typo in the suggestion --- Modules/_tkinter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 729f7189be56ab..7d77e154a26954 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -71,7 +71,7 @@ Copyright (C) 1994 Steen Lumholt. // As suggested by https://core.tcl-lang.org/tcl/wiki?name=Migrating+C+extensions+to+Tcl+9 #ifndef TCL_SIZE_MAX -typedef Tcl_Size int; +typedef int Tcl_Size; #define TCL_SIZE_MAX INT_MAX #endif From c5801b34a55e452945b3ce58e9150d889a862014 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 4 Jun 2024 18:58:03 +0300 Subject: [PATCH 4/5] Add missing in Tcl 9.0 declaration of deprecated Tcl_AppInit(). --- Modules/_tkinter.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 1da1ea3b1f0d8f..24f87c8d34c6b2 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -523,6 +523,10 @@ class _tkinter.tktimertoken "TkttObject *" "&Tktt_Type_spec" /**** Tkapp Object ****/ +#if TK_MAJOR_VERSION >= 9 +int Tcl_AppInit(Tcl_Interp *); +#endif + #ifndef WITH_APPINIT int Tcl_AppInit(Tcl_Interp *interp) From 131eca98a6256655da16f4940d6899ef90798bbf Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 4 Jun 2024 19:03:44 +0300 Subject: [PATCH 5/5] Add a NEWS entry. --- .../next/Library/2024-06-04-19-03-25.gh-issue-112672.K2XfZH.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2024-06-04-19-03-25.gh-issue-112672.K2XfZH.rst diff --git a/Misc/NEWS.d/next/Library/2024-06-04-19-03-25.gh-issue-112672.K2XfZH.rst b/Misc/NEWS.d/next/Library/2024-06-04-19-03-25.gh-issue-112672.K2XfZH.rst new file mode 100644 index 00000000000000..46345bff117b19 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-06-04-19-03-25.gh-issue-112672.K2XfZH.rst @@ -0,0 +1 @@ +Support building :mod:`tkinter` with Tcl 9.0.