(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))