chiark / gitweb /
src/module-parse.lisp: Improve error recovery for `typename' items.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 26 May 2016 08:26:09 +0000 (09:26 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 8 Jun 2018 18:58:28 +0000 (19:58 +0100)
src/module-parse.lisp

index b72d7c80a25638cafbdbc8ade61dd0096962956c..cb3fcb26d6cd3b6fa1d2c2875e5e2287fbabce31 100644 (file)
@@ -36,14 +36,17 @@ (define-pluggable-parser module typename (scanner pset)
   (with-parser-context (token-scanner-context :scanner scanner)
     (parse (and "typename"
                (skip-many ()
-                 (seq ((id :id))
-                   (if (gethash id *module-type-map*)
-                       (cerror* "Type `~A' already defined" id)
-                       (add-to-module *module*
-                                      (make-instance 'type-item
-                                                     :name id))))
+                 (error ()
+                     (seq ((id :id))
+                       (if (or (gethash id *module-type-map*)
+                               (find-simple-c-type id))
+                           (cerror* "Type `~A' already defined" id)
+                           (add-to-module *module*
+                                          (make-instance 'type-item
+                                                         :name id))))
+                   (skip-until () #\, #\;))
                  #\,)
-               #\;))))
+               (must #\;)))))
 
 ;;; Fragments.