aboutsummaryrefslogtreecommitdiff
path: root/src/parser.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-06-21 00:35:00 +0800
committerMistivia <i@mistivia.com>2025-06-21 00:35:00 +0800
commit0afe446fa6e893448da949b1b6882c87b3b2701c (patch)
treed1c73fb9d7e086112d181ab63908ec88146365ed /src/parser.c
parentbf0eb7e84c1f10e30fe82ec5f9d4c544a5b82fd2 (diff)
length macro; utf-8 symbol
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/parser.c b/src/parser.c
index cc41d76..c692794 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -231,8 +231,8 @@ ParseResult parse_list(Parser *parser) {
ret = parse_sexp(parser);
if (ParseResult_is_err(ret)) goto end;
SExpRefVector_push_back(&elems, ret.val);
- ret = expect_space_or_end(parser);
- if (ParseResult_is_err(ret)) goto end;
+ // ret = expect_space_or_end(parser);
+ // if (ParseResult_is_err(ret)) goto end;
skip_spaces(parser);
}
// dot
@@ -256,6 +256,9 @@ static char *read_token(Parser *parser) {
while (!isspace(Parser_peek(parser))
&& Parser_peek(parser) != EOF
&& Parser_peek(parser) != ')'
+ && Parser_peek(parser) != '('
+ && Parser_peek(parser) != '"'
+ && (i == 0 || Parser_peek(parser) != '#')
&& i < BUFSIZE - 1) {
parser->token_buf[i] = Parser_getchar(parser);
i++;
@@ -281,6 +284,7 @@ static bool is_symbol_init(char c) {
if (c == '^') return true;
if (c == '_') return true;
if (c == '~') return true;
+ if (c < 0) return true;
return false;
}