[gnumeric] Parser: more handling of x^y^z.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnumeric] Parser: more handling of x^y^z.
- Date: Wed, 10 Jun 2009 14:22:23 -0400 (EDT)
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]