diff options
author | Duncaen <mail@duncano.de> | 2017-10-26 21:50:29 +0200 |
---|---|---|
committer | Duncan Overbruck <administrator@duncano.de> | 2017-10-26 23:14:23 +0200 |
commit | 4e7a5c5ab6dcdc18a83ac388cb9c44146c035f8e (patch) | |
tree | cead14102255101ac125dcd80083eef103a6b58c /mpick.c | |
parent | 6a074d74511f9fd8fd7ccd4e21ea053f0bceecae (diff) | |
download | mblaze-4e7a5c5ab6dcdc18a83ac388cb9c44146c035f8e.tar.gz mblaze-4e7a5c5ab6dcdc18a83ac388cb9c44146c035f8e.tar.xz mblaze-4e7a5c5ab6dcdc18a83ac388cb9c44146c035f8e.zip |
mpick: add negations
Diffstat (limited to 'mpick.c')
-rw-r--r-- | mpick.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/mpick.c b/mpick.c index e99f9d5..1bbc44e 100644 --- a/mpick.c +++ b/mpick.c @@ -329,10 +329,12 @@ parse_strcmp() { enum prop prop; enum op op; + int negate; char *h; h = 0; prop = 0; + negate = 0; if (token("from")) prop = PROP_FROM; @@ -357,6 +359,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("!=~")) + 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); @@ -400,6 +414,12 @@ parse_strcmp() exit(2); } + if (negate) { + struct expr *not = mkexpr(EXPR_NOT); + not->a.expr = e; + return not; + } + return e; } |