ludus/janet/errors.janet
2024-06-05 17:47:41 -04:00

69 lines
1.7 KiB
Plaintext

(import spork/json :as j)
(try (os/cd "janet") ([_] nil))
(import /base :as b)
(defn- get-line [source line]
((string/split "\n" source) (dec line)))
(defn scan-error [e] (pp e) e)
(defn parse-error [e]
(def msg (e :msg))
(def line-num (get-in e [:token :line]))
(def source (get-in e [:token :source]))
(def source-line (get-line source line-num))
(print "Parsing error: " msg)
(print "On line " line-num ":")
(print source-line)
e)
(defn validation-error [e]
(def msg (e :msg))
(def line-num (get-in e [:node :token :line]))
(def source (get-in e [:node :token :source]))
(def source-line (get-line source line-num))
(case msg
"unbound name"
(do
(print "Validation error: " msg " " (get-in e [:node :data]))
(print "on line " line-num)
(print source-line))
(do
(print "Validation error: " msg)
(print "on line " line-num)
(print source-line)))
e)
(defn- fn-no-match [e]
(print "Ludus panicked! no match")
(def line-num (get-in e [:node :token :line]))
(def source (get-in e [:node :token :source]))
(def source-line (get-line source line-num))
(print "on line " line-num)
(def called (e :called))
(print "calling " (b/show called))
(def value (e :value))
(print "with " (b/show value))
(print "expecting to match one of")
(print (b/pretty-patterns called))
)
(defn- generic-panic [e]
(def msg (e :msg))
(def line-num (get-in e [:node :token :line]))
(def source (get-in e [:node :token :source]))
(def source-line (get-line source line-num))
(print "Ludus panicked! " msg)
(print "on line " line-num)
(print source-line)
)
(defn runtime-error [e]
(pp e)
(def msg (e :msg))
(case msg
"no match: function call" (fn-no-match e)
(generic-panic e)
e)