 
 ;;; JSON READER
 
+(set! *warn-on-reflection* true)
 
 (defn- default-write-key-fn
   [x]


(defn- write-string [^CharSequence s ^Appendable out options]
  (let [decoder codepoint-decoder]
    (.append out (codepoint \"))
    (dotimes [i (.length s)]
      (let [cp (int (.charAt s i))]
        (if (< cp 128)
          (case (aget decoder cp)
            0 (.append out cp)
            1 (do (.append out (codepoint \\)) (.append out cp))
            2 (.append out (if (get options :escape-slash) "\\/" "/"))
            3 (.append out "\\b")
            4 (.append out "\\f")

          (codepoint-case cp
            :js-separators (if (get options :escape-js-separators)
                             (->hex-string out cp)
                             (.append out (char cp)))
            (if (get options :escape-unicode)
              (->hex-string out cp) ; Hexadecimal-escaped
              (.append out (char cp)))))))
    (.append out \")))

(defn- write-object [m ^Appendable out options]
  (let [key-fn (:key-fn options)
