chiark
/
gitweb
/
~mdw
/
sod
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
src/module-parse.lisp (parse-class-body): Recover from `unknown class' error.
[sod]
/
src
/
module-parse.lisp
diff --git
a/src/module-parse.lisp
b/src/module-parse.lisp
index da1c47f15773c42a9e9e836cf7b8e891046feb6f..bccc37b71ace3714b4fe85135238bca1243b67b6 100644
(file)
--- 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)
;; 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)))
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
(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)
(setf name (cdr name)))
(parse-slot-item sub-pset base-type type name))
((consp name)
@@
-393,7
+399,8
@@
(defun parse-class-body (scanner pset name supers)
(check-unused-properties sub-pset))))
(nil (error () #\})))
(finalize-sod-class class)
(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
(define-pluggable-parser module class (scanner pset)
;; `class' id `:' id-list class-body