[Python-Dev] Using argument clinic to replace timemodule.c:parse_time_t_args()
Larry Hastings
larry at hastings.org
Wed Jan 22 05:23:29 CET 2014
Yes, I meant in the definition of the convertor class. You can fix c_default in converter_init.
On Jan 21, 2014 7:19 PM, Nikolaus Rath <Nikolaus at rath.org> wrote:
>
> Larry Hastings <larry at hastings.org> writes:
> > A comment on your approach so far: I'm very much against giving
> > "default" a default value in the constructor.
>
> You mean in the definition of the custom converter class?
>
> > I realize that hack saves you having to say "= NULL" in a lot of
> > places. But explicit is better than implicit, and we're going to read
> > these signatures a lot more often than we write them, and I want
> > Clinic signatures to be easy to read at first glance.
> [....]
> > All is not lost! What follows is rough pseudo-C code, hopefully you
> > can take it from here.
> >
> > typedef struct {
> > int set;
> > time_t when;
> > } clinic_time_t;
> > #define DEFAULT_CLINIC_TIME_T {0, 0}
> >
> [...]
> >
> > /*[python input]
> > class clinic_time_t_converter(CConverter):
> > type = 'clinic_time_t'
> > converter = 'parse_clinic_time_t'
> > c_default = 'DEFAULT_CLINIC_TIME_T'
> > [python start generated code]*/
> > /*[python end generated code: checksum=...]*/
> >
> > Now you can use clinic_time_t. Parameters declared clinic_time_t can
> > be required, or they can be optional; if they're optional give them a
> > default value of None.
>
> That doesn't work. If the default value is declared for the function
> rather than in the converter definition, it overwrites the C default:
>
> /*[clinic input]
> time.gmtime
>
> seconds: clinic_time_t=None
> /
> */
>
> gives:
>
> static PyObject *
> time_gmtime(PyModuleDef *module, PyObject *args)
> {
> PyObject *return_value = NULL;
> clinic_time_t seconds = Py_None;
>
> if (!PyArg_ParseTuple(args,
> "|O&:gmtime",
> parse_clinic_time_t, &seconds))
> goto exit;
> return_value = time_gmtime_impl(module, seconds);
>
> so the default for seconds is now Py_None instead of
> DEFAULT_CLINIC_TIME_T'.
>
> Best,
> Nikolaus
>
> --
> Encrypted emails preferred.
> PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6 02CF A9AD B7F8 AE4E 425C
>
> »Time flies like an arrow, fruit flies like a Banana.«
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/larry%40hastings.org
More information about the Python-Dev
mailing list