anchor.diff:  (in-package :clox)
  +
  +;; Conditions
   
   (define-condition keyword-argument-missing-error (error)
     ((field-name :initarg :field-name :reader field-name))
  
positive.code:              (format stream "Keyword argument ~A is required, but has not been supplied."
                       (field-name err)))))
  
  (define-condition clox-error (error)
    ((line :initarg :line :reader line)
     (message :reader clox-error-message)
     (place :reader place :initform -1 :initarg :place))
    (:report (lambda (err stream)
               (format stream "[line ~D : ~A] ~A: ~A~%" (line err) (place err)
                       (clox-error-name err) (clox-error-message err)))))
  
  (defmethod initialize-instance :after ((obj clox-error) &key &allow-other-keys)
    (when (eq (class-of obj) (find-class 'clox-error))
  
negative.code: (defmethod clox-error-name ((obj clox-error))
    (string-capitalize (type-of obj)))
  
  (defmethod clox-error-message ((obj unexpected-character-error))
    (format nil "Unexpected character: ~A." (wrong-character obj)))
  
  (defmacro handle-scanner-errors (error-flag &body body)
    "Evaluate BODY, setting error-flag to T if any error is encountered and reporting it, but invoking CONTINUE."
  