X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/blobdiff_plain/300a3f0a55f777216bcc7e9de833b28fb57104ac..70b33a7810c93bf411f10f37f5f8415d57b5413a:/src/module-parse.lisp diff --git a/src/module-parse.lisp b/src/module-parse.lisp index 9fa9a1f..bccc37b 100644 --- a/src/module-parse.lisp +++ b/src/module-parse.lisp @@ -237,7 +237,13 @@ (defun parse-class-body (scanner pset name supers) ;; class-item ::= property-set raw-class-item (with-parser-context (token-scanner-context :scanner scanner) (make-class-type name) - (let* ((class (make-sod-class name (mapcar #'find-sod-class supers) + (let* ((duff nil) + (class (make-sod-class name + (restart-case + (mapcar #'find-sod-class supers) + (continue () + (setf duff t) + (list (find-sod-class "SodObject")))) pset scanner)) (nick (sod-class-nickname class))) @@ -349,7 +355,7 @@ (defun parse-class-body (scanner pset name supers) (when (consp name) (cerror*-with-location scanner - "Method declarations must have function type.") + "Method declarations must have function type") (setf name (cdr name))) (parse-slot-item sub-pset base-type type name)) ((consp name) @@ -393,18 +399,19 @@ (defun parse-class-body (scanner pset name supers) (check-unused-properties sub-pset)))) (nil (error () #\}))) (finalize-sod-class class) - (add-to-module *module* class))))))) + (unless duff + (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)))))))))))