diff options
-rw-r--r-- | e-util/ChangeLog | 4 | ||||
-rw-r--r-- | e-util/e-sexp.c | 26 |
2 files changed, 23 insertions, 7 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog index 375de2f381..d9973f512b 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,7 @@ +2002-04-11 Jeffrey Stedfast <fejj@ximian.com> + + * e-sexp.c (parse_value): Handle parsing negative integers. + 2002-03-29 JP Rosevear <jpr@ximian.com> * e-dialog-utils.c (e_file_dialog_save): open a file selection diff --git a/e-util/e-sexp.c b/e-util/e-sexp.c index 3a2a37d5fb..9dce281465 100644 --- a/e-util/e-sexp.c +++ b/e-util/e-sexp.c @@ -822,13 +822,13 @@ parse_values(ESExp *f, int *len) static struct _ESExpTerm * parse_value(ESExp *f) { - int token; + int token, negative = FALSE; struct _ESExpTerm *t = NULL; GScanner *gs = f->scanner; struct _ESExpSymbol *s; - + p(printf("parsing value\n")); - + token = g_scanner_get_next_token(gs); switch(token) { case G_TOKEN_LEFT_PAREN: @@ -839,29 +839,41 @@ parse_value(ESExp *f) t = parse_term_new(f, ESEXP_TERM_STRING); t->value.string = g_strdup(g_scanner_cur_value(gs).v_string); break; + case '-': + p(printf ("got negative int?\n")); + token = g_scanner_get_next_token (gs); + if (token != G_TOKEN_INT) { + e_sexp_fatal_error (f, "Invalid format for a integer value"); + return NULL; + } + + negative = TRUE; + /* fall through... */ case G_TOKEN_INT: t = parse_term_new(f, ESEXP_TERM_INT); t->value.number = g_scanner_cur_value(gs).v_int; + if (negative) + t->value.number = -t->value.number; p(printf("got int\n")); break; case '#': { char *str; - + p(printf("got bool?\n")); token = g_scanner_get_next_token(gs); if (token != G_TOKEN_IDENTIFIER) { e_sexp_fatal_error (f, "Invalid format for a boolean value"); return NULL; } - + str = g_scanner_cur_value (gs).v_identifier; - + g_assert (str != NULL); if (!(strlen (str) == 1 && (str[0] == 't' || str[0] == 'f'))) { e_sexp_fatal_error (f, "Invalid format for a boolean value"); return NULL; } - + t = parse_term_new(f, ESEXP_TERM_BOOL); t->value.bool = (str[0] == 't'); break; } |