   (doseq [b buffers]
     (let [t (type b)]
       (cond
-        (isa? t Buffer) (.rewind ^Buffer b)
-        (isa? t CLBuffer) (.rewind (nio-buffer b))
-        :default (throw (IllegalArgumentException.
-                          (str "can't rewind a " t))))))
+       (isa? t Buffer) (.rewind ^Buffer b)
+       (isa? t CLBuffer) (.rewind (nio-buffer b))
+       :default (throw (IllegalArgumentException.
+                        (str "can't rewind a " t))))))
   (last buffers))
 
 (defn build-log

  ([] (build-log *program* *device*))
  ([^CLProgram program] (build-log program *device*))
  ([^CLProgram program ^CLDevice device]
    (.getBuildLog program device)))

(defn build-status
  "Returns the build status of `program` for the given `device`.

  If none given, uses the default `*context*`."
  ([] (release-on-shutdown *context*))
  ([^CLContext ctx]
     (when ctx
       (.addShutdownHook
        (Runtime/getRuntime)
        (Thread. (fn [] (prn "releasing CL context...") (release ctx)))))))

;; # CL data type factories

(defn ^CLContext make-context
  "Without arg, selects the platform with the latest OpenCL version and
  creates a context on all available devices. Otherwise the argument must be
  a CLPlatform or seq of CLDevices. If the plaform is given, the context will
  be created on all devices."
  ([] (CLContext/create))
  ([platform-or-devices]
     (cond
      (isa? (type platform-or-devices) CLPlatform)
        (CLContext/create ^CLPlatform platform-or-devices)
      (sequential? platform-or-devices)
        (CLContext/create (into-array CLDevice platform-or-devices))
      :default (throw (IllegalArgumentException. "Argument must be a CLPlatform or seq of CLDevice")))))

(defn ^CLProgram make-program
  "Creates an input stream for `src` and compiles it into a CLProgram using the
