From 9d645e3b4bdbf8307fcb3b96a1ccfed1cbd94326 Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Fri, 20 May 2022 17:35:16 -0400 Subject: [PATCH] Add list splats --- src/ludus/parser.clj | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ludus/parser.clj b/src/ludus/parser.clj index f691e97..eadcacb 100644 --- a/src/ludus/parser.clj +++ b/src/ludus/parser.clj @@ -225,6 +225,14 @@ ::token/eof (panic (assoc origin ::errors (::errors parser)) "Unterminated list" ::token/eof) + ::token/splat + (let [splatted (parse-expr (advance parser)) + splat-type (node-type splatted)] + (if (contains? #{::ast/word ::ast/synthetic} splat-type) + (recur splatted members {::ast/type ::ast/splat + :token curr :expr (::ast splatted)}) + (panic parser "You may only splat words and synthetic expressions"))) + (let [parsed (parse-expr parser #{::token/comma ::token/newline ::token/rbracket})] (recur parsed members (::ast parsed))))))) @@ -1018,11 +1026,9 @@ (parser) (parse-script))) -(comment +(do (def pp pp/pprint) - (def source " - - let #{foo, :bar 23} = #{:foo 42, :bar 23} + (def source "[...:c] ") (def lexed (scanner/scan source))