[Python-Dev] Early results from Argument Clinic automation discussion (original) (raw)
Larry Hastings larry at hastings.org
Wed Mar 20 01:14:07 CET 2013
- Previous message: [Python-Dev] [Python-checkins] cpython (2.7): Issue #9090 : Error code 10035 calling socket.recv() on a socket with a timeout
- Next message: [Python-Dev] cpython: Closes issue 17467. Add readline and readlines support to
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Mark Shannon, Dmitry Jemerov (from PyCharm) and I sat down to talk about rearchitecting the Argument Clinic prototype to make it easily to interact with. We came up with the following.
The DSL will now produce an intermediate representation. The output will consume this intermediate representation.
The two defined outputs from the IR so far:
- The inplace generated C code (what it has right now), and
- Argument Clinic DSL code itself.
The intermediate representation will be subclasses of inspect.Signature and inspect.Parameter that add the extra bits of information needed by Argument Clinic, as follows:
class Function(inspect.Signature): name = 'function name' module = 'module name if any class = 'class name if any, can't actually call this class' docstring = 'function docstring' c_id = 'stub id to use for generated c functions' return_converter = SeeBelow()
class Parameter(inspect.Parameter): docstring = 'per-parameter docstring' group = converter = ConverterFunction()
Parameter.group is an integer, specifying which "option group" the parameter is in. This must be an integer for positional-only arguments, and None for other argument types. 0 indicates "required positional-only parameter". Left-optional groups get negative numbers, decreasing as they get further from the required parameters; right-optional get positive numbers, increasing as they get further from the required parameters. (Groups cannot nest, so a parameter cannot be in more than one group.)
Function.return_converter was suggested by Mark. This is the inverse of the per-parameter converter function: it defines the return type of the impl function, and the conversion process to turn it into the PyObject * that gets returned to Python. And, like the converter functions, it will define the actual return annotation of the function (if any).
Mark wants to write something that parses C code implementing builtins
and produces the IR; he can then use that to write Argument Clinic DSL.
This will make the conversion process go much more quickly.
//arry/ -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20130319/60ab46b4/attachment.html>
- Previous message: [Python-Dev] [Python-checkins] cpython (2.7): Issue #9090 : Error code 10035 calling socket.recv() on a socket with a timeout
- Next message: [Python-Dev] cpython: Closes issue 17467. Add readline and readlines support to
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]