diff options
author | David Sharp <dhsharp@google.com> | 2011-03-09 18:58:56 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2011-03-09 20:25:10 -0500 |
commit | 398c59809949b518e28f307d86aea02970170f62 (patch) | |
tree | abd692151073ad3131d588e9bfa51f90c8e3f7ba | |
parent | 8037d12a9132dcdc42430b1d94548e1890e31553 (diff) |
parse-events: Support additional operators: '!', '~', and '!='
Add support for the unary operators '!' and '~', and support '!=' so that
it is differentiated from '!'.
Signed-off-by: David Sharp <dhsharp@google.com>
LKML-Reference: <1299715137-22768-2-git-send-email-dhsharp@google.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | parse-events.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/parse-events.c b/parse-events.c index bfb7ff5..507621b 100644 --- a/parse-events.c +++ b/parse-events.c | |||
@@ -1564,6 +1564,9 @@ static int get_op_prio(char *op) | |||
1564 | { | 1564 | { |
1565 | if (!op[1]) { | 1565 | if (!op[1]) { |
1566 | switch (op[0]) { | 1566 | switch (op[0]) { |
1567 | case '~': | ||
1568 | case '!': | ||
1569 | return 4; | ||
1567 | case '*': | 1570 | case '*': |
1568 | case '/': | 1571 | case '/': |
1569 | case '%': | 1572 | case '%': |
@@ -1642,6 +1645,7 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok) | |||
1642 | goto out_free; | 1645 | goto out_free; |
1643 | } | 1646 | } |
1644 | switch (token[0]) { | 1647 | switch (token[0]) { |
1648 | case '~': | ||
1645 | case '!': | 1649 | case '!': |
1646 | case '+': | 1650 | case '+': |
1647 | case '-': | 1651 | case '-': |
@@ -2981,6 +2985,21 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg | |||
2981 | left = eval_num_arg(data, size, event, arg->op.left); | 2985 | left = eval_num_arg(data, size, event, arg->op.left); |
2982 | right = eval_num_arg(data, size, event, arg->op.right); | 2986 | right = eval_num_arg(data, size, event, arg->op.right); |
2983 | switch (arg->op.op[0]) { | 2987 | switch (arg->op.op[0]) { |
2988 | case '!': | ||
2989 | switch (arg->op.op[1]) { | ||
2990 | case 0: | ||
2991 | val = !right; | ||
2992 | break; | ||
2993 | case '=': | ||
2994 | val = left != right; | ||
2995 | break; | ||
2996 | default: | ||
2997 | die("unknown op '%s'", arg->op.op); | ||
2998 | } | ||
2999 | break; | ||
3000 | case '~': | ||
3001 | val = ~right; | ||
3002 | break; | ||
2984 | case '|': | 3003 | case '|': |
2985 | if (arg->op.op[1]) | 3004 | if (arg->op.op[1]) |
2986 | val = left || right; | 3005 | val = left || right; |