mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
Differentiate exact/inexact numbers
This commit is contained in:
parent
ab293fccb9
commit
e01c32aac1
2 changed files with 8 additions and 5 deletions
8
read.scm
8
read.scm
|
@ -745,9 +745,13 @@
|
|||
(loop (cons t lis) (parse2 fp))))))
|
||||
((vector? token)
|
||||
(cond
|
||||
((= (vector-length token) 2) ;; Special case, number
|
||||
((= (vector-length token) 2) ;; Special case: number
|
||||
(string->number (vector-ref token 0) (vector-ref token 1)))
|
||||
((= (vector-length token) 1) ;; Special case, number
|
||||
((= (vector-length token) 3) ;; Special case: exact/inexact number
|
||||
(if (vector-ref token 2)
|
||||
(exact (string->number (vector-ref token 0) (vector-ref token 1)))
|
||||
(inexact (string->number (vector-ref token 0) (vector-ref token 1)))))
|
||||
((= (vector-length token) 1) ;; Special case: error
|
||||
(error (vector-ref token 0)))
|
||||
(else
|
||||
(let loop ((lis '())
|
||||
|
|
|
@ -5936,11 +5936,11 @@ void _read_return_number(void *data, port_type *p, int base, int exact)
|
|||
p->tok_end = 0; // Reset for next atom
|
||||
make_empty_vector(vec);
|
||||
make_string(str, p->tok_buf);
|
||||
vec.num_elements = 2;
|
||||
vec.num_elements = 3;
|
||||
vec.elements = (object *) alloca(sizeof(object) * vec.num_elements);
|
||||
vec.elements[0] = &str;
|
||||
vec.elements[1] = obj_int2obj(base);
|
||||
// TODO: need to pass exact or inexact
|
||||
vec.elements[2] = exact ? boolean_t : boolean_f;
|
||||
return_thread_runnable(data, &vec);
|
||||
}
|
||||
|
||||
|
@ -6090,7 +6090,6 @@ void Cyc_io_read_token(void *data, object cont, object port)
|
|||
}
|
||||
return_thread_runnable(data, boolean_f);
|
||||
// TODO: character
|
||||
// TODO: numbers
|
||||
} else if (c == 'e') {
|
||||
_read_number(data, p, 10, 1);
|
||||
} else if (c == 'i') {
|
||||
|
|
Loading…
Add table
Reference in a new issue