<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="../coverage.css"/> <title> beowulf/core.clj </title> </head> <body> <span class="covered" title="1 out of 1 forms covered"> 001 (ns beowulf.core </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 002 "Essentially, the `-main` function and the bootstrap read-eval-print loop." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 003 (:require [beowulf.bootstrap :refer [EVAL oblist *options*]] </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 004 [beowulf.read :refer [READ]] </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 005 [clojure.java.io :as io] </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 006 [clojure.pprint :refer [pprint]] </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 007 [clojure.tools.cli :refer [parse-opts]] </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 008 [environ.core :refer [env]]) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 009 (:gen-class)) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 010 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 011 (def cli-options </span><br/> <span class="covered" title="4 out of 4 forms covered"> 012 [["-h" "--help"] </span><br/> <span class="covered" title="6 out of 6 forms covered"> 013 ["-p PROMPT" "--prompt PROMPT" "Set the REPL prompt to PROMPT" </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 014 :default "Sprecan::"] </span><br/> <span class="covered" title="5 out of 5 forms covered"> 015 ["-r INITFILE" "--read INITFILE" "Read Lisp functions from the file INITFILE" </span><br/> <span class="covered" title="8 out of 8 forms covered"> 016 :validate [#(and </span><br/> <span class="covered" title="1 out of 1 forms covered"> 017 (.exists (io/file %)) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 018 (.canRead (io/file %))) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 019 "Could not find initfile"]] </span><br/> <span class="covered" title="4 out of 4 forms covered"> 020 ["-s" "--strict" "Strictly interpret the Lisp 1.5 language, without extensions."] </span><br/> <span class="covered" title="4 out of 4 forms covered"> 021 ["-t" "--trace" "Trace Lisp evaluation."]]) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 022 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 023 (defn repl </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 024 "Read/eval/print loop." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 025 [prompt] </span><br/> <span class="covered" title="1 out of 1 forms covered"> 026 (loop [] </span><br/> <span class="covered" title="3 out of 3 forms covered"> 027 (print prompt) </span><br/> <span class="covered" title="2 out of 2 forms covered"> 028 (flush) </span><br/> <span class="covered" title="1 out of 1 forms covered"> 029 (try </span><br/> <span class="covered" title="3 out of 3 forms covered"> 030 (let [input (read-line)] </span><br/> <span class="partial" title="2 out of 3 forms covered"> 031 (cond </span><br/> <span class="covered" title="11 out of 11 forms covered"> 032 (= input "quit") (throw (ex-info "\nFærwell!" {:cause :quit})) </span><br/> <span class="covered" title="16 out of 16 forms covered"> 033 input (println (str "> " (print-str (EVAL (READ input) @oblist)))) </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 034 :else (println))) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 035 (catch </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 036 Exception </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 037 e </span><br/> <span class="covered" title="4 out of 4 forms covered"> 038 (let [data (ex-data e)] </span><br/> <span class="covered" title="3 out of 3 forms covered"> 039 (println (.getMessage e)) </span><br/> <span class="covered" title="1 out of 1 forms covered"> 040 (if </span><br/> <span class="covered" title="1 out of 1 forms covered"> 041 data </span><br/> <span class="covered" title="6 out of 6 forms covered"> 042 (case (:cause data) </span><br/> <span class="not-covered" title="0 out of 5 forms covered"> 043 :parse-failure (println (:failure data)) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 044 :strict nil ;; the message, which has already been printed, is enough. </span><br/> <span class="covered" title="2 out of 2 forms covered"> 045 :quit (throw e) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 046 ;; default </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 047 (pprint data)))))) </span><br/> <span class="covered" title="1 out of 1 forms covered"> 048 (recur))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 049 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 050 (defn -main </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 051 "Parse options, print the banner, read the init file if any, and enter the </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 052 read/eval/print loop." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 053 [& opts] </span><br/> <span class="covered" title="5 out of 5 forms covered"> 054 (let [args (parse-opts opts cli-options)] </span><br/> <span class="covered" title="2 out of 2 forms covered"> 055 (println </span><br/> <span class="covered" title="4 out of 4 forms covered"> 056 (str </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 057 "\nHider wilcuman. Béowulf is mín nama.\n" </span><br/> <span class="covered" title="1 out of 1 forms covered"> 058 (if </span><br/> <span class="covered" title="2 out of 2 forms covered"> 059 (System/getProperty "beowulf.version") </span><br/> <span class="covered" title="6 out of 6 forms covered"> 060 (str "Síðe " (System/getProperty "beowulf.version") "\n")) </span><br/> <span class="covered" title="1 out of 1 forms covered"> 061 (if </span><br/> <span class="covered" title="5 out of 5 forms covered"> 062 (:help (:options args)) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 063 (:summary args)) </span><br/> <span class="covered" title="4 out of 4 forms covered"> 064 (if (:errors args) </span><br/> <span class="covered" title="9 out of 9 forms covered"> 065 (apply str (interpose "; " (:errors args)))) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 066 "\nSprecan 'quit' tó laéfan\n")) </span><br/> <span class="covered" title="12 out of 12 forms covered"> 067 (binding [*options* (:options args)] </span><br/> <span class="covered" title="1 out of 1 forms covered"> 068 (try </span><br/> <span class="covered" title="10 out of 10 forms covered"> 069 (repl (str (:prompt (:options args)) " ")) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 070 (catch </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 071 Exception </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 072 e </span><br/> <span class="covered" title="4 out of 4 forms covered"> 073 (let [data (ex-data e)] </span><br/> <span class="covered" title="1 out of 1 forms covered"> 074 (if </span><br/> <span class="covered" title="1 out of 1 forms covered"> 075 data </span><br/> <span class="covered" title="6 out of 6 forms covered"> 076 (case (:cause data) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 077 :quit nil </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 078 ;; default </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 079 (pprint data)) </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 080 (println e)))))))) </span><br/> </body> </html>