chiark
/
gitweb
/
~mdw
/
sod
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update automatically managed build utilities.
[sod]
/
src
/
parser
/
scanner-token-impl.lisp
diff --git
a/src/parser/scanner-token-impl.lisp
b/src/parser/scanner-token-impl.lisp
index bf5e39400628d47a16eaf3c9a094c84b1411172a..7629b2d93cd8f49a700cfef930cb807523fdd16a 100644
(file)
--- a/
src/parser/scanner-token-impl.lisp
+++ b/
src/parser/scanner-token-impl.lisp
@@
-28,17
+28,22
@@
(cl:in-package #:sod-parser)
;;;--------------------------------------------------------------------------
;;; Token scanner implementation.
;;;--------------------------------------------------------------------------
;;; Token scanner implementation.
+(defmethod file-location ((place token-scanner-place))
+ (make-file-location (scanner-filename (token-scanner-place-scanner place))
+ (token-scanner-place-line place)
+ (token-scanner-place-column place)))
+
(defmethod shared-initialize :after
((scanner token-scanner) slot-names &key)
(declare (ignore slot-names))
(scanner-step scanner))
(defmethod scanner-at-eof-p ((scanner token-scanner))
(defmethod shared-initialize :after
((scanner token-scanner) slot-names &key)
(declare (ignore slot-names))
(scanner-step scanner))
(defmethod scanner-at-eof-p ((scanner token-scanner))
- (with-slots (
type
) scanner
+ (with-slots (
(type %type)
) scanner
(eq type :eof)))
(defmethod scanner-step ((scanner token-scanner))
(eq type :eof)))
(defmethod scanner-step ((scanner token-scanner))
- (with-slots (
type
value tail captures line column) scanner
+ (with-slots (
(type %type)
value tail captures line column) scanner
(acond ((and tail (token-scanner-place-next tail))
(setf type (token-scanner-place-type it)
value (token-scanner-place-value it)
(acond ((and tail (token-scanner-place-next tail))
(setf type (token-scanner-place-type it)
value (token-scanner-place-value it)
@@
-50,22
+55,24
@@
(defmethod scanner-step ((scanner token-scanner))
(setf type ty
value val)
(if (plusp captures)
(setf type ty
value val)
(if (plusp captures)
- (let ((next (make-token-scanner-place
- :type ty :value val
- :line line :column column)))
+ (let ((next (make-token-scanner-place :scanner scanner
+ :type ty :value val
+ :line line
+ :column column)))
(setf (token-scanner-place-next tail) next
tail next))
(setf tail nil)))))))
(defmethod scanner-capture-place ((scanner token-scanner))
(setf (token-scanner-place-next tail) next
tail next))
(setf tail nil)))))))
(defmethod scanner-capture-place ((scanner token-scanner))
- (with-slots (
type
value captures tail line column) scanner
+ (with-slots (
(type %type)
value captures tail line column) scanner
(incf captures)
(or tail
(incf captures)
(or tail
- (setf tail (make-token-scanner-place
- :type type :value value :line line :column column)))))
+ (setf tail (make-token-scanner-place :scanner scanner
+ :type type :value value
+ :line line :column column)))))
(defmethod scanner-restore-place ((scanner token-scanner) place)
(defmethod scanner-restore-place ((scanner token-scanner) place)
- (with-slots (
type
value tail line column) scanner
+ (with-slots (
(type %type)
value tail line column) scanner
(setf type (token-scanner-place-type place)
value (token-scanner-place-value place)
line (token-scanner-place-line place)
(setf type (token-scanner-place-type place)
value (token-scanner-place-value place)
line (token-scanner-place-line place)
@@
-73,6
+80,7
@@
(defmethod scanner-restore-place ((scanner token-scanner) place)
tail place)))
(defmethod scanner-release-place ((scanner token-scanner) place)
tail place)))
(defmethod scanner-release-place ((scanner token-scanner) place)
+ (declare (ignore place))
(with-slots (captures) scanner
(decf captures)))
(with-slots (captures) scanner
(decf captures)))