chiark / gitweb /
src/module-parse.lisp: Some minor reformattings.
[sod] / src / module-parse.lisp
index da1c47f15773c42a9e9e836cf7b8e891046feb6f..a3396828ce1d1785e84f3f396de3f0e056a40f21 100644 (file)
@@ -168,16 +168,16 @@ (define-pluggable-parser module set (scanner pset)
                (lisp (let ((module-pset (module-pset *module*)))
                        (when pset
                          (pset-map (lambda (prop)
-                                     (add-property module-pset
-                                                   (p-name prop)
-                                                   (p-value prop)
-                                                   :type (p-type prop)
-                                                   :location (p-location prop))
+                                     (add-property
+                                      module-pset
+                                      (p-name prop) (p-value prop)
+                                      :type (p-type prop)
+                                      :location (p-location prop))
                                      (setf (p-seenp prop) t))
                                    pset))
                        (parse (skip-many (:min 0)
                                 (error (:ignore-unconsumed t)
-                                  (parse-property scanner module-pset)
+                                    (parse-property scanner module-pset)
                                   (skip-until (:keep-end t) #\, #\;))
                                 #\,))))
                #\;))))
@@ -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)))
 
@@ -323,8 +329,7 @@ (defun parse-class-body (scanner pset name supers)
                 ;;     [`class'] -!- slot-initializer-list `;'
                 ;;
                 ;; slot-initializer ::= id `.' id [initializer]
-                (let ((parse-init (if must-init-p
-                                      #'parse-initializer
+                (let ((parse-init (if must-init-p #'parse-initializer
                                       (parser () (? (parse-initializer))))))
                   (parse (and (skip-many ()
                                 (seq ((name-a :id) #\. (name-b :id)
@@ -349,7 +354,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)
@@ -379,11 +384,9 @@ (defun parse-class-body (scanner pset name supers)
                                                             (car dc)
                                                             (cdr dc))))))
                            (and "class"
-                                (parse-initializer-item
-                                 sub-pset t
+                                (parse-initializer-item sub-pset t
                                  #'make-sod-class-initializer))
-                           (parse-initializer-item
-                            sub-pset nil
+                           (parse-initializer-item sub-pset nil
                             #'make-sod-instance-initializer)))))
 
        (parse (seq (#\{
@@ -392,8 +395,10 @@ (defun parse-class-body (scanner pset name supers)
                                  (nil (parse-raw-class-item sub-pset)))
                              (check-unused-properties sub-pset))))
                     (nil (error () #\})))
-                (finalize-sod-class class)
-                (add-to-module *module* class)))))))
+                (unless (finalize-sod-class class)
+                  (setf duff t))
+                (unless duff
+                  (add-to-module *module* class))))))))
 
 (define-pluggable-parser module class (scanner pset)
   ;; `class' id `:' id-list class-body