;;;--------------------------------------------------------------------------
;;; 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))
(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)))))))
(with-slots (type value captures tail line column) scanner
(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)
(with-slots (type value tail line column) scanner
tail place)))
(defmethod scanner-release-place ((scanner token-scanner) place)
+ (declare (ignore place))
(with-slots (captures) scanner
(decf captures)))