    (condition? thing) thing
 
    (instance? Throwable thing)
-   (make-condition (mapcat condition-components
-                           (filter identity
-                                   [(make-throwable thing)
-                                    (make-message-condition (.getMessage ^Throwable thing))
-                                    (cond
-                                     (instance? Exception thing) (make-error)
-                                     (instance? Error thing) (make-assertion-violation)
-                                     :else nil)])))
+   (let [^Throwable throwable thing]
+     (make-condition (mapcat condition-components
+                             (filter identity
+                                     [(make-throwable throwable)
+                                      (make-message-condition (.getMessage throwable))
+                                      (cond
+                                       (instance? Exception throwable) (make-error)
+                                       (instance? Error throwable) (make-assertion-violation)
+                                       :else nil)
+                                      (make-who-condition (stack-trace-who (.getStackTrace throwable)))]))))
 
    :else (clojure.core/assert (instance? Throwable thing) "not a throwable"))))
 

            ::components condition-components}))

#?(:clj
(defn ->condition
  "Coerce something into a condition object.


                               (make-irritants-condition irritants)))))

#?(:clj
(defmacro assert
  "Evaluates expr and throws an exception if it does not evaluate to
  logical true."
  ([x]
     (when *assert*
       `(when-not ~x
          (assertion-violation (stack-trace-who (.getStackTrace (Thread/currentThread)))
                               (str "Assertion failed")
                               '~x))))
  ([x message]
     (when *assert*
       `(when-not ~x
          (assertion-violation (stack-trace-who (.getStackTrace (Thread/currentThread)))
                               (str "Assert failed: " ~message)
                               '~x))))))

