projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
silent non-toplevel DEFSTRUCT
[sbcl.git]
/
src
/
pcl
/
defcombin.lisp
diff --git
a/src/pcl/defcombin.lisp
b/src/pcl/defcombin.lisp
index
eac8820
..
c4dc449
100644
(file)
--- a/
src/pcl/defcombin.lisp
+++ b/
src/pcl/defcombin.lisp
@@
-221,7
+221,7
@@
(defvar *long-method-combination-functions* (make-hash-table :test 'eq))
(defvar *long-method-combination-functions* (make-hash-table :test 'eq))
-(defun load-long-defcombin
+(defun load-long-defcombin
(type-name doc function args-lambda-list source-location)
(let* ((specializers
(list (find-class 'generic-function)
(type-name doc function args-lambda-list source-location)
(let* ((specializers
(list (find-class 'generic-function)
@@
-324,7
+324,12
@@
(method-group-specifiers declarations real-body)
(let (names specializer-caches cond-clauses required-checks order-cleanups)
(let ((nspecifiers (length method-group-specifiers)))
(method-group-specifiers declarations real-body)
(let (names specializer-caches cond-clauses required-checks order-cleanups)
(let ((nspecifiers (length method-group-specifiers)))
- (dolist (method-group-specifier method-group-specifiers)
+ (dolist (method-group-specifier method-group-specifiers
+ (push `(t (return-from .long-method-combination-function.
+ `(invalid-method-error , .method.
+ "~@<is applicable, but does not belong ~
+ to any method group~@:>")))
+ cond-clauses))
(multiple-value-bind (name tests description order required)
(parse-method-group-specifier method-group-specifier)
(declare (ignore description))
(multiple-value-bind (name tests description order required)
(parse-method-group-specifier method-group-specifier)
(declare (ignore description))
@@
-343,7
+348,8
@@
:format-arguments (list ',name))))
required-checks))
(loop (unless (and (constantp order)
:format-arguments (list ',name))))
required-checks))
(loop (unless (and (constantp order)
- (neq order (setq order (eval order))))
+ (neq order (setq order
+ (constant-form-value order))))
(return t)))
(push (cond ((eq order :most-specific-first)
`(setq ,name (nreverse ,name)))
(return t)))
(push (cond ((eq order :most-specific-first)
`(setq ,name (nreverse ,name)))
@@
-431,7
+437,7
@@
(let ((intercept-rebindings
(let (rebindings)
(dolist (arg args-lambda-list (nreverse rebindings))
(let ((intercept-rebindings
(let (rebindings)
(dolist (arg args-lambda-list (nreverse rebindings))
- (unless (member arg lambda-list-keywords)
+ (unless (member arg lambda-list-keywords :test #'eq)
(typecase arg
(symbol (push `(,arg ',arg) rebindings))
(cons
(typecase arg
(symbol (push `(,arg ',arg) rebindings))
(cons