summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2010-02-24 17:12:09 -0800
committerJosh Stone <jistone@redhat.com>2010-02-24 17:12:09 -0800
commit1cb79a7245a86f563a8e54a0b47937f253636bde (patch)
tree95c4c65fd54f54e71c521705af07764e965df6d7
parenta7e58d4c674003f192c4c8a834e80a3c23f9ec2e (diff)
downloadsystemtap-steved-1cb79a7245a86f563a8e54a0b47937f253636bde.tar.gz
systemtap-steved-1cb79a7245a86f563a8e54a0b47937f253636bde.tar.xz
systemtap-steved-1cb79a7245a86f563a8e54a0b47937f253636bde.zip
Permit chained unary operators
The operand of a unary may be yet another unary. This is useful for things like boolean normalization, !!x. * parse.cxx (parser::parse_unary): Recurse the operand. * testsuite/parseok/eleven.stp: Add chained unary operators.
-rw-r--r--parse.cxx2
-rwxr-xr-xtestsuite/parseok/eleven.stp8
2 files changed, 8 insertions, 2 deletions
diff --git a/parse.cxx b/parse.cxx
index b2daa178..9d32a8cb 100644
--- a/parse.cxx
+++ b/parse.cxx
@@ -2289,7 +2289,7 @@ parser::parse_unary ()
e->op = t->content;
e->tok = t;
next ();
- e->operand = parse_crement ();
+ e->operand = parse_unary ();
return e;
}
else
diff --git a/testsuite/parseok/eleven.stp b/testsuite/parseok/eleven.stp
index 737a2e14..5ee0f921 100755
--- a/testsuite/parseok/eleven.stp
+++ b/testsuite/parseok/eleven.stp
@@ -53,5 +53,11 @@ probe two
- a
# grammar glitch
- a % b ; -- a ; ++ a ; a ++ ; a --
+ a % b ; -- a ; ++ a ; a ++ ; a -- ;
+
+ # chained unary operators
+ + + a ; + - a ; + ! a ; + ~ a ;
+ - + a ; - - a ; - ! a ; - ~ a ;
+ ! + a ; ! - a ; ! ! a ; ! ~ a ;
+ ~ + a ; ~ - a ; ~ ! a ; ~ ~ a ;
}