      (StringReader. s (.length s) 0)))
 
 (defn string-push-back-reader
-  "Creates a StringPushbackReader from a given string"
+  "Creates a PushbackReader from a given string"
   ([s]
      (string-push-back-reader s 1))
   ([^String s buf-len]

  "Creates an InputStreamReader from an InputString"
  [is]
  (InputStreamReader. is nil))

(defn indexing-push-back-reader
  "Creates an IndexingPushbackReader from a given string"

  (if arg-env
    (throw (IllegalStateException. "Nested #()s are not allowed")))
  (with-bindings {#'arg-env (sorted-map)}
    (unread rdr \()
    (let [form (read rdr true nil true) ;; this sets bindings
          rargs (rseq arg-env)
          args (if rargs
                 (let [higharg (key (first rargs))]
                   (if (pos? higharg)
                     (let [args (loop [i 1 args (transient [])]
                                  (if (> i higharg)
                                    (persistent! args)
                                    (recur (inc i) (conj! args (or (get arg-env i)
                                                                   (garg i))))))
                           args (if (arg-env -1)
                                  (conj args '& (arg-env -1))
                                  args)]
                       args)))
                 [])]
      (list 'fn* args form))))

(defn register-arg [n]
  (if arg-env
