From: Gerhard Sittig Date: Sun, 5 Mar 2017 17:31:18 +0000 (+0100) Subject: decoder: Accept more forms of "unconditional wait()" (None, no args) X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=6e19f3257d896cfa8c1afffbdbf58a88fa3b9327;p=libsigrokdecode.git decoder: Accept more forms of "unconditional wait()" (None, no args) The Decoder.wait() method expects a list of dicts, or as a special form a single dict, to specify the conditions to wait for. An empty dict or an empty list mean "unconditional wait", requesting the very next sample. Accept None as well as no arguments at all in Decoder.wait() calls. This shall better reflect the intent and slightly unobfuscate PD code, as well as avoid creation of potentially expensive Python objects at the call site. --- diff --git a/type_decoder.c b/type_decoder.c index d7b690f..231a893 100644 --- a/type_decoder.c +++ b/type_decoder.c @@ -529,14 +529,22 @@ static int set_new_condition_list(PyObject *self, PyObject *args) return SRD_ERR; } - /* Parse the argument of self.wait() into 'py_conds'. */ - if (!PyArg_ParseTuple(args, "O", &py_conds)) { + /* + * Parse the argument of self.wait() into 'py_conds', and check + * the data type. The argument is optional, None is assumed in + * its absence. None or an empty dict or an empty list mean that + * there is no condition, and the next available sample shall + * get returned to the caller. + */ + py_conds = Py_None; + if (!PyArg_ParseTuple(args, "|O", &py_conds)) { /* Let Python raise this exception. */ return SRD_ERR; } - - /* Check whether 'py_conds' is a dict or a list. */ - if (PyList_Check(py_conds)) { + if (py_conds == Py_None) { + /* 'py_conds' is None. */ + return 9999; + } else if (PyList_Check(py_conds)) { /* 'py_conds' is a list. */ py_conditionlist = py_conds; num_conditions = PyList_Size(py_conditionlist);