diff --git a/janet/base.janet b/janet/base.janet index f3868d7..c0e5069 100644 --- a/janet/base.janet +++ b/janet/base.janet @@ -47,7 +47,7 @@ :ref (stringify (value :^value)) :fn (string "fn " (value :name)) :function (string "builtin " (string value)) - # XXX: pkg, fn + # XXX: pkg )) (set stringify stringify*) @@ -63,6 +63,25 @@ :ref (string "ref:" (x :name) "{" (x :value) "}") (stringify x))) +(defn- show-patt [x] + (case (x :type) + :nil "nil" + :bool (string (x :data)) + :number (string (x :data)) + :keyword (string ":" (x :data)) + :word (x :data) + :placeholder (get-in x [:token :lexeme]) + :tuple (string "(" (string/join (map show-patt (x :data)) ", ") ")") + :list (string "[" (string/join (map show-patt (x :data)) ", ")"]") + :dict (string "#{" (string/join (map show-patt (x :data)) ", ") "}") + :pair (string (show-patt (get-in x [:data 0])) " " (show-patt (get-in x [:data 1]))) + :typed (string (show-patt (get-in x [:data 1])) " as " (show-patt (get-in x [:data 0]))) + :interpolated (get-in x [:token :lexeme]) + :string (get-in x [:token :lexeme]) + (error "cannot show pattern of unknown type " (x :type)))) + +(defn- docstring [fnn] :todo) + (defn- conj-set [sett value] (def new (merge sett)) (set (new value) true) diff --git a/janet/interpreter.janet b/janet/interpreter.janet index 1c7902f..7a70cbc 100644 --- a/janet/interpreter.janet +++ b/janet/interpreter.janet @@ -561,10 +561,12 @@ (do (set source ` -fn foo -fn bar () -> foo () -fn foo () -> :foo -bar () +fn foo { + "a foo, a bar" + () -> :foo + (_) -> :bar +} +foo () `) (def result (run)) # (b/show result) diff --git a/janet/parser.janet b/janet/parser.janet index 8327021..ecf3d4a 100644 --- a/janet/parser.janet +++ b/janet/parser.janet @@ -1134,21 +1134,13 @@ (do # (comment -(def source ` -fn foo { - () -> :clause -} +(def source `(foo as :bar, 12, :foo, _thing) `) (def scanned (s/scan source)) (print "\n***NEW PARSE***\n") (def a-parser (new-parser scanned)) -(def parsed (script a-parser)) - -# (print (pp-ast parsed)) -# (pp scanned) -(pp parsed) -# (def cleaned (get-in parsed [:data 2])) -# (pp cleaned) +(def parsed (pattern a-parser)) +(print (show-patt parsed)) )