anchor.diff:       (if ,ok
            ,(or continuation `(values t ,result ,s ,p))
            ,failure)))
  +
  +(defun compile-or (body txt st pos names)
  +  (unless (null body)
  +    (with-gensyms (s p)
  +      (compile-wrapped-form
  +       #'or-wrapper
  +       (first body)
  +       txt st pos s p names
  +       (compile-or (rest body) txt s p names)))))
  +
  +(defun or-wrapper (expr ok result s p continuation failure)
  +  `(multiple-value-bind (,ok ,result ,s ,p) ,expr
  +     (if ,ok
  +         (value t ,result ,s ,p)
  +         ,(or continuation failure))))
   
   (defun compile-wrapped-form (wrapper form text orig-state orig-position s p names continuation)
     (with-gensyms (ok)
  
positive.code: (defun compile-progn (body txt st pos names)
    (unless (null body)
      (with-gensyms (s p)
        (compile-form-in-progn
         (first body)
         txt st pos s p names
         (compile-progn (rest body) txt s p names)))))
  
negative.code:             ((stringp form) (wrap (compile-string form text s p) (gensym "R")))
              (t form))))))
  
  (defun compile-expression (exp names)
    (with-gensyms (text state position)
      (cond
  