[Xcb] [PUSHED] [PATCH libxcb 1/1] move symbol lookup of sumof expr to the parser
Christian Linhart
chris at DemoRecorder.com
Sat Mar 11 10:29:44 UTC 2017
I have just pushed this patch.
This patch has had enough time for review, therefore applying review-by-crickets.
Chris
On 2017-01-20 15:16, Christian Linhart wrote:
> replace the complicated symboltable lookup for sumof expr
> by accessing the lenfield of the expr-object.
>
> This requires the corresponding patch for xcb/proto
> which sets the lenfield accordingly.
>
> This should be OK because for official releases we define
> that dependency in the build system.
>
> For getting versions off the HEAD of the git repo, it should
> be obvious that xcb/proto and xcb/libxcb have to be updated together.
>
> I have tested this patch and it generates exactly the same code
> as before.
>
> Tested-by: Christian Linhart <chris at demorecorder.com>
> Signed-off-by: Christian Linhart <chris at demorecorder.com>
> ---
> src/c_client.py | 9 +--------
> 1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/src/c_client.py b/src/c_client.py
> index 043338d..b0eb47c 100644
> --- a/src/c_client.py
> +++ b/src/c_client.py
> @@ -1657,22 +1657,15 @@ def _c_accessor_get_expr(expr, field_mapping):
> elif expr.op == 'enumref':
> enum_name = expr.lenfield_type.name
> constant_name = expr.lenfield_name
> c_name = _n(enum_name + (constant_name,)).upper()
> return c_name
> elif expr.op == 'sumof':
> # locate the referenced list object
> - field = None
> - for f in expr.lenfield_parent.fields:
> - if f.field_name == expr.lenfield_name:
> - field = f
> - break
> -
> - if field is None:
> - raise Exception("list field '%s' referenced by sumof not found" % expr.lenfield_name)
> + field = expr.lenfield
> list_name = field_mapping[field.c_field_name][0]
> c_length_func = "%s(%s)" % (field.c_length_name, list_name)
> c_length_func = _c_accessor_get_expr(field.type.expr, field_mapping)
> # create explicit code for computing the sum.
> # This works for all C-types which can be added to int64_t with +=
> _c_pre.start()
> lengthvar = _c_pre.get_tempvarname()
More information about the Xcb
mailing list