   Class instance/static fields are provided as maps. Options:
 
     :name   field name (required).
+
     :type   field type (required).
-    :flags  modifier flags.
+
+    :flags  seq of field modifier flags.
+
     :value  initial value. Only for primitive and String static fields,
             and if given, must be a corresponding Integer, Float, Long,
             Double, or String value.

       :dynamic true}
  *method-flags* #{:public :final})

(def ^{:doc "The default bytecode version to use if unspecified."
       :dynamic true}
  *bytecode-version* 1.7)


(declare visit-field visit-method)

(defn visit
  "Generate the class bytecode from the provided type map. Returns a map
  of the classes' :name and :bytes. Options:

    :name         of the class. Optional, but see below.

    :flags        seq of class/interface modifier flags (e.g., :final).
                  See the `insn.util` namespace.

    :super        defaults to Object.

    :interfaces   sequence of interface types to extend/implement.

    :annotations  map or sequence of tuples, described below.

    :fields       sequence of field maps, described below.

    :methods      sequence of method maps, described below.

    :version      bytecode version given as a integer. For backwards
                  compatibility, a float of major.minor may be given
                  for versions 1.1 through 1.8.

  Each field and method can also be given :annotations as per above.

