[gcalctool/gcalctool-new-parser] Get assignments working
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gcalctool/gcalctool-new-parser] Get assignments working
- Date: Sun, 16 Oct 2011 07:53:43 +0000 (UTC)
commit b3c7a82eab68808600ae821fc8cf5316dcd4b79c
Author: Robert Ancell <robert ancell canonical com>
Date: Sun Oct 16 18:53:37 2011 +1100
Get assignments working
src/mp-equation.c | 21 +++++++++++++++++++++
1 files changed, 21 insertions(+), 0 deletions(-)
---
diff --git a/src/mp-equation.c b/src/mp-equation.c
index 32000c2..e599f6f 100644
--- a/src/mp-equation.c
+++ b/src/mp-equation.c
@@ -287,6 +287,7 @@ typedef enum
TOKEN_SYMBOL,
TOKEN_FUNCTION,
TOKEN_VARIABLE,
+ TOKEN_ASSIGNMENT,
TOKEN_EXPRESSION
} TokenType;
@@ -437,6 +438,8 @@ parse(MPEquationOptions *options, const gchar *expression, GList **tokens)
current_token = TOKEN_RIGHT_FRACTION;
else if (c == ' ')
refeed = FALSE;
+ else if (c == '=')
+ current_token = TOKEN_ASSIGNMENT;
else if (c == '\0')
return PARSER_ERR_NONE;
else
@@ -1302,6 +1305,8 @@ mp_equation_parse(const char *expression, MPEquationOptions *options, MPNumber *
{
GList *tokens;
MPErrorCode error;
+ Token *t0, *t1 = NULL;
+ gchar *variable_name;
if (!(expression && result) || strlen(expression) == 0)
return PARSER_ERR_INVALID;
@@ -1312,6 +1317,20 @@ mp_equation_parse(const char *expression, MPEquationOptions *options, MPNumber *
if (error)
return error;
+ t0 = tokens->data;
+ if (tokens->next)
+ t1 = tokens->next->data;
+ if (t0->type == TOKEN_SYMBOL && t1 && t1->type == TOKEN_ASSIGNMENT)
+ {
+ variable_name = token_get_text (t0);
+ g_free (t0);
+ g_free (t1);
+ tokens = tokens->next->next;
+ tokens->prev = NULL;
+ }
+ else
+ variable_name = g_strdup ("ans");
+
error = solve_conversion(options, tokens, g_list_last(tokens), result);
if (!error)
return error;
@@ -1325,6 +1344,8 @@ mp_equation_parse(const char *expression, MPEquationOptions *options, MPNumber *
if (mp_get_error())
return PARSER_ERR_MP;
+
+ set_variable(options, variable_name, result);
return PARSER_ERR_NONE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]