 (defn- numeric?
   "Checks whether a given character is numeric"
   [^Character ch]
-  (Character/isDigit ch))
-   
+  (if ch
+    (Character/isDigit ch)))
+
 (defn- comment-prefix?
   "Checks whether the character begins a comment."
   [ch]

  "Reads one object from the string s"
  [s]
  (read (string-push-back-reader s) true nil false))

(comment
 (def l (slurp "/home/bronsa/src/clojure/src/clj/clojure/core.clj"))

 (defn bench [] (let [pl (pbr l)] (loop [r (read pl true nil true)]
                                    (if r (recur (try (read pl true nil true)
                                                      (catch Exception _)))))))

 (defn bench- [] (let [pl (java.io.PushbackReader. (java.io.StringReader. l))]
                   (loop [r (clojure.core/read pl true nil true)]
                     (if r (recur (try (clojure.core/read pl true nil true)
                                       (catch Exception _))))))))

          (reader-error rdr "Invalid token:" token)))))

(defn- resolve-ns [sym]
  (or ((ns-aliases *ns*) sym)
      (find-ns sym)))

(defn read-keyword
  [reader initch]
