aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sharp <dhsharp@google.com>2011-03-09 18:58:56 -0500
committerSteven Rostedt <rostedt@goodmis.org>2011-03-09 20:25:10 -0500
commit398c59809949b518e28f307d86aea02970170f62 (patch)
treeabd692151073ad3131d588e9bfa51f90c8e3f7ba
parent8037d12a9132dcdc42430b1d94548e1890e31553 (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.c19
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;