From 45a9f21d84d7e07fcddc425e754e10a7484d9a08 Mon Sep 17 00:00:00 2001 From: Andy Fingerhut Date: Tue, 19 Feb 2013 17:39:12 -0800 Subject: [PATCH] CLJ-1168: Allow both clojure.read.eval=unknown and --eval cmd line args to work together simultaneously. --- src/clj/clojure/main.clj | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/clj/clojure/main.clj b/src/clj/clojure/main.clj index ec1bcf7..0446a0d 100644 --- a/src/clj/clojure/main.clj +++ b/src/clj/clojure/main.clj @@ -183,6 +183,13 @@ by default when a new command-line REPL is started."} repl-requires [clojure.java.javadoc :refer (javadoc)] [clojure.pprint :refer (pp pprint)]]) +(defn- read-never-unknown [read-fn & args] + (let [cur-read-eval *read-eval*] + (binding [*read-eval* (if (= :unknown cur-read-eval) + true + cur-read-eval)] + (apply read-fn args)))) + (defn repl "Generic, reusable, read-eval-print loop. By default, reads from *in*, writes to *out*, and prints exception summaries to *err*. If you use the @@ -247,8 +254,7 @@ by default when a new command-line REPL is started."} repl-requires (fn [] (try (let [read-eval *read-eval* - input (binding [*read-eval* (if (= :unknown read-eval) true read-eval)] - (read request-prompt request-exit))] + input (read-never-unknown read request-prompt request-exit)] (or (#{request-prompt request-exit} input) (let [value (binding [*read-eval* read-eval] (eval input))] (print value) @@ -297,12 +303,12 @@ by default when a new command-line REPL is started."} repl-requires [str] (let [eof (Object.) reader (LineNumberingPushbackReader. (java.io.StringReader. str))] - (loop [input (read reader false eof)] + (loop [input (read-never-unknown read reader false eof)] (when-not (= input eof) (let [value (eval input)] (when-not (nil? value) (prn value)) - (recur (read reader false eof))))))) + (recur (read-never-unknown read reader false eof))))))) (defn- init-dispatch "Returns the handler associated with an init opt" -- 1.8.0