;; Reader utilities
(defsubst json-advance (&optional n)
- "Skip past the following N characters."
+ "Advance N characters forward."
(forward-char n))
(defsubst json-peek ()
;; this clause overlaps with the next one and therefore has to
;; come first.
((looking-at
- (rx (group (any "Dd") (any "89ABab") (= 2 (any "0-9A-Fa-f")))
- "\\u" (group (any "Dd") (any "C-Fc-f") (= 2 (any "0-9A-Fa-f")))))
+ (rx (group (any "Dd") (any "89ABab") (= 2 (any xdigit)))
+ "\\u" (group (any "Dd") (any "C-Fc-f") (= 2 (any xdigit)))))
(json-advance 10)
(json--decode-utf-16-surrogates
(string-to-number (match-string 1) 16)
(string-to-number (match-string 2) 16)))
- ((looking-at "[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]")
+ ((looking-at (rx (= 4 xdigit)))
(let ((hex (match-string 0)))
(json-advance 4)
(string-to-number hex 16)))
(defun json-read-string ()
"Read the JSON string at point."
- (unless (char-equal (json-peek) ?\")
+ (unless (= (json-peek) ?\")
(signal 'json-string-format (list "doesn't start with `\"'!")))
;; Skip over the '"'
(json-advance)
(let ((characters '())
(char (json-peek)))
- (while (not (char-equal char ?\"))
- (push (if (char-equal char ?\\)
+ (while (not (= char ?\"))
+ (push (if (= char ?\\)
(json-read-escaped-char)
(json-pop))
characters)