chiark / gitweb /
src/module-parse.lisp (read-module): Provide sensible default error-recovery.
[sod] / src / module-parse.lisp
index 4d4d818a4e1bc29a7262cb0eb174681852ec2f44..211f2c74a84209960b7ef2c46c7a0bae73c318b9 100644 (file)
@@ -35,7 +35,7 @@ (define-pluggable-parser module typename (scanner pset)
   (declare (ignore pset))
   (with-parser-context (token-scanner-context :scanner scanner)
     (parse (and "typename"
-               (skip-many (:min 1)
+               (skip-many ()
                  (seq ((id :id))
                    (if (gethash id *module-type-map*)
                        (cerror* "Type `~A' already defined" id)
@@ -112,7 +112,9 @@   (define-module (pathname :location location :truename truename)
                (parse (skip-many ()
                          (seq ((pset (parse-property-set scanner))
                                (nil (error ()
-                                      (plug module scanner pset))))
+                                        (plug module scanner pset)
+                                      (skip-until (:keep-end nil)
+                                        #\; #\}))))
                            (check-unused-properties pset))))
              (declare (ignore consumedp))
              (unless winp (syntax-error scanner result)))))))))
@@ -178,7 +180,7 @@ (define-pluggable-parser module set (scanner pset)
                        (parse (skip-many (:min 0)
                                 (error (:ignore-unconsumed t)
                                     (parse-property scanner module-pset)
-                                  (skip-until (:keep-end t) #\, #\;))
+                                  (skip-until () #\, #\;))
                                 #\,))))
                #\;))))
 
@@ -351,8 +353,7 @@ (defun parse-class-body (scanner pset name supers)
                 ;; definition; otherwise it might be a message or slot.
                 (cond ((not (typep type 'c-function-type))
                        (when (consp name)
-                         (cerror*-with-location
-                          scanner
+                         (cerror*
                           "Method declarations must have function type")
                          (setf name (cdr name)))
                        (parse-slot-item sub-pset base-type type name))