30 lines
985 B
Plaintext
30 lines
985 B
Plaintext
(try (os/cd "janet") ([_] nil))
|
|
(import /base :as b)
|
|
(import /scanner :as s)
|
|
(import /parser :as p)
|
|
(import /validate :as v)
|
|
(import /interpreter :as i)
|
|
(import /errors :as e)
|
|
|
|
(def pkg (do
|
|
(def prelude-ctx @{:^parent {"base" b/base}})
|
|
(def prelude-src (slurp "prelude.ld"))
|
|
(def prelude-scanned (s/scan prelude-src :prelude))
|
|
(def prelude-parsed (p/parse prelude-scanned))
|
|
(def parse-errors (prelude-parsed :errors))
|
|
(when (any? parse-errors) (each err parse-errors (e/parse-error err)) (break :error))
|
|
(def prelude-validated (v/valid prelude-parsed prelude-ctx))
|
|
(def validation-errors (prelude-validated :errors))
|
|
(when (any? validation-errors) (each err validation-errors (e/validation-error err)) (break :error))
|
|
(try
|
|
(i/interpret (prelude-parsed :ast) prelude-ctx)
|
|
([err] (e/runtime-error err) :error))))
|
|
|
|
(def ctx (do
|
|
(def ctx @{})
|
|
(each [k v] (pairs pkg)
|
|
(set (ctx (string k)) v))
|
|
(set (ctx "^name") nil)
|
|
(set (ctx "^type") nil)
|
|
ctx))
|