chiark / gitweb /
doc/*.tex: Add stubs for `file-location' reader methods.
[sod] / src / module-parse.lisp
index 747bdf75157c2905b1906b9857ab73a8525dcb4d..df058bee46bc179b69181dd2dab942d65cdc1d28 100644 (file)
@@ -141,7 +141,7 @@ (define-pluggable-parser module file (scanner pset)
   (declare (ignore pset))
   (flet ((common (name type what thunk)
           (when name
-            (find-file scanner
+            (find-file (pathname (scanner-filename scanner))
                        (merge-pathnames name
                                         (make-pathname :type type
                                                        :case :common))
@@ -226,7 +226,7 @@ (define-pluggable-parser class-item initfrags (scanner class pset)
     (parse (seq ((make (or (seq ("init") #'make-sod-class-initfrag)
                           (seq ("teardown") #'make-sod-class-tearfrag)))
                 (frag (parse-delimited-fragment scanner #\{ #\})))
-            (funcall make class frag pset scanner)))))
+            (funcall make class frag pset :location scanner)))))
 
 (define-pluggable-parser class-item initargs (scanner class pset)
   ;; initarg-item ::= `initarg' declspec+ list[init-declarator]
@@ -243,7 +243,9 @@ (define-pluggable-parser class-item initargs (scanner class pset)
                          (make-sod-user-initarg class
                                                 (cdr declarator)
                                                 (car declarator)
-                                                pset init scanner))
+                                                pset
+                                                :default init
+                                                :location scanner))
                        #\,))
                 (nil (must #\;)))))))
 
@@ -282,7 +284,8 @@ (defun parse-class-body (scanner pset name supers)
                                 (unless (pset-get pset "nick")
                                   (add-property pset "nick" var :type :id))
                                 var)))
-          (class (make-sod-class synthetic-name superclasses pset scanner))
+          (class (make-sod-class synthetic-name superclasses pset
+                                 :location scanner))
           (nick (sod-class-nickname class)))
 
       (labels ((must-id ()
@@ -313,8 +316,8 @@ (defun parse-class-body (scanner pset name supers)
                 ;; Don't allow a method-body here if the message takes a
                 ;; varargs list, because we don't have a name for the
                 ;; `va_list' parameter.
-                (let ((message (make-sod-message class name type
-                                                 sub-pset scanner)))
+                (let ((message (make-sod-message class name type sub-pset
+                                                 :location scanner)))
                   (if (varargs-message-p message)
                       (parse #\;)
                       (parse (or #\; (parse-method-item sub-pset
@@ -330,7 +333,8 @@ (defun parse-class-body (scanner pset name supers)
                                         scanner #\{ #\}))))
                          (restart-case
                              (make-sod-method class sub-nick name type
-                                              body sub-pset scanner)
+                                              body sub-pset
+                                              :location scanner)
                            (continue () :report "Continue")))))
 
               (parse-initializer ()
@@ -350,14 +354,12 @@ (defun parse-class-body (scanner pset name supers)
                 (flet ((make-it (name type init)
                          (restart-case
                              (progn
-                               (make-sod-slot class name type
-                                              sub-pset scanner)
+                               (make-sod-slot class name type sub-pset
+                                              :location scanner)
                                (when init
-                                 (make-sod-instance-initializer class
-                                                                nick name
-                                                                init
-                                                                sub-pset
-                                                                scanner)))
+                                 (make-sod-instance-initializer
+                                  class nick name init sub-pset
+                                  :location scanner)))
                            (continue () :report "Continue"))))
                   (parse (and (error ()
                                   (seq ((init (? (parse-initializer))))
@@ -388,7 +390,8 @@ (defun parse-class-body (scanner pset name supers)
                                       (restart-case
                                           (funcall constructor class
                                                    name-a name-b init
-                                                   sub-pset scanner)
+                                                   sub-pset
+                                                   :location scanner)
                                         (continue () :report "Continue")))
                                   (skip-until () #\, #\;))
                                 #\,)