2024-06-06 22:47:04 +00:00
|
|
|
(import /src/base :as b)
|
|
|
|
(import /src/scanner :as s)
|
|
|
|
(import /src/parser :as p)
|
|
|
|
(import /src/validate :as v)
|
|
|
|
(import /src/interpreter :as i)
|
|
|
|
(import /src/errors :as e)
|
2024-06-06 20:14:04 +00:00
|
|
|
|
|
|
|
(def pkg (do
|
|
|
|
(def pre-ctx @{:^parent {"base" b/base}})
|
|
|
|
(def pre-src (slurp "prelude.ld"))
|
|
|
|
(def pre-scanned (s/scan pre-src :prelude))
|
|
|
|
(def pre-parsed (p/parse pre-scanned))
|
|
|
|
(def parse-errors (pre-parsed :errors))
|
|
|
|
(when (any? parse-errors) (each err parse-errors (e/parse-error err)) (break :error))
|
|
|
|
(def pre-validated (v/valid pre-parsed pre-ctx))
|
|
|
|
(def validation-errors (pre-validated :errors))
|
|
|
|
(when (any? validation-errors) (each err validation-errors (e/validation-error err)) (break :error))
|
|
|
|
(try
|
|
|
|
(i/interpret (pre-parsed :ast) pre-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))
|
|
|
|
|
|
|
|
(def post/src (slurp "postlude.ld"))
|
|
|
|
|
|
|
|
(def post/ast (do
|
|
|
|
(def post-ctx @{:^parent ctx})
|
|
|
|
(def post-scanned (s/scan post/src :postlude))
|
|
|
|
(def post-parsed (p/parse post-scanned))
|
|
|
|
(def parse-errors (post-parsed :errors))
|
|
|
|
(when (any? parse-errors) (each err parse-errors (e/parse-error err)) (break :error))
|
|
|
|
(def post-validated (v/valid post-parsed post-ctx))
|
|
|
|
(def validation-errors (post-validated :errors))
|
|
|
|
(when (any? validation-errors) (each err validation-errors (e/validation-error err)) (break :error))
|
|
|
|
(post-parsed :ast)))
|