You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Derby: Convert the _tkinter module to use Argument Clinic #64367
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee='https://github.com/serhiy-storchaka'closed_at=<Date2015-05-04.12:47:16.563>created_at=<Date2014-01-07.21:03:59.546>labels= ['extension-modules', 'type-feature', 'expert-tkinter', 'expert-argument-clinic']
title='Derby: Convert the _tkinter module to use Argument Clinic'updated_at=<Date2015-05-04.12:47:16.562>user='https://github.com/serhiy-storchaka'
call() just converts all args to Tcl list. Is Argument Clinic supports *args
and **kwargs? I'm not sure there is a benefit with using Argument Clinic here.
splitlist() and split() first call PyArg_ParseTuple with one argument, check
the input, and then may call PyArg_ParseTuple with other argument. They need
large refactoring to use Argument Clinic.
getint(), getdouble(), getboolean() first manually unpack arguments tuple, and
then may call PyArg_ParseTuple. Same as above.
setvar()/globalsetvar(), getvar()/globalgetvar(), unsetvar()/globalunsetvar()
shares common code parametrized by flags. I think this is resolvable. But
worse, they can delegates their execution to other thread and should save all
arguments in events queue. And this looks absolutely unsuitable for Argument
Clinic.
(It would have made it easier on me if you'd used the C function names, instead of the names in the module.)
I agree. In retrospect, it's not surprising that things in _tkinter aren't suitable, as it appears to be a shunt for calling things in Tcl.
For what it's worth, Argument Clinic is only intended for functions that use PyArg_ParseTuple or PyArg_ParseTupleOrKeywords to parse their arguments. So something like call is and will forever be unsuitable.
(And reading _tkinter.c this has reminded me why I don't like Tcl ;-)
You misunderstood me. I already have 1018-lines patch which converts about 24
functions and methods to Argument Clinic church. And I'm working on left
functions. Do you want to get unfinished patch?
As mentioned on bpo-20148, removing the "static" from the forward declarations breaks it on GCC. (And, of the two, I think GCC is the one being reasonable here.)
Attached is a patch that should fix the build for tkinter.
Activity
serhiy-storchaka commentedon Jan 7, 2014
In progress. Actually many functions are not very suitable for Argument Clinic.
larryhastings commentedon Jan 7, 2014
What functions, and what makes them unsuitable?
serhiy-storchaka commentedon Jan 7, 2014
call() just converts all args to Tcl list. Is Argument Clinic supports *args
and **kwargs? I'm not sure there is a benefit with using Argument Clinic here.
splitlist() and split() first call PyArg_ParseTuple with one argument, check
the input, and then may call PyArg_ParseTuple with other argument. They need
large refactoring to use Argument Clinic.
getint(), getdouble(), getboolean() first manually unpack arguments tuple, and
then may call PyArg_ParseTuple. Same as above.
setvar()/globalsetvar(), getvar()/globalgetvar(), unsetvar()/globalunsetvar()
shares common code parametrized by flags. I think this is resolvable. But
worse, they can delegates their execution to other thread and should save all
arguments in events queue. And this looks absolutely unsuitable for Argument
Clinic.
larryhastings commentedon Jan 7, 2014
(It would have made it easier on me if you'd used the C function names, instead of the names in the module.)
I agree. In retrospect, it's not surprising that things in _tkinter aren't suitable, as it appears to be a shunt for calling things in Tcl.
For what it's worth, Argument Clinic is only intended for functions that use PyArg_ParseTuple or PyArg_ParseTupleOrKeywords to parse their arguments. So something like call is and will forever be unsuitable.
(And reading _tkinter.c this has reminded me why I don't like Tcl ;-)
larryhastings commentedon Jan 8, 2014
So do you think there are any entry points worth converting in _tkinter, or should we close this issue?
serhiy-storchaka commentedon Jan 8, 2014
You misunderstood me. I already have 1018-lines patch which converts about 24
functions and methods to Argument Clinic church. And I'm working on left
functions. Do you want to get unfinished patch?
larryhastings commentedon Jan 8, 2014
Oh, okay. That sounds fine, and I'm not in a hurry. Please post the patch whenever you're ready, thanks!
serhiy-storchaka commentedon Jan 18, 2014
Here is a patch.
serhiy-storchaka commentedon Mar 20, 2014
Here is updated patch.
serhiy-storchaka commentedon Jun 1, 2014
Synchronized with tip.
serhiy-storchaka commentedon Apr 17, 2015
Updated to the tip. Converted methods getint, getdouble, getboolean, splitlist, split.
python-dev commentedon May 3, 2015
New changeset b22ced894d51 by Serhiy Storchaka in branch 'default':
Issue bpo-20168: Converted the _tkinter module to Argument Clinic.
https://hg.python.org/cpython/rev/b22ced894d51
serhiy-storchaka commentedon May 3, 2015
wantobjects() was not converted due to a bug in Argument Clinic (bpo-24051).
zooba commentedon May 3, 2015
This broke Windows builds because of unnecessary "static" qualifiers on the forward declarations at lines 2685 and 3006 (as discussed on bpo-20323).
Removing "static" from these lines fixes the build.
larryhastings commentedon May 3, 2015
As mentioned on bpo-20148, removing the "static" from the forward declarations breaks it on GCC. (And, of the two, I think GCC is the one being reasonable here.)
Attached is a patch that should fix the build for tkinter.
zooba commentedon May 3, 2015
LGTM
python-dev commentedon May 3, 2015
New changeset 7a76c462c7f6 by Larry Hastings in branch 'default':
Fix Windows build breakage from checkins on Issues bpo-20148 and bpo-20168.
https://hg.python.org/cpython/rev/7a76c462c7f6
larryhastings commentedon May 3, 2015
Steve, please close this issue when you've confirmed it's now building correctly on Windows.