        :else
        (throw ;XXX: don't use thro here, they'll recur
          (new AssertionError 
-              (str "you must pass a class to `" '~(first &form)
-                   "` at " '~(meta &form)
-                   )
+              (str "you must pass a class(ie. not an instance) to `"
+                '~(first &form)
+                "` at "
+                '~(meta &form)
+                " form was: `"
+                '~&form
+                "`" 
+                )
               )
          )
        )

  )


(do
 (clojure.core/cond
  (clojure.core/and
   (clojure.core/instance? java.lang.Class t)
   (clojure.core/contains?
    (clojure.core/supers t)
    java.lang.Throwable))
  (throw (runtime.q/newClass t (clojure.core/str)))
  (clojure.core/instance? java.lang.Throwable t)
  (throw t)
  :else
  (throw
   (new
    java.lang.RuntimeException
    (clojure.core/str
     "you must pass a class2 to `"
     'thro
     "` at "
     '{:line 1, :column 40})))))

(defmacro thro
"
(thro RuntimeException \"concatenated \" \"message\")
"
  [ex & restt]
  ;(class? java.lang.String)
  `(do 
     (cond
       
       ;if passed a class or symbol resolving to a class
       (and
         (instance? java.lang.Class ~ex)
         (contains? 
           (supers ~ex) 
           java.lang.Throwable
           )
         )
       ;then
       (throw (newClass ~ex (str ~@restt)))
       
       ;if passed an instance of an exception
       (instance? java.lang.Throwable ~ex)
       ;then throw it as it is
       (throw ~ex)
       
       ;none of the above
       :else
       (throw 
         (new RuntimeException 
              (str 
                "you must pass a class/instance to `"
                '~(first &form)
                "` at "
                '~(meta &form)
                )
              )
         )

        )
      (catch Throwable t 
        (do 
          (rethro t)
          )
        )
      )
