chiark
/
gitweb
/
~mdw
/
sod
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
src/lexer-{proto,impl}.lisp: Add explicit recovery action to `error'.
[sod]
/
src
/
module-parse.lisp
diff --git
a/src/module-parse.lisp
b/src/module-parse.lisp
index da1c47f15773c42a9e9e836cf7b8e891046feb6f..83828e680e072d93eb920ecce31244e61d18d613 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)
@@
-392,8
+398,10
@@
(defun parse-class-body (scanner pset name supers)
(nil (parse-raw-class-item sub-pset)))
(check-unused-properties sub-pset))))
(nil (error () #\})))
(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
(define-pluggable-parser module class (scanner pset)
;; `class' id `:' id-list class-body