Re: [PATCH v2 7/8] perf expr: Move ID handling to its own function
From: Arnaldo Carvalho de Melo <acme@kernel.org>
Date: 2021-11-11 13:42:41
Also in:
lkml
Em Thu, Nov 11, 2021 at 09:21:20AM +0100, Jiri Olsa escreveu:
On Wed, Nov 10, 2021 at 04:21:08PM -0800, Ian Rogers wrote:quoted
This will facilitate sharing in a follow-on change. Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/util/expr.y | 60 ++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 26 deletions(-)diff --git a/tools/perf/util/expr.y b/tools/perf/util/expr.y index ba6c6dbf30c8..d90addf9b937 100644 --- a/tools/perf/util/expr.y +++ b/tools/perf/util/expr.y@@ -3,6 +3,7 @@ #define YYDEBUG 1 #include <assert.h> #include <math.h> +#include <stdlib.h> #include "util/debug.h" #define IN_EXPR_Y 1 #include "expr.h"@@ -82,6 +83,38 @@ static struct ids union_expr(struct ids ids1, struct ids ids2) return result; } +static struct ids handle_id(struct expr_parse_ctx *ctx, char *id, + bool compute_ids) +{ + struct ids result;nit, missing extra line in here other than that for the whole patchset: Acked-by: Jiri Olsa <redacted>
I'll fix that
thanks, jirkaquoted
+ if (!compute_ids) { + /* + * Compute the event's value from ID. If the ID isn't known then + * it isn't used to compute the formula so set to NAN. + */ + struct expr_id_data *data; + + result.val = NAN; + if (expr__resolve_id(ctx, id, &data) == 0) + result.val = expr_id_data__value(data); + + result.ids = NULL; + free(id); + } else { + /* + * Set the value to BOTTOM to show that any value is possible + * when the event is computed. Create a set of just the ID. + */ + result.val = BOTTOM; + result.ids = ids__new(); + if (!result.ids || ids__insert(result.ids, id)) { + pr_err("Error creating IDs for '%s'", id); + free(id); + } + } + return result; +} + /* * If we're not computing ids or $1 and $3 are constants, compute the new * constant value using OP. Its invariant that there are no ids. If computing@@ -167,32 +200,7 @@ expr: NUMBER $$.val = $1; $$.ids = NULL; } -| ID -{ - if (!compute_ids) { - /* - * Compute the event's value from ID. If the ID isn't known then - * it isn't used to compute the formula so set to NAN. - */ - struct expr_id_data *data; - - $$.val = NAN; - if (expr__resolve_id(ctx, $1, &data) == 0) - $$.val = expr_id_data__value(data); - - $$.ids = NULL; - free($1); - } else { - /* - * Set the value to BOTTOM to show that any value is possible - * when the event is computed. Create a set of just the ID. - */ - $$.val = BOTTOM; - $$.ids = ids__new(); - if (!$$.ids || ids__insert($$.ids, $1)) - YYABORT; - } -} +| ID { $$ = handle_id(ctx, $1, compute_ids); } | expr '|' expr { BINARY_LONG_OP($$, |, $1, $3); } | expr '&' expr { BINARY_LONG_OP($$, &, $1, $3); } | expr '^' expr { BINARY_LONG_OP($$, ^, $1, $3); }-- 2.34.0.rc1.387.gb447b232ab-goog
-- - Arnaldo