anchor.diff:         :code chained
          :run-test `(< ,counter-sym ,(length forms))
          :expired-test (when (not repeat) `(= ,counter-sym ,(length forms)))
  -       :closed-vars (cons `(,counter-sym 0) closed-vars))))
  +       :closed-vars (cons `(,counter-sym 0) closed-vars)
  +       ;; :initialize `((when (= ,counter-sym 0) 
  +       ;;                 (incf ,counter-sym)
  +       ;;                 ,@(t-initialize (first compiled-forms))))
  +       )))
   
   ;;------------------
   ;; Time conditional
  
positive.code: 
  ;; {TODO} can use func-name for block if tdefun
  (defun gen-time-function-body (name args body)
    (with-t-obj () (tprogn body t)
      (let ((lbody (if expired-test
                       `(if ,expired-test
                            (cfunc:signal-expired)
                            ,code)
                       code)))
        `(let ((,current-time-sym (funcall *default-time-source*))
               (,overflow-sym 0.0)
               ,@(loop :for (a b) :in closed-vars
                    :collect (list a b)))
           (declare (ignorable ,current-time-sym ,overflow-sym))
           (,@(if name `(defun ,name) '(lambda)) ,args            
              (block tlambda-implicit-block
                (tagbody tlambda-start
                   (return-from tlambda-implicit-block
                     ,lbody))))))))
  
  (defmacro tdefun (name args &body body) (gen-time-function-body name args body))
  (defmacro tlambda (args &body body) (gen-time-function-body nil args body))
  
negative.code: ;; to game building.
  
  (in-package :base-time)
  
  ;; (tdefun test () 
  ;;   (then ((before (from-now 1000)) (print "hi"))
  ;;         ((before (from-now 2000)) (print "there"))))
  
  ;; (tdefun test () 
  ;;   ((before (from-now 2000)) (print "1"))
  ;;   ((before (from-now 4000)) (print "2")))
  
  ;;{TODO} THIS IS WRONG, FIX THIS 
  ;; -----------------------------------------------------------------------------
  