X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/blobdiff_plain/65e5cd247055593b225dbedfadd4e84ee1d63daa..ffc2a7b8364cc459ff686cfce645079b52d11466:/src/module-parse.lisp diff --git a/src/module-parse.lisp b/src/module-parse.lisp index 83cc0ad..da1c47f 100644 --- a/src/module-parse.lisp +++ b/src/module-parse.lisp @@ -108,11 +108,14 @@ (define-module (pathname :location location :truename truename) :char-scanner char-scanner))) (with-default-error-location (scanner) (with-parser-context (token-scanner-context :scanner scanner) - (parse (skip-many () - (seq ((pset (parse-property-set scanner)) - (nil (error () - (plug module scanner pset)))) - (check-unused-properties pset)))))))))) + (multiple-value-bind (result winp consumedp) + (parse (skip-many () + (seq ((pset (parse-property-set scanner)) + (nil (error () + (plug module scanner pset)))) + (check-unused-properties pset)))) + (declare (ignore consumedp)) + (unless winp (syntax-error scanner result))))))))) (define-pluggable-parser module test (scanner pset) ;; `demo' string `;' @@ -393,15 +396,15 @@ (defun parse-class-body (scanner pset name supers) (add-to-module *module* class))))))) (define-pluggable-parser module class (scanner pset) - ;; `class' id [`:' id-list] class-body + ;; `class' id `:' id-list class-body ;; `class' id `;' (with-parser-context (token-scanner-context :scanner scanner) (parse (seq ("class" (name :id) (nil (or (seq (#\;) (make-class-type name)) - (seq ((supers (? (seq (#\: (ids (list () :id #\,))) - ids))) + (seq ((supers (seq (#\: (ids (list () :id #\,))) + ids)) (nil (parse-class-body scanner pset name supers)))))))))))