From 6348f7bd20b261f3dfabee6eb45a16af514a4c15 Mon Sep 17 00:00:00 2001 From: Andy Fingerhut Date: Sat, 13 Apr 2013 10:16:02 -0700 Subject: [PATCH] TRDR-6: Eliminate reflection in tools.reader via type hints --- src/main/clojure/clojure/tools/reader.clj | 12 ++++++------ .../clojure/clojure/tools/reader/default_data_readers.clj | 8 ++++---- src/main/clojure/clojure/tools/reader/edn.clj | 10 +++++----- src/main/clojure/clojure/tools/reader/reader_types.clj | 4 ++-- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/clojure/clojure/tools/reader.clj b/src/main/clojure/clojure/tools/reader.clj index ec0cbf6..79daf9b 100644 --- a/src/main/clojure/clojure/tools/reader.clj +++ b/src/main/clojure/clojure/tools/reader.clj @@ -68,13 +68,13 @@ (loop [i offset uc 0] (if (== i l) (char uc) - (let [d (Character/digit (char (nth token i)) (int base))] + (let [d (Character/digit ^char (char (nth token i)) (int base))] (if (== d -1) (throw (IllegalArgumentException. (str "Invalid digit: " (nth token i)))) (recur (inc i) (long (+ d (* uc base)))))))))) ([rdr initch base length exact?] - (loop [i 1 uc (Character/digit (char initch) (int base))] + (loop [i 1 uc (Character/digit ^char (char initch) (int base))] (if (== uc -1) (throw (IllegalArgumentException. (str "Invalid digit: " initch))) (if-not (== i length) @@ -86,7 +86,7 @@ (throw (IllegalArgumentException. (str "Invalid character length: " i ", should be: " length))) (char uc)) - (let [d (Character/digit (char ch) (int base))] + (let [d (Character/digit ^char (char ch) (int base))] (read-char rdr) (if (== d -1) (throw (IllegalArgumentException. (str "Invalid digit: " ch))) @@ -211,11 +211,11 @@ \b "\b" \f "\f" \u (let [ch (read-char rdr)] - (if (== -1 (Character/digit (char ch) 16)) + (if (== -1 (Character/digit ^char (char ch) 16)) (reader-error rdr "Invalid unicode escape: \\u" ch) (read-unicode-char rdr ch 16 4 true))) \x (let [ch (read-char rdr)] - (if (== -1 (Character/digit (char ch) 16)) + (if (== -1 (Character/digit ^char (char ch) 16)) (reader-error rdr "Invalid unicode escape: \\x" ch) (read-unicode-char rdr ch 16 2 true))) (if (numeric? ch) @@ -358,7 +358,7 @@ [rdr pct] (if-not (thread-bound? #'arg-env) (read-symbol rdr pct) - (let [ch (peek-char rdr)] + (let [^char ch (peek-char rdr)] (cond (or (whitespace? ch) (macro-terminating? ch) diff --git a/src/main/clojure/clojure/tools/reader/default_data_readers.clj b/src/main/clojure/clojure/tools/reader/default_data_readers.clj index b25359d..37faf1e 100644 --- a/src/main/clojure/clojure/tools/reader/default_data_readers.clj +++ b/src/main/clojure/clojure/tools/reader/default_data_readers.clj @@ -160,7 +160,7 @@ with invalid arguments." ;;; ------------------------------------------------------------------------ ;;; print integration -(def ^:private thread-local-utc-date-format +(def ^:private ^ThreadLocal thread-local-utc-date-format ;; SimpleDateFormat is not thread-safe, so we use a ThreadLocal proxy for access. ;; http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4228335 (proxy [ThreadLocal] [] @@ -174,7 +174,7 @@ with invalid arguments." [^java.util.Date d, ^java.io.Writer w] (let [utc-format (.get thread-local-utc-date-format)] (.write w "#inst \"") - (.write w (.format utc-format d)) + (.write w ^String (.format ^java.text.SimpleDateFormat utc-format d)) (.write w "\""))) (defmethod print-method java.util.Date @@ -206,7 +206,7 @@ with invalid arguments." (print-calendar c w)) -(def ^:private thread-local-utc-timestamp-format +(def ^:private ^ThreadLocal thread-local-utc-timestamp-format ;; SimpleDateFormat is not thread-safe, so we use a ThreadLocal proxy for access. ;; http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4228335 (proxy [ThreadLocal] [] @@ -219,7 +219,7 @@ with invalid arguments." [^java.sql.Timestamp ts, ^java.io.Writer w] (let [utc-format (.get thread-local-utc-timestamp-format)] (.write w "#inst \"") - (.write w (.format utc-format ts)) + (.write w ^String (.format ^java.text.SimpleDateFormat utc-format ts)) ;; add on nanos and offset ;; RFC3339 says to use -00:00 when the timezone is unknown (+00:00 implies a known GMT) (.write w (format ".%09d-00:00" (.getNanos ts))) diff --git a/src/main/clojure/clojure/tools/reader/edn.clj b/src/main/clojure/clojure/tools/reader/edn.clj index bf69794..0e9c5bc 100644 --- a/src/main/clojure/clojure/tools/reader/edn.clj +++ b/src/main/clojure/clojure/tools/reader/edn.clj @@ -75,13 +75,13 @@ (loop [i offset uc 0] (if (== i l) (char uc) - (let [d (Character/digit (char (nth token i)) (int base))] + (let [d (Character/digit ^char (char (nth token i)) (int base))] (if (== d -1) (throw (IllegalArgumentException. (str "Invalid digit: " (nth token i)))) (recur (inc i) (long (+ d (* uc base)))))))))) ([rdr initch base length exact?] - (loop [i 1 uc (Character/digit (char initch) (int base))] + (loop [i 1 uc (Character/digit ^char (char initch) (int base))] (if (== uc -1) (throw (IllegalArgumentException. (str "Invalid digit: " initch))) (if-not (== i length) @@ -93,7 +93,7 @@ (throw (IllegalArgumentException. (str "Invalid character length: " i ", should be: " length))) (char uc)) - (let [d (Character/digit (char ch) (int base))] + (let [d (Character/digit ^char (char ch) (int base))] (read-char rdr) (if (== d -1) (throw (IllegalArgumentException. (str "Invalid digit: " ch))) @@ -202,11 +202,11 @@ \b "\b" \f "\f" \u (let [ch (read-char rdr)] - (if (== -1 (Character/digit (char ch) 16)) + (if (== -1 (Character/digit ^char (char ch) 16)) (reader-error rdr "Invalid unicode escape: \\u" ch) (read-unicode-char rdr ch 16 4 true))) \x (let [ch (read-char rdr)] - (if (== -1 (Character/digit (char ch) 16)) + (if (== -1 (Character/digit ^char (char ch) 16)) (reader-error rdr "Invalid unicode escape: \\x" ch) (read-unicode-char rdr ch 16 2 true))) (if (numeric? ch) diff --git a/src/main/clojure/clojure/tools/reader/reader_types.clj b/src/main/clojure/clojure/tools/reader/reader_types.clj index 2340e75..c659bf8 100644 --- a/src/main/clojure/clojure/tools/reader/reader_types.clj +++ b/src/main/clojure/clojure/tools/reader/reader_types.clj @@ -175,12 +175,12 @@ (PushbackReader. (string-reader s) (object-array buf-len) buf-len buf-len))) (defn input-stream-reader - "Creates an InputStreamReader from an InputString" + "Creates an InputStreamReader from an InputStream" [is] (InputStreamReader. is nil)) (defn input-stream-push-back-reader - "Creates a PushbackReader from a given InputString" + "Creates a PushbackReader from a given InputStream" ([is] (input-stream-push-back-reader is 1)) ([^InputStream is buf-len] -- 1.8.1.3