X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/aa14a4cddcb96b681d5c19a2ec8bad382f43b264..d5fdd49e70b734b791eb907706f92da5775e2a8b:/src/parser/scanner-token-impl.lisp diff --git a/src/parser/scanner-token-impl.lisp b/src/parser/scanner-token-impl.lisp index bf5e394..7713ec9 100644 --- a/src/parser/scanner-token-impl.lisp +++ b/src/parser/scanner-token-impl.lisp @@ -7,7 +7,7 @@ ;;;----- Licensing notice --------------------------------------------------- ;;; -;;; This file is part of the Sensble Object Design, an object system for C. +;;; This file is part of the Sensible Object Design, an object system for C. ;;; ;;; SOD is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by @@ -28,17 +28,22 @@ ;;;-------------------------------------------------------------------------- ;;; 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)) - (with-slots (type) scanner + (with-slots ((type %type)) 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) @@ -50,22 +55,24 @@ (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)) - (with-slots (type value captures tail line column) scanner + (with-slots ((type %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 + (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) @@ -73,6 +80,7 @@ tail place))) (defmethod scanner-release-place ((scanner token-scanner) place) + (declare (ignore place)) (with-slots (captures) scanner (decf captures)))