+ (let ((index (string-scanner-index scanner)))
+ (setf (values (string-scanner-line scanner)
+ (string-scanner-column scanner))
+ (update-position (char (string-scanner-string scanner) index)
+ (string-scanner-line scanner)
+ (string-scanner-column scanner))
+ (string-scanner-index scanner) (1+ index))))
+
+(defmethod scanner-unread ((scanner string-scanner) char)
+ (let ((index (1- (string-scanner-index scanner))))
+ (setf (values (string-scanner-line scanner)
+ (string-scanner-column scanner))
+ (backtrack-position (char (string-scanner-string scanner) index)
+ (string-scanner-line scanner)
+ (string-scanner-column scanner))
+ (string-scanner-index scanner) index)))
+
+(defmethod scanner-filename ((scanner string-scanner))
+ (string-scanner-filename scanner))
+(defmethod scanner-line ((scanner string-scanner))
+ (string-scanner-line scanner))
+(defmethod scanner-column ((scanner string-scanner))
+ (string-scanner-column scanner))
+(defmethod file-location ((scanner string-scanner))
+ (make-file-location (string-scanner-filename scanner)
+ (string-scanner-line scanner)
+ (string-scanner-column scanner)))