Add happy path for anon simple fns
This commit is contained in:
parent
3fde297e07
commit
0f64307ba8
|
@ -500,6 +500,27 @@
|
||||||
(panic parser "Expected with after match expression")
|
(panic parser "Expected with after match expression")
|
||||||
)))
|
)))
|
||||||
|
|
||||||
|
(defn- parse-fn [parser]
|
||||||
|
(let [first (advance parser)]
|
||||||
|
(case (::token/type (current first))
|
||||||
|
::token/lparen
|
||||||
|
(let [pattern (parse-tuple-pattern first)
|
||||||
|
arrow (expect* ::token/rarrow "Expected arrow after pattern" pattern)]
|
||||||
|
(if (:success arrow)
|
||||||
|
(let [body (parse-expr (:parser arrow))]
|
||||||
|
(assoc body ::ast {::ast/type ::ast/fn
|
||||||
|
:clauses [{::ast/type ::ast/clause
|
||||||
|
:pattern (::ast pattern)
|
||||||
|
:body (::ast body)}]}))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
::token/word ()
|
||||||
|
|
||||||
|
(panic parser "Expected name or clause after fn")
|
||||||
|
)))
|
||||||
|
|
||||||
(defn- parse-expr
|
(defn- parse-expr
|
||||||
([parser] (parse-expr parser sync-on))
|
([parser] (parse-expr parser sync-on))
|
||||||
([parser sync-on]
|
([parser sync-on]
|
||||||
|
@ -542,7 +563,11 @@
|
||||||
|
|
||||||
::token/match (parse-match parser)
|
::token/match (parse-match parser)
|
||||||
|
|
||||||
::token/comment (advance parser)
|
::token/fn (parse-fn parser)
|
||||||
|
|
||||||
|
;; TODO: improve handling of comments?
|
||||||
|
;; Scanner now just skips comments
|
||||||
|
;; ::token/comment (advance parser)
|
||||||
|
|
||||||
::token/error (panic parser (:message token) sync-on)
|
::token/error (panic parser (:message token) sync-on)
|
||||||
|
|
||||||
|
@ -565,7 +590,7 @@
|
||||||
|
|
||||||
(do
|
(do
|
||||||
(def pp pp/pprint)
|
(def pp pp/pprint)
|
||||||
(def source "match foo with _ -> foo
|
(def source "fn () -> :foo
|
||||||
|
|
||||||
")
|
")
|
||||||
(def lexed (scanner/scan source))
|
(def lexed (scanner/scan source))
|
||||||
|
@ -579,7 +604,7 @@
|
||||||
(println "*** *** NEW PARSE *** ***")
|
(println "*** *** NEW PARSE *** ***")
|
||||||
|
|
||||||
(-> p
|
(-> p
|
||||||
(parse-script)
|
(parse-fn)
|
||||||
(::ast)
|
(::ast)
|
||||||
(pp)
|
(pp)
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user