We remember the buffer-chain link, so that we can retrace our steps up to
the present. We also need the index at which we continue reading
characters; and the line and column numbers to resume from."
+ (scanner nil :type charbuf-scanner :read-only t)
(link nil :type charbuf-chain-link :read-only t)
(index 0 :type charbuf-index :read-only t)
(line 0 :type fixnum :read-only t)
(column 0 :type fixnum :read-only t))
+(defmethod file-location ((place charbuf-scanner-place))
+ (make-file-location (scanner-filename
+ (charbuf-scanner-place-scanner place))
+ (charbuf-scanner-place-line place)
+ (charbuf-scanner-place-column place)))
+
;;;--------------------------------------------------------------------------
;;; Main class.
(incf captures)
(unless tail
(setf tail (make-charbuf-chain-link :buf buf :size size)))
- (make-charbuf-scanner-place :link tail :index index
+ (make-charbuf-scanner-place :scanner scanner :link tail :index index
:line line :column column)))
(defmethod scanner-restore-place ((scanner charbuf-scanner) place)
(let* ((slices nil)
(place-b (or place-b
(with-slots (index tail) scanner
- (make-charbuf-scanner-place :link tail
+ (make-charbuf-scanner-place :scanner scanner
+ :link tail
:index index))))
(last-link (charbuf-scanner-place-link place-b)))
(flet ((bad ()