mirror of https://github.com/python/cpython
Issue #16809: Tkinter's splitlist() and split() methods now accept Tcl_Obj
argument. This is needed for support Tcl/Tk 8.6.
This commit is contained in:
commit
254954aacd
|
@ -200,6 +200,8 @@ class TclTest(unittest.TestCase):
|
||||||
(('a', 3.4), ('a', 3.4)),
|
(('a', 3.4), ('a', 3.4)),
|
||||||
((), ()),
|
((), ()),
|
||||||
(call('list', 1, '2', (3.4,)), (1, '2', (3.4,))),
|
(call('list', 1, '2', (3.4,)), (1, '2', (3.4,))),
|
||||||
|
(call('dict', 'create', 1, '\u20ac', b'\xe2\x82\xac', (3.4,)),
|
||||||
|
(1, '\u20ac', '\u20ac', (3.4,))),
|
||||||
]
|
]
|
||||||
for arg, res in testcases:
|
for arg, res in testcases:
|
||||||
self.assertEqual(splitlist(arg), res, msg=arg)
|
self.assertEqual(splitlist(arg), res, msg=arg)
|
||||||
|
@ -232,6 +234,8 @@ class TclTest(unittest.TestCase):
|
||||||
(('a', (2, 3.4)), ('a', (2, 3.4))),
|
(('a', (2, 3.4)), ('a', (2, 3.4))),
|
||||||
((), ()),
|
((), ()),
|
||||||
(call('list', 1, '2', (3.4,)), (1, '2', (3.4,))),
|
(call('list', 1, '2', (3.4,)), (1, '2', (3.4,))),
|
||||||
|
(call('dict', 'create', 12, '\u20ac', b'\xe2\x82\xac', (3.4,)),
|
||||||
|
(12, '\u20ac', '\u20ac', (3.4,))),
|
||||||
]
|
]
|
||||||
for arg, res in testcases:
|
for arg, res in testcases:
|
||||||
self.assertEqual(split(arg), res, msg=arg)
|
self.assertEqual(split(arg), res, msg=arg)
|
||||||
|
|
|
@ -38,6 +38,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #16809: Tkinter's splitlist() and split() methods now accept Tcl_Obj
|
||||||
|
argument.
|
||||||
|
|
||||||
- Issue #18324: set_payload now correctly handles binary input. This also
|
- Issue #18324: set_payload now correctly handles binary input. This also
|
||||||
supersedes the previous fixes for #14360, #1717, and #16564.
|
supersedes the previous fixes for #14360, #1717, and #16564.
|
||||||
|
|
||||||
|
|
|
@ -1757,16 +1757,35 @@ Tkapp_SplitList(PyObject *self, PyObject *args)
|
||||||
char *list;
|
char *list;
|
||||||
int argc;
|
int argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
PyObject *v;
|
PyObject *arg, *v;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (PyTuple_Size(args) == 1) {
|
if (!PyArg_ParseTuple(args, "O:splitlist", &arg))
|
||||||
v = PyTuple_GetItem(args, 0);
|
return NULL;
|
||||||
if (PyTuple_Check(v)) {
|
if (PyTclObject_Check(arg)) {
|
||||||
Py_INCREF(v);
|
int objc;
|
||||||
|
Tcl_Obj **objv;
|
||||||
|
if (Tcl_ListObjGetElements(Tkapp_Interp(self),
|
||||||
|
((PyTclObject*)arg)->value,
|
||||||
|
&objc, &objv) == TCL_ERROR) {
|
||||||
|
return Tkinter_Error(self);
|
||||||
|
}
|
||||||
|
if (!(v = PyTuple_New(objc)))
|
||||||
|
return NULL;
|
||||||
|
for (i = 0; i < objc; i++) {
|
||||||
|
PyObject *s = FromObj(self, objv[i]);
|
||||||
|
if (!s || PyTuple_SetItem(v, i, s)) {
|
||||||
|
Py_DECREF(v);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
if (PyTuple_Check(arg)) {
|
||||||
|
Py_INCREF(arg);
|
||||||
|
return arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "et:splitlist", "utf-8", &list))
|
if (!PyArg_ParseTuple(args, "et:splitlist", "utf-8", &list))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -1797,16 +1816,38 @@ Tkapp_SplitList(PyObject *self, PyObject *args)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
Tkapp_Split(PyObject *self, PyObject *args)
|
Tkapp_Split(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
PyObject *v;
|
PyObject *arg, *v;
|
||||||
char *list;
|
char *list;
|
||||||
|
|
||||||
if (PyTuple_Size(args) == 1) {
|
if (!PyArg_ParseTuple(args, "O:split", &arg))
|
||||||
PyObject* o = PyTuple_GetItem(args, 0);
|
return NULL;
|
||||||
if (PyTuple_Check(o)) {
|
if (PyTclObject_Check(arg)) {
|
||||||
o = SplitObj(o);
|
Tcl_Obj *value = ((PyTclObject*)arg)->value;
|
||||||
return o;
|
int objc;
|
||||||
|
Tcl_Obj **objv;
|
||||||
|
int i;
|
||||||
|
if (Tcl_ListObjGetElements(Tkapp_Interp(self), value,
|
||||||
|
&objc, &objv) == TCL_ERROR) {
|
||||||
|
return FromObj(self, value);
|
||||||
|
}
|
||||||
|
if (objc == 0)
|
||||||
|
return PyUnicode_FromString("");
|
||||||
|
if (objc == 1)
|
||||||
|
return FromObj(self, objv[0]);
|
||||||
|
if (!(v = PyTuple_New(objc)))
|
||||||
|
return NULL;
|
||||||
|
for (i = 0; i < objc; i++) {
|
||||||
|
PyObject *s = FromObj(self, objv[i]);
|
||||||
|
if (!s || PyTuple_SetItem(v, i, s)) {
|
||||||
|
Py_DECREF(v);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
if (PyTuple_Check(arg))
|
||||||
|
return SplitObj(arg);
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "et:split", "utf-8", &list))
|
if (!PyArg_ParseTuple(args, "et:split", "utf-8", &list))
|
||||||
return NULL;
|
return NULL;
|
||||||
v = Split(list);
|
v = Split(list);
|
||||||
|
|
Loading…
Reference in New Issue