    (or (and (coll? exp)
 	    (empty? exp))
        (= 'nil exp))
-   `((VM_IVAL ~(make-nil)))
-   ;;
-   (or (= 't exp) (= 'T exp))		`((VM_IVAL ~(make-t)))
-   (symbol? exp)			`((VM_IVAL ~(make-sym exp)))
-   (number? exp)			`((VM_IVAL ~(make-num exp)))
+   `((:VM_IVAL ~(make-nil)))
+   ;;
+   (or (= 't exp) (= 'T exp))		`((:VM_IVAL ~(make-t)))
+   (symbol? exp)			`((:VM_IVAL ~(make-sym exp)))
+   (number? exp)			`((:VM_IVAL ~(make-num exp)))
    (coll? exp)				`(~@(compile-quote (first exp))
-					  (VM_PUSH)
+					  (:VM_PUSH)
 					  ~@(compile-quote (rest exp))
-					  (VM_CONS))
+					  (:VM_CONS))
    ))
 
 (defn compile-let [bindings body]
   `(~@(apply concat
        (map (fn [binding]
 	      `(~@(compile-pass1 (second binding))
-		(VM_BIND ~(make-sym (first binding)))))
+		(:VM_BIND ~(make-sym (first binding)))))
 	    bindings))
     ~@(apply concat
 	     (map compile-pass1 body))
-    (VM_UNBIND ~(count bindings))))
+    (:VM_UNBIND ~(count bindings))))
 
 (defn builtin-fun-id [fname]
   (index (fn [pair] (= (first pair) fname))
 	 *vm-builtin-funs*))
 
 (defn compile-funcall [fname args]
-  `((VM_PUSH_FRAME)
+  `((:VM_PUSH_FRAME)
     ~@(apply concat
        (map (fn [arg] (concat (compile-pass1 arg)
-			      `((VM_PUSH))))
+			      `((:VM_PUSH))))
 	    (reverse args)))
-    (VM_FUNCALL ~(if (some (fn [fun-spec] (= (first fun-spec) fname))
+    (:VM_FUNCALL ~(if (some (fn [fun-spec] (= (first fun-spec) fname))
 			   *vm-builtin-funs*)
 		   (make-num (builtin-fun-id fname))
 		   (make-sym fname)))))

(defn pp-program [insts]
  (dotimes [i (count insts)]
    (let [inst (nth insts i),
	  inst-name (unqualify-symbol (first inst))
	  inst-spec (some (fn [spec] (and (= inst-name (first spec)) spec))
			  *vm-inst-list*)
	  inst-operand (second inst)

	(recur (+ idx 1) pred (rest coll)))))
  (inner-index 0 pred coll))

(defn #^{:doc "Encode a VM instruction to bytes"}
  encode-inst [inst]
  (let [inst-name (first inst),
	inst-operand (or (second inst) 0),
	inst-spec (some (fn [inst-spec] (= inst-name (first inst-spec)))
			*vm-inst-list*)]
