   [& msg]
   (throw (#+clj java.lang.Exception. #+cljs js/Error.
                 (apply str msg))))
-
-
 
 (def ^:dynamic *print-warnings*
   "If `*print-warnings*` is truthy, warning messages are printed to

                     [n-frame pos-in-frame]
                     nil))
                 (frames env))))


;;; <!--
;;; Evaluate this (e.g., with C-x C-e in Cider) to run the tests for
;;; this namespace:
;;; (clojure.test/run-tests 'revue.util-test)
;;; Evaluate this to run the test for all namespaces:
;;; (clojure.test/run-all-tests #"^revue\..*-test")
;;; -->


(defmethod print-method Env [env writer]
  (.write writer (str "#" (print-str (class env)) "{:frames " (frames env) "}")))

(defn env [& frames]
  "Return a new environment containing `frames` in the given
  order (i.e., `(first frames)` is the first frame, etc.)."
  (->Env (vec (map vec (reverse frames))))) 

(defn env-value
  "Return the value at position `[frame slot]` in `vm-state`'s
  environment.  This is similar to `(get-in env [frame slot])` but
