anchor.diff:    (data nil :read-only t :type string)
     (size nil :read-only t :type unsigned-byte)
     (cursor 0 :type unsigned-byte)
  -  (checkpoints
  -   (make-array 8 :element-type 'unsigned-byte :adjustable t :fill-pointer 0)
  -   :type (vector unsigned-byte *))
  +  (checkpoints nil)
     attachment)
   
   (defgeneric create-parser-context (input &rest args))
  
positive.code: 
  (declaim (inline checkpoint))
  (defun checkpoint (ctx)
    (vector-push-extend (parser-context-cursor ctx) (parser-context-checkpoints ctx)))
  
  (declaim (inline rollback))
  (defun rollback (ctx)
    (setf (parser-context-cursor ctx) (vector-pop (parser-context-checkpoints ctx))))
  
  (declaim (inline commit))
  (defun commit (ctx)
    (vector-pop (parser-context-checkpoints ctx)))
  
  
  ;;; Atom, Rule & Type Matching
  
negative.code: 		       (with-unique-names (ret)
  			 `(progn
  			    (checkpoint ,ctx)
  			    (let ((,ret
  				   (handler-case ,(compile-expr (cadr form))
  				     (parser-return (data)
  				       (let ((value (parser-return-value data)))
  					 (if value
  					     (commit ,ctx)
  					     (rollback ,ctx))
  				       (signal 'parser-return :value value))))))
  			      (if ,ret
  				  (commit ,ctx)
  				  (rollback ,ctx))
  