projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.8.15.6:
[sbcl.git]
/
src
/
pcl
/
defcombin.lisp
diff --git
a/src/pcl/defcombin.lisp
b/src/pcl/defcombin.lisp
index
13781e5
..
060f4a0
100644
(file)
--- a/
src/pcl/defcombin.lisp
+++ b/
src/pcl/defcombin.lisp
@@
-25,10
+25,13
@@
\f
(defmacro define-method-combination (&whole form &rest args)
(declare (ignore args))
\f
(defmacro define-method-combination (&whole form &rest args)
(declare (ignore args))
- (if (and (cddr form)
- (listp (caddr form)))
- (expand-long-defcombin form)
- (expand-short-defcombin form)))
+ `(progn
+ (with-single-package-locked-error
+ (:symbol ',(second form) "defining ~A as a method combination"))
+ ,(if (and (cddr form)
+ (listp (caddr form)))
+ (expand-long-defcombin form)
+ (expand-short-defcombin form))))
\f
;;;; standard method combination
\f
;;;; standard method combination
@@
-298,6
+301,12
@@
;; parse-method-group-specifiers parse the method-group-specifiers
;; parse-method-group-specifiers parse the method-group-specifiers
+(define-condition long-method-combination-error
+ (reference-condition simple-error)
+ ()
+ (:default-initargs
+ :references (list '(:ansi-cl :macro define-method-combination))))
+
(defun wrap-method-group-specifier-bindings
(method-group-specifiers declarations real-body)
(let (names
(defun wrap-method-group-specifier-bindings
(method-group-specifiers declarations real-body)
(let (names
@@
-316,16
+325,19
@@
(if (and (equal ,specializer-cache .specializers.)
(not (null .specializers.)))
(return-from .long-method-combination-function.
(if (and (equal ,specializer-cache .specializers.)
(not (null .specializers.)))
(return-from .long-method-combination-function.
- '(error "More than one method of type ~S ~
- with the same specializers."
- ',name))
+ '(error 'long-method-combination-error
+ :format-control "More than one method of type ~S ~
+ with the same specializers."
+ :format-arguments (list ',name)))
(setq ,specializer-cache .specializers.))
(push .method. ,name))
cond-clauses)
(when required
(push `(when (null ,name)
(return-from .long-method-combination-function.
(setq ,specializer-cache .specializers.))
(push .method. ,name))
cond-clauses)
(when required
(push `(when (null ,name)
(return-from .long-method-combination-function.
- '(error "No ~S methods." ',name)))
+ '(error 'long-method-combination-error
+ :format-control "No ~S methods."
+ :format-arguments (list ',name))))
required-checks))
(loop (unless (and (constantp order)
(neq order (setq order (eval order))))
required-checks))
(loop (unless (and (constantp order)
(neq order (setq order (eval order))))