[gnumeric] Parser: more handling of x^y^z.



commit 31eeb93642f33e0316d83da733047b69b03b865e
Author: Morten Welinder <terra gnome org>
Date:   Wed Jun 10 14:21:58 2009 -0400

    Parser: more handling of x^y^z.
---
 ChangeLog    |    2 ++
 src/expr.c   |    2 +-
 src/parser.y |   10 +++++++++-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 522001b..90b70f1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
 	* src/parser.y: Change x^y^z into x^(y^z) to indicate how we
 	parsed it.
 
+	* src/expr.c (do_expr_as_string): Ditto.
+
 2009-06-09  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* src/ranges.c (range_clip_to_finite): adjust limits and add 
diff --git a/src/expr.c b/src/expr.c
index 603cd09..4da4c5e 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -1577,7 +1577,7 @@ do_expr_as_string (GnmExpr const *expr, int paren_level,
 		{ "-",  3, 1, 0, 0 },
 		{ "*",  4, 1, 0, 0 },
 		{ "/",  4, 1, 0, 0 },
-		{ "^",  5, 0, 1, 0 },
+		{ "^",  5, 0, 0, 0 }, /* Note: neither left nor right */
 		{ "&",  2, 1, 0, 0 },
 		{ "",   0, 0, 0, 0 }, /* Funcall  */
 		{ "",   0, 0, 0, 0 }, /* Name     */
diff --git a/src/parser.y b/src/parser.y
index c311c74..2c4b491 100644
--- a/src/parser.y
+++ b/src/parser.y
@@ -610,7 +610,15 @@ exp:	  CONSTANT 	{ $$ = $1; }
 		if (is_signed (l)) {
 			/* See bug 115941 */
 			l = build_unary_op (GNM_EXPR_OP_PAREN, l);
-		} else if (GNM_EXPR_GET_OPER (r) == GNM_EXPR_OP_EXP) {
+		}
+
+		if (GNM_EXPR_GET_OPER (l) == GNM_EXPR_OP_EXP) {
+			/* Add ()s to x^y^z */
+			/* I don't think this can currently happen.  */
+			l = build_unary_op (GNM_EXPR_OP_PAREN, l);
+		}
+
+		if (GNM_EXPR_GET_OPER (r) == GNM_EXPR_OP_EXP) {
 			/* Add ()s to x^y^z */
 			r = build_unary_op (GNM_EXPR_OP_PAREN, r);
 		}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]