An actual running implementation, which makes code that compiles.
[sod] / src / parser / scanner-token-impl.lisp
index 9535d3d..8ab427a 100644 (file)
 ;;;--------------------------------------------------------------------------
 ;;; 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)))))))
@@ -61,8 +67,9 @@
   (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