validate with passed context; don't die on builtin functions

This commit is contained in:
Scott Richmond 2024-05-19 16:17:34 -04:00
parent 608ab4ab67
commit a06014270f

View File

@ -5,7 +5,6 @@
Tracking here, before I start writing this code, the kinds of validation we're hoping to accomplish: Tracking here, before I start writing this code, the kinds of validation we're hoping to accomplish:
* [ ] ensure called keywords are only called w/ one arg * [ ] ensure called keywords are only called w/ one arg
* [ ] validate `with` forms
* [ ] first-level property access with pkg, e.g. `Foo :bar`--bar must be on Foo * [ ] first-level property access with pkg, e.g. `Foo :bar`--bar must be on Foo
- [ ] accept pkg-kws - [ ] accept pkg-kws
* [ ] validate dict patterns * [ ] validate dict patterns
@ -20,9 +19,10 @@ Tracking here, before I start writing this code, the kinds of validation we're h
* [x] recur not called outside of `loop` forms * [x] recur not called outside of `loop` forms
* [x] splats come at the end of list, tuple, and dict patterns * [x] splats come at the end of list, tuple, and dict patterns
Imports are for a later iteration of Ludus: Deferred until a later iteration of Ludus:
* [ ] no circular imports DEFERRED * [ ] no circular imports DEFERRED
* [ ] correct imports DEFERRED * [ ] correct imports DEFERRED
* [ ] validate `with` forms
) )
(try (os/cd "janet") ([_] nil)) (try (os/cd "janet") ([_] nil))
@ -344,6 +344,7 @@ Imports are for a later iteration of Ludus:
(def fn-word (first data)) (def fn-word (first data))
(def the-fn (resolve-name ctx (fn-word :data))) (def the-fn (resolve-name ctx (fn-word :data)))
(when (not the-fn) (break validator)) (when (not the-fn) (break validator))
(when (= :function (type the-fn)) (break validator))
(print "fn name: " (the-fn :name)) (print "fn name: " (the-fn :name))
(def arities (the-fn :arities)) (def arities (the-fn :arities))
(print "arities: ") (print "arities: ")
@ -620,16 +621,24 @@ Imports are for a later iteration of Ludus:
(set validate validate*) (set validate validate*)
(defn valid [ast] (defn valid [ast &opt ctx]
(default ctx @{})
(def validator (new-validator ast)) (def validator (new-validator ast))
(def base-ctx @{:^parent ctx})
(set (validator :ctx) ctx)
(validate validator)) (validate validator))
# (do (defn foo [] :foo)
(comment (def base {
"foo" foo
})
(do
# (comment
(def source ` (def source `
let "{foo}" = "bar" foo ()
`) `)
(def scanned (s/scan source)) (def scanned (s/scan source))
(def parsed (p/parse scanned)) (def parsed (p/parse scanned))
(valid parsed) (valid parsed base)
) )