anchor.diff:   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))))
  
positive.code:            nil))
      (loop until (char-in-arr)
         do (next-char buffer))))
  
  (defun skip-spaces (buffer)
    "Skips spaces, tabs and newlines until a non-space character has been found"
    (when +do-skip-spaces+
      (loop while (find (current-char buffer) +space-characters+ :test #'eql)
         do (next-char buffer))))
  (define-compiler-macro skip-spaces (&whole whole buffer)
    (declare (ignore buffer))
    (when +do-skip-spaces+
      whole))
  
  ;; (defmacro skip-spaces (buffer)
  ;;   (declare (ignore buffer))
  ;;   nil)
  
  (defun subseq-until (buffer char-arr)
    "Returns a subsequence of stream, reading everything before a character belonging to char-arr is found.  The character which was found is not read from the 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.
  