reader: slight adjustments based on change INT -> SMI

This commit is contained in:
2026-03-05 20:13:18 +00:00
parent e629b9919e
commit 1998954b56

View File

@@ -20,7 +20,6 @@ const char *read_err_to_cstr(read_err_t err)
return "EOF"; return "EOF";
case READ_ERR_UNKNOWN_CHAR: case READ_ERR_UNKNOWN_CHAR:
return "UNKNOWN_CHAR"; return "UNKNOWN_CHAR";
break;
case READ_ERR_EXPECTED_CLOSED_BRACE: case READ_ERR_EXPECTED_CLOSED_BRACE:
return "EXPECTED_CLOSED_BRACE"; return "EXPECTED_CLOSED_BRACE";
case READ_ERR_EXPECTED_CLOSED_SQUARE_BRACKET: case READ_ERR_EXPECTED_CLOSED_SQUARE_BRACKET:
@@ -37,7 +36,7 @@ const char *read_err_to_cstr(read_err_t err)
// Accepted characters for symbols. // Accepted characters for symbols.
static const char *SYMBOL_CHARS = static const char *SYMBOL_CHARS =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!$%&*+,-./" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!$%&*+,-./"
":<=>?@\\^_`{|}~0123456789"; ":<=>?@\\^_{|}~0123456789";
// Little predicate using SYMBOL_CHARS // Little predicate using SYMBOL_CHARS
bool is_sym(char c) bool is_sym(char c)
@@ -76,9 +75,9 @@ read_err_t read_int(sys_t *sys, stream_t *stream, lisp_t **ret)
return read_sym(sys, stream, ret); return read_sym(sys, stream, ret);
} }
if (digits_sv.size > 19) if (digits_sv.size >= 18)
{ {
TODO("alisp doesn't support big integers (bigger than 63 bits) yet"); TODO("alisp doesn't support big integers (bigger than 56 bits) yet");
} }
i64 n = 0; i64 n = 0;
@@ -92,7 +91,7 @@ read_err_t read_int(sys_t *sys, stream_t *stream, lisp_t **ret)
// => i > (INT_MAX - digit) / 10 // => i > (INT_MAX - digit) / 10
if (n > (INT_MAX - digit) / 10) if (n > (INT_MAX - digit) / 10)
{ {
TODO("alisp doesn't support big integers (bigger than 63 bits) yet"); TODO("alisp doesn't support big integers (bigger than 56 bits) yet");
} }
n *= 10; n *= 10;
@@ -111,9 +110,7 @@ read_err_t read_negative(sys_t *sys, stream_t *stream, lisp_t **ret)
read_err_t err = read_int(sys, stream, ret); read_err_t err = read_int(sys, stream, ret);
if (err) if (err)
return err; return err;
i64 n = as_smi(*ret); *ret = make_int(as_smi(*ret) * -1);
n *= -1;
*ret = make_int(n);
return READ_ERR_OK; return READ_ERR_OK;
} }
else if (is_sym(c) || isspace(c)) else if (is_sym(c) || isspace(c))
@@ -122,7 +119,9 @@ read_err_t read_negative(sys_t *sys, stream_t *stream, lisp_t **ret)
return read_sym(sys, stream, ret); return read_sym(sys, stream, ret);
} }
else else
{
return READ_ERR_UNKNOWN_CHAR; return READ_ERR_UNKNOWN_CHAR;
}
} }
read_err_t read_list(sys_t *sys, stream_t *stream, lisp_t **ret) read_err_t read_list(sys_t *sys, stream_t *stream, lisp_t **ret)