anchor.diff:  			   string
   			   (coerce string 'simple-string))))
   
  -(declaim (inline next-char next-char/ decr-char current-char peek-behind-char fetch-char subseq-buffer-mark mark-buffer mark-length skip-to skip-to/ skip-until skip-until/ skip-until* skip-spaces subseq-until subseq-until/ subseq-tree char-in-arr))
  +(declaim (inline next-char next-char/ decr-char current-char peek-behind-char fetch-char subseq-buffer-mark mark-buffer mark-length skip-to skip-to/ skip-until skip-until/ skip-until* subseq-until subseq-until/ subseq-tree char-in-arr))
   (defun next-char (buffer)
     (declare (type buffer buffer))
     "Sets the pointer to the next char in the buffer"
  
positive.code:  See #'parse for the normal variant.
   See #'build-key-container for a way to build new keyword containers."
    (let ((buffer (build-buffer json-string)))
      (skip-spaces buffer)
      (read-partial-object buffer container)))
  
  (defun parse (string &rest keywords-to-read)
    "Reads a json object from the given string, with the given keywords being the keywords which are fetched from the object.
   All parse functions assume <string> is not an empty json object.  (string/= string \"{}\")"
    (let ((buffer (build-buffer string)))
      (skip-spaces buffer)
      (if keywords-to-read
  	(read-partial-object buffer (apply #'build-character-tree keywords-to-read))
  	(read-value buffer))))
  
negative.code: ;;;; buffer support
  ;;;;;;;;;;;;;;;;;;;
  
  (defstruct buffer
    "A string-buffer which is used to operate on the strings
   The use of a string-buffer allows us to read the data in bulk, and to operate on it, by using simple index manipulations.
  