anchor.diff:     :object-key #'accumulator-add-key
      :object-value #'accumulator-add-value
      :end-of-object #'accumulator-get
  -   :beginning-of-string #'init-accumulator
  -   :string-char #'accumulator-add
  -   :end-of-string #'accumulator-get-string
  +   :beginning-of-string #'init-string-stream-accumulator
  +   :string-char #'string-stream-accumulator-add
  +   :end-of-string #'string-stream-accumulator-get
      :aggregate-scope (union *aggregate-scope-variables*
                              '(*accumulator* *accumulator-last*))
      :internal-decoder #'decode-json))
  
positive.code:    :object-key #'accumulator-add-key-or-set-prototype
     :object-value #'accumulator-add-value-or-set-prototype
     :end-of-object #'accumulator-get-object
     :beginning-of-string #'init-accumulator
     :string-char #'accumulator-add
     :end-of-string #'accumulator-get-string
     :aggregate-scope (union *aggregate-scope-variables*
                             '(*accumulator* *accumulator-last*))
     :object-scope (union *object-scope-variables*
  
negative.code: is encountered which is greater than the application's CHAR-CODE-LIMIT
  or for which CODE-CHAR returns NIL."))
  
  (defmacro escaped-char-dispatch (char &key code-handler default-handler)
    "Compiles the escaped character alist to a (CASE ...) match expression."
    `(case ,char
       ,@(loop for (c . unescaped) in +json-lisp-escaped-chars+
            if (characterp unescaped)
              collect (list c unescaped)
            else if (consp unescaped)
              collect
                (destructuring-bind ((len rdx) &body body) code-handler
                  (destructuring-bind (len-v . rdx-v) unescaped
                    `(,c (let ((,len ,len-v) (,rdx ,rdx-v)) ,@body)))))
       (t ,default-handler)))
  
  (defun read-json-string-char (stream)
    "Read a JSON String char (or escape sequence) from the STREAM and
  return it.  If an end of string (unescaped quote) is encountered,
  