From e5b92ddd589ae5a0c40e1fe831389c434bb8cbc2 Mon Sep 17 00:00:00 2001 From: ooichu <50176726+ooichu@users.noreply.github.com> Date: Fri, 10 Feb 2023 10:52:01 +0300 Subject: [PATCH 1/4] Some fixes for 'read_' Before this change, if the line break was `\r`, comments didn't work correctly. Fixed a bug in `read_`, now you can add a '\' character before 'n', 'r', 't'. --- src/fe.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fe.c b/src/fe.c index b4a1634..bc3f950 100644 --- a/src/fe.c +++ b/src/fe.c @@ -474,7 +474,7 @@ static fe_Object* read_(fe_Context *ctx, fe_ReadFn fn, void *udata) { return NULL; case ';': - while (chr && chr != '\n') { chr = fn(ctx, udata); } + while (chr && chr != '\n' && chr != '\r') { chr = fn(ctx, udata); } return read_(ctx, fn, udata); case ')': @@ -513,7 +513,7 @@ static fe_Object* read_(fe_Context *ctx, fe_ReadFn fn, void *udata) { if (chr == '\0') { fe_error(ctx, "unclosed string"); } if (chr == '\\') { chr = fn(ctx, udata); - if (strchr("nrt", chr)) { chr = strchr("n\nr\rt\t", chr)[1]; } + if (strchr("\\nrt", chr)) { chr = strchr("\\\\n\nr\rt\t", chr)[1]; } } v = buildstring(ctx, v, chr); chr = fn(ctx, udata); From 3e5410c646fd37ae8b7a7fc97fd29e53d6dd079b Mon Sep 17 00:00:00 2001 From: ooichu <50176726+ooichu@users.noreply.github.com> Date: Sat, 18 Feb 2023 18:21:21 +0300 Subject: [PATCH 2/4] Removed unecessary check for `\` in `read_` --- src/fe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fe.c b/src/fe.c index bc3f950..7169f75 100644 --- a/src/fe.c +++ b/src/fe.c @@ -513,7 +513,7 @@ static fe_Object* read_(fe_Context *ctx, fe_ReadFn fn, void *udata) { if (chr == '\0') { fe_error(ctx, "unclosed string"); } if (chr == '\\') { chr = fn(ctx, udata); - if (strchr("\\nrt", chr)) { chr = strchr("\\\\n\nr\rt\t", chr)[1]; } + if (strchr("nrt", chr)) { chr = strchr("n\nr\rt\t", chr)[1]; } } v = buildstring(ctx, v, chr); chr = fn(ctx, udata); From d825bb79bd1c5ce60e3460d54cadf663a177de5f Mon Sep 17 00:00:00 2001 From: ooichu <50176726+ooichu@users.noreply.github.com> Date: Fri, 3 Mar 2023 09:43:15 +0300 Subject: [PATCH 3/4] Made the characters `"` and `'` as delimiters --- src/fe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fe.c b/src/fe.c index 7169f75..0401de9 100644 --- a/src/fe.c +++ b/src/fe.c @@ -454,7 +454,7 @@ void fe_set(fe_Context *ctx, fe_Object *sym, fe_Object *v) { static fe_Object rparen; static fe_Object* read_(fe_Context *ctx, fe_ReadFn fn, void *udata) { - const char *delimiter = " \n\t\r();"; + const char *delimiter = " \n\t\r\"'();"; fe_Object *v, *res, **tail; fe_Number n; int chr, gc; From 7625c1845b77253e72cabf8887c0edd15ef4854b Mon Sep 17 00:00:00 2001 From: ooichu <50176726+ooichu@users.noreply.github.com> Date: Sun, 23 Apr 2023 00:07:49 +0300 Subject: [PATCH 4/4] Fixed incorrect GC stack restore after `fe_open()` --- src/fe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fe.c b/src/fe.c index 0401de9..9fbffbb 100644 --- a/src/fe.c +++ b/src/fe.c @@ -809,11 +809,11 @@ fe_Context* fe_open(void *ptr, int size) { } /* init objects */ + save = fe_savegc(ctx); ctx->t = fe_symbol(ctx, "t"); fe_set(ctx, ctx->t, ctx->t); /* register built in primitives */ - save = fe_savegc(ctx); for (i = 0; i < P_MAX; i++) { fe_Object *v = object(ctx); settype(v, FE_TPRIM);