From 7e021f95ea19b01f52d177d23031b5ab9df09c16 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Mon, 21 Aug 2017 12:52:45 +0200 Subject: add strop negations --- lr.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'lr.c') diff --git a/lr.c b/lr.c index a92dcb8..00b6454 100644 --- a/lr.c +++ b/lr.c @@ -604,6 +604,7 @@ parse_strcmp() { enum prop prop; enum op op; + int negate = 0; if (token("fstype")) prop = PROP_FSTYPE; @@ -636,6 +637,18 @@ parse_strcmp() op = EXPR_STREQ; else if (token("=")) op = EXPR_STREQ; + else if (token("!~~~")) + negate = 1, op = EXPR_GLOBI; + else if (token("!~~")) + negate = 1, op = EXPR_GLOB; + else if (token("!=~~")) + negate = 1, op = EXPR_REGEXI; + else if (token("!=~") || token("!~")) + negate = 1, op = EXPR_REGEX; + else if (token("!===")) + negate = 1, op = EXPR_STREQI; + else if (token("!==") || token("!=")) + negate = 1, op = EXPR_STREQ; else parse_error("invalid string operator at '%.15s'", pos); @@ -661,6 +674,12 @@ parse_strcmp() exit(2); } + if (negate) { + struct expr *not = mkexpr(EXPR_NOT); + not->a.expr = e; + return not; + } + return e; } -- cgit 1.4.1