chiark
/
gitweb
/
~mdw
/
sod
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
An actual running implementation, which makes code that compiles.
[sod]
/
src
/
parser
/
scanner-charbuf-impl.lisp
diff --git
a/src/parser/scanner-charbuf-impl.lisp
b/src/parser/scanner-charbuf-impl.lisp
index 86dc999f21306a646272d8d23b5857befff2b25b..272c7ed18e97516e6034f0bbe7b59b1eecad43fd 100644
(file)
--- a/
src/parser/scanner-charbuf-impl.lisp
+++ b/
src/parser/scanner-charbuf-impl.lisp
@@
-67,11
+67,18
@@
(defstruct charbuf-scanner-place
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."
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))
(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.
;;;--------------------------------------------------------------------------
;;; Main class.
@@
-317,7
+324,7
@@
(defmethod scanner-capture-place ((scanner charbuf-scanner))
(incf captures)
(unless tail
(setf tail (make-charbuf-chain-link :buf buf :size size)))
(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)
:line line :column column)))
(defmethod scanner-restore-place ((scanner charbuf-scanner) place)
@@
-367,7
+374,8
@@
(defmethod scanner-interval
(let* ((slices nil)
(place-b (or place-b
(with-slots (index tail) scanner
(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 ()
:index index))))
(last-link (charbuf-scanner-place-link place-b)))
(flet ((bad ()