fix float parsing
This commit is contained in:
parent
413b9614d2
commit
0647b65712
15
main.c
15
main.c
|
@ -156,11 +156,11 @@ static void tok_num(FILE *input, struct token *tok, int c)
|
|||
|
||||
uns_string_alloc(&gc, &tok->dat, 32);
|
||||
do {
|
||||
if (c == '.' || c == 'e' || c == 'E')
|
||||
if (c == '.' || c == 'e' || c == 'E' || c == '-' || c == '+')
|
||||
is_float = 1;
|
||||
uns_string_append_char(&gc, &tok->dat, c);
|
||||
c = getc(input);
|
||||
} while (tonum(c) >= 0);
|
||||
} while (tonum(c) >= 0 || c == '.' || c == 'e' || c == 'E' || c == '-' || c == '+');
|
||||
ungetc(c, input);
|
||||
|
||||
if (is_float) {
|
||||
|
@ -242,10 +242,12 @@ static void tokenize(FILE *input, struct token *tok)
|
|||
if (c == '.') {
|
||||
c2 = getc(input);
|
||||
/* Flatrate does not have floating point. */
|
||||
if (part_of_ident(c2)) {
|
||||
tok_ident(input, tok, c);
|
||||
} else if (tonum(c2) >= 0) {
|
||||
if (tonum(c2) >= 0) {
|
||||
ungetc(c2, input);
|
||||
tok_num(input, tok, c);
|
||||
} else if (part_of_ident(c2)) {
|
||||
ungetc(c2, input);
|
||||
tok_ident(input, tok, c);
|
||||
} else {
|
||||
tok->typ = T_DOT;
|
||||
}
|
||||
|
@ -281,6 +283,7 @@ static void alloc_of_type(struct uns_ctr *ctr, int typ)
|
|||
case INTEGER: fields = 1; break;
|
||||
case STRING: fields = 1; break;
|
||||
case SYMBOL: fields = 1; break;
|
||||
case FLOAT: fields = 1; break;
|
||||
case EMPTY_LIST: fields = 0; break;
|
||||
case LISP_NULL: fields = 0; break;
|
||||
}
|
||||
|
@ -554,7 +557,7 @@ static void display(struct uns_ctr *ctr)
|
|||
printf("%ld ", l);
|
||||
return;
|
||||
case FLOAT:
|
||||
memcpy(&f, gc.record_get_ptr(ctr->p, 1), sizeof(float));
|
||||
memcpy(&f, gc.record_get_ptr(ctr->p, 1), sizeof(double));
|
||||
printf("%f ", f);
|
||||
return;
|
||||
case STRING:
|
||||
|
|
Reference in New Issue