[gnumeric] Eval: create new eval flag for forcing array context.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Eval: create new eval flag for forcing array context.
- Date: Sun, 8 Jan 2012 18:43:01 +0000 (UTC)
commit 7a970a688a9f3c83d0840c960de37e7592527e85
Author: Morten Welinder <terra gnome org>
Date: Sun Jan 8 13:42:30 2012 -0500
Eval: create new eval flag for forcing array context.
ChangeLog | 8 ++++++++
src/expr.c | 12 ++++++++++++
src/gnumeric.h | 3 ++-
src/widgets/ChangeLog | 5 +++++
src/widgets/gnm-validation-combo-view.c | 7 +++----
5 files changed, 30 insertions(+), 5 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index b670ec1..816ad33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-01-08 Morten Welinder <terra gnome org>
+
+ * src/expr.c (gnm_expr_top_eval): When we see
+ GNM_EXPR_EVAL_ARRAY_CONTEXT with no array position, fake it.
+
+ * src/gnumeric.h (GnmExprEvalFlags): Introduce new
+ GNM_EXPR_EVAL_ARRAY_CONTEXT flags.
+
2012-01-08 Jean Brefort <jean brefort normalesup org>
* src/graph.c (gnm_go_data_vector_load_len): fix a wrong use of
diff --git a/src/expr.c b/src/expr.c
index f402b5a..29696f9 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -3032,9 +3032,21 @@ gnm_expr_top_eval (GnmExprTop const *texpr,
GnmExprEvalFlags flags)
{
GnmValue *res;
+ GnmEvalPos ep;
+ GnmExprArrayCorner array;
+
g_return_val_if_fail (IS_GNM_EXPR_TOP (texpr), NULL);
gnm_app_recalc_start ();
+ if ((flags & GNM_EXPR_EVAL_ARRAY_CONTEXT) && !pos->array) {
+ array.oper = GNM_EXPR_OP_ARRAY_CORNER;
+ array.cols = array.rows = 1;
+ array.value = NULL;
+ array.expr = texpr->expr;
+ ep = *pos;
+ ep.array = &array;
+ pos = &ep;
+ }
res = gnm_expr_eval (texpr->expr, pos, flags);
gnm_app_recalc_finish ();
diff --git a/src/gnumeric.h b/src/gnumeric.h
index c060097..86b4c46 100644
--- a/src/gnumeric.h
+++ b/src/gnumeric.h
@@ -173,7 +173,8 @@ typedef enum {
GNM_EXPR_EVAL_SCALAR_NON_EMPTY = 0,
GNM_EXPR_EVAL_PERMIT_NON_SCALAR = 0x1,
GNM_EXPR_EVAL_PERMIT_EMPTY = 0x2,
- GNM_EXPR_EVAL_WANT_REF = 0x4
+ GNM_EXPR_EVAL_WANT_REF = 0x4,
+ GNM_EXPR_EVAL_ARRAY_CONTEXT = 0x8
} GnmExprEvalFlags;
typedef struct _XmlParseContext XmlParseContext;
diff --git a/src/widgets/ChangeLog b/src/widgets/ChangeLog
index af8ea86..7069bde 100644
--- a/src/widgets/ChangeLog
+++ b/src/widgets/ChangeLog
@@ -1,3 +1,8 @@
+2012-01-08 Morten Welinder <terra gnome org>
+
+ * gnm-validation-combo-view.c (vcombo_create_list): Use new
+ GNM_EXPR_EVAL_ARRAY_CONTEXT flag.
+
2011-12-30 Morten Welinder <terra gnome org>
* gnm-format-sel.c (cb_generate_preview): Get the pango context
diff --git a/src/widgets/gnm-validation-combo-view.c b/src/widgets/gnm-validation-combo-view.c
index bcb1aed..ba06c96 100644
--- a/src/widgets/gnm-validation-combo-view.c
+++ b/src/widgets/gnm-validation-combo-view.c
@@ -102,7 +102,6 @@ vcombo_create_list (SheetObject *so,
GnmValue *v;
GnmValue const *cur_val;
GnmValidation const *val = vcombo->validation;
- GnmExprArrayCorner array = { GNM_EXPR_OP_ARRAY_CORNER, 1, 1, NULL, NULL };
SheetView const *sv = vcombo->parent.sv;
g_return_val_if_fail (val != NULL, NULL);
@@ -111,10 +110,10 @@ vcombo_create_list (SheetObject *so,
g_return_val_if_fail (sv != NULL, NULL);
eval_pos_init_editpos (&ep, sv);
- /* Force into 'array' mode by supplying a fake corner */
- ep.array = &array;
v = gnm_expr_top_eval (val->texpr[0], &ep,
- GNM_EXPR_EVAL_PERMIT_NON_SCALAR | GNM_EXPR_EVAL_PERMIT_EMPTY);
+ GNM_EXPR_EVAL_PERMIT_NON_SCALAR |
+ GNM_EXPR_EVAL_PERMIT_EMPTY |
+ GNM_EXPR_EVAL_ARRAY_CONTEXT);
if (NULL == v)
return NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]