summaryrefslogtreecommitdiffstats
path: root/grammar/utils.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2011-07-03 18:19:32 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2011-07-03 18:19:32 +0200
commit849e4aa8e6437cbfb6efbc7379414fcf517e6db9 (patch)
treee2cfd32148b40f6cad97e8500b3c84a0367bd2e8 /grammar/utils.c
parent719962c1f0f1ee1a6d5b5389417fb68adcde431b (diff)
downloadrsyslog-849e4aa8e6437cbfb6efbc7379414fcf517e6db9.tar.gz
rsyslog-849e4aa8e6437cbfb6efbc7379414fcf517e6db9.tar.bz2
rsyslog-849e4aa8e6437cbfb6efbc7379414fcf517e6db9.zip
grammar: small optimization during expr creation
Diffstat (limited to 'grammar/utils.c')
-rw-r--r--grammar/utils.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/grammar/utils.c b/grammar/utils.c
index c26a856c..bc300aaf 100644
--- a/grammar/utils.c
+++ b/grammar/utils.c
@@ -233,11 +233,20 @@ struct cnfexpr*
cnfexprNew(int nodetype, struct cnfexpr *l, struct cnfexpr *r)
{
struct cnfexpr *expr;
+
+ /* optimize some constructs during parsing */
+ if(nodetype == 'M' && r->nodetype == 'N') {
+ ((struct cnfnumval*)r)->val *= -1;
+ expr = r;
+ goto done;
+ }
+
if((expr = malloc(sizeof(struct cnfexpr))) != NULL) {
expr->nodetype = nodetype;
expr->l = l;
expr->r = r;
}
+done:
return expr;
}