parse docstrings

This commit is contained in:
Scott Richmond 2024-06-04 12:13:40 -04:00
parent 943e96203e
commit 3081af60b2

View File

@ -725,7 +725,7 @@
(accept-many parser :newline)
(def rhs (nonbinding parser))
(print "parsed rhs")
[[lhs guard rhs]]
{:clauses [[lhs guard rhs]]}
)
([err] err)
)
@ -757,13 +757,18 @@
(def origin (current parser))
(expect parser :lbrace) (advance parser)
(accept-many parser ;terminators)
(def doc (when (= :string ((current parser) :type))
(def docstring ((current parser) :literal))
(advance parser)
(accept-many parser ;terminators)
docstring))
(def data @[])
(while (not (check parser :rbrace))
(if (check parser :eof)
(error {:type :error :token origin :data data :msg "unclosed brace"}))
(array/push data (capture fn-clause parser)))
(advance parser)
data)
{:clauses data :doc doc})
(defn- lambda [parser]
(def origin (current parser))
@ -783,11 +788,11 @@
(def name (-> parser word-only (get :data)))
(print "function name: ")
(pp name)
(def data (case (-> parser current type)
(def {:clauses data :doc doc} (case (-> parser current type)
:lbrace (fn-clauses parser)
:lparen (fn-simple parser)
:nothing))
@{:type :fn :name name :data data :token origin})
{:clauses :nothing}))
@{:type :fn :name name :data data :token origin :doc doc})
([err] err)))
### compoound forms
@ -1130,9 +1135,9 @@
(do
# (comment
(def source `
fn foo
fn bar
fn () -> :baz
fn foo {
() -> :clause
}
`)
(def scanned (s/scan source))
(print "\n***NEW PARSE***\n")
@ -1148,6 +1153,7 @@ fn () -> :baz
# FIXME:
# TODO:
# DECIDE:
# - when to use a flat try/catch format, and when to use capture/expect-ret to get values instead of errors