From 2dc0c6080e43b250d0cb54a2a83996797ce41da4 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Wed, 11 Feb 2026 07:58:56 +0000 Subject: [PATCH] reader: deal with quotes This is currently implemented as a parse-time primitive. Scheme doesn't seem to have reader macros (which is INSANE) but Common Lisp does. We'll need to add a TODO about this. --- src/reader.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/reader.c b/src/reader.c index 148c7b3..62bbc82 100644 --- a/src/reader.c +++ b/src/reader.c @@ -102,6 +102,18 @@ read_err_t read_vec(sys_t *, stream_t *, lisp_t **) TODO("read_vec: not implemented"); } +read_err_t read_quote(sys_t *sys, stream_t *stream, lisp_t **ret) +{ + lisp_t *to_quote = NIL; + stream_next(stream); + read_err_t err = read(sys, stream, &to_quote); + if (err) + return err; + *ret = cons(sys, to_quote, NIL); + *ret = cons(sys, intern(sys, SV_AUTO("quote")), *ret); + return READ_ERR_OK; +} + read_err_t read_all(sys_t *sys, stream_t *stream, vec_t *out) { while (!stream_eoc(stream)) @@ -128,6 +140,8 @@ read_err_t read(sys_t *sys, stream_t *stream, lisp_t **ret) return read_int(sys, stream, ret); else if (is_sym(c)) return read_sym(sys, stream, ret); + else if (c == '\'') + return read_quote(sys, stream, ret); else if (c == '(') return read_list(sys, stream, ret); else if (c == '[')