         )
       (catch Throwable t 
         (do 
-          (throw t)
+          (rethro t)
           )
         )
       )

       :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)
                   )
              )
         )
       )

  )


;FIXME: => (let [x rte] (thro x)) ;CompilerException java.lang.UnsupportedOperationException: Can't eval locals, compiling:(NO_SOURCE_PATH:1:14) 
(defmacro thro
"
(thro RuntimeException \"concatenated \" \"message\")
"
  [ex & restt]
  ;(class? java.lang.String)
  (let [
        eex (eval ex)
        ;_ (prn eex)
        ;_ (prn (class eex))
        ]
     (cond
       
       ;if passed a class or symbol resolving to a class
       (and
         (instance? java.lang.Class eex)
         (contains? 
           (supers eex) 
           java.lang.Throwable
           )
         )
       ;then
       `(throw (newClass ~ex (str ~@restt)))
       
       ;if passed an instance of an exception
       (instance? java.lang.Throwable eex)
       ;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)
                " form was: `"
                '~&form
                "`" 
                )
              )
         )
