This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Argument Clinic: simplify METH_NOARGS generated code
Type: enhancement Stage: resolved
Components: Demos and Tools Versions: Python 3.4
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: larry Nosy List: georg.brandl, larry, serhiy.storchaka
Priority: normal Keywords:

Created on 2014-01-12 10:20 by georg.brandl, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (4)
msg207943 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2014-01-12 10:20
For METH_NOARGS, you can get rid of the separate _impl function.  This makes the generated code much smaller.
msg207944 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-01-12 10:23
Seconded.

But only if there are no self or result converters.
msg207954 - (view) Author: Larry Hastings (larry) * (Python committer) Date: 2014-01-12 13:42
(Actually a self converter would be fine too.  Those are only allowed to cast.)

I'm not doing this; here's why.  I want the call signature to the impl function to be the *idealized* signature of that function.  And METH_NOARGS passes in a dumb stupid second argument that is always a NULL pointer.  I just don't want that there.

The long-term goal of Clinic is to let us speed up argument parsing.  We'll do this by rewriting the whole approach to argument parsing.  I suspect this will include not just PyArg_ParseTuple but even the whole callback mechanism, METH_O METH_NOARGS and all that.  So I can live with the extra three-line function for now.

Also, I assert that compilers are sufficiently smart today to fold the impl function back into the parsing function.  Therefore this approach has no run-time cost.

Finally, if you're trying to reduce the number of lines of generated code stomping on your poor tired eyes, consider playing with the Clinic buffer prototype:

    https://bitbucket.org/larry/python-clinic-buffer

You can at least prototype with it before checking in for now.
msg207955 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2014-01-12 13:51
Sure, I wasn't concerned with compilation, only saving lines of code. But I agree that the buffer way sounds much more promising.

Just seemed odd that METH_O was clean and METH_NOARGS less so :)
History
Date User Action Args
2022-04-11 14:57:56adminsetgithub: 64424
2014-01-12 13:51:34georg.brandlsetmessages: + msg207955
2014-01-12 13:42:30larrysetstatus: open -> closed

components: + Demos and Tools
versions: + Python 3.4
messages: + msg207954
type: enhancement
resolution: rejected
stage: resolved
2014-01-12 10:30:04georg.brandlsetassignee: larry

nosy: + larry
2014-01-12 10:23:00serhiy.storchakasetnosy: + serhiy.storchaka
messages: + msg207944
2014-01-12 10:20:28georg.brandlcreate