Skip to content

Commit 0364fbc

Browse files
authored
Fix int types in _tkinter for Python 3.10 (#951)
The Split, SplitObj and _tkinter_tkapp_split function require the use of Tcl_Size for the size of argument lists. Adjust the patch to account for this. closes #948
1 parent ad92ff6 commit 0364fbc

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

cpython-unix/build-cpython.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ fi
292292
if [ "${PYTHON_MAJMIN_VERSION}" = "3.10" ]; then
293293
# git checkout v3.10.19
294294
# git cherry-pick 625887e6 27cbeb08 d4680b9e ec139c8f
295+
# manually change int argc/objc -> Tcl_Size argc/objc in file
295296
# git diff v3.10.19 Modules/_tkinter.c > patch-tkinter-backport-tcl-9-310.patch
296297
patch -p1 -i ${ROOT}/patch-tkinter-backport-tcl-9-310.patch
297298
fi

cpython-unix/patch-tkinter-backport-tcl-9-310.patch

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
2-
index 2a3e65b6c97..8bed45f933d 100644
2+
index 2a3e65b6c97..d601a2b7c2a 100644
33
--- a/Modules/_tkinter.c
44
+++ b/Modules/_tkinter.c
55
@@ -55,9 +55,24 @@ Copyright (C) 1994 Steen Lumholt.
@@ -44,6 +44,33 @@ index 2a3e65b6c97..8bed45f933d 100644
4444
#if USE_TCL_UNICODE
4545
int byteorder = NATIVE_BYTEORDER;
4646
const Tcl_UniChar *u = Tcl_GetUnicodeFromObj(value, &len);
47+
@@ -510,7 +526,7 @@ unicodeFromTclObj(Tcl_Obj *value)
48+
static PyObject *
49+
Split(const char *list)
50+
{
51+
- int argc;
52+
+ Tcl_Size argc;
53+
const char **argv;
54+
PyObject *v;
55+
56+
@@ -612,7 +628,7 @@ SplitObj(PyObject *arg)
57+
return result;
58+
}
59+
else if (PyUnicode_Check(arg)) {
60+
- int argc;
61+
+ Tcl_Size argc;
62+
const char **argv;
63+
const char *list = PyUnicode_AsUTF8(arg);
64+
65+
@@ -627,7 +643,7 @@ SplitObj(PyObject *arg)
66+
/* Fall through, returning arg. */
67+
}
68+
else if (PyBytes_Check(arg)) {
69+
- int argc;
70+
+ Tcl_Size argc;
71+
const char **argv;
72+
const char *list = PyBytes_AS_STRING(arg);
73+
4774
@@ -655,6 +671,10 @@ class _tkinter.tktimertoken "TkttObject *" "&Tktt_Type_spec"
4875

4976
/**** Tkapp Object ****/
@@ -275,3 +302,12 @@ index 2a3e65b6c97..8bed45f933d 100644
275302
Tcl_Obj **objv;
276303
if (Tcl_ListObjGetElements(Tkapp_Interp(self),
277304
((PyTclObject*)arg)->value,
305+
@@ -2365,7 +2405,7 @@ _tkinter_tkapp_split(TkappObject *self, PyObject *arg)
306+
307+
if (PyTclObject_Check(arg)) {
308+
Tcl_Obj *value = ((PyTclObject*)arg)->value;
309+
- int objc;
310+
+ Tcl_Size objc;
311+
Tcl_Obj **objv;
312+
int i;
313+
if (Tcl_ListObjGetElements(Tkapp_Interp(self), value,

0 commit comments

Comments
 (0)