         retry-label (gensym)]
     `((:VM_IVAL ~(make-num 0))
       (:VM_BIND ~(make-sym var))
+      (:VM_IVAL ~(make-nil))
+      (:VM_PUSH)
       ~retry-label
+      (:VM_POP)
       ~@(apply concat (map compile-pass1 body))
       (:VM_PUSH)
       ;; (:VM_VREF ~(make-sym var))

      ;; (:VM_VSET ~(make-sym var))
      ;; (:VM_VREF ~(make-sym var))
      (:VM_VINC ~(make-sym var))
      (:VM_PUSH)
      (:VM_IVAL ~(make-num num))
      (:VM_LE)
      (:VM_BIF ~end-label)
      (:VM_POP)
      (:VM_JMP ~retry-label)
      ~end-label
      (:VM_POP)
      (:VM_UNBIND 1))))

(defn builtin-fun-id [fname]
  (index (fn [pair] (= (first pair) fname))

            `(~@insts
              ~end-label))
          ;;
	  ('while pred & body)	(compile-while pred body)
	  ;;
	  ('dotimes (var num) & body)
          (compile-dotimes var num body)
