reader: slight adjustments based on change INT -> SMI
This commit is contained in:
15
src/reader.c
15
src/reader.c
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user