Christophe Weblog Wiki Code Publications Music
call NO-APPLICABLE-METHOD in the appropriate place
[specializable.git] / specializable.lisp
index 5a0c09606cef65dce583e9e8052074cd1015584d..1df14d403054fd46587736e6fa672688d4d62b11 100644 (file)
@@ -20,6 +20,7 @@
 (in-package "SPECIALIZABLE")
 
 (defclass extended-specializer (sb-mop:specializer)
+  ;; FIXME: this doesn't actually do quite what I wanted.
   ((direct-methods-table :allocation :class
                          :initform nil :accessor direct-methods-table)))
 
                             args))))
 
 (defun compute-effective-method-function (gf methods)
-  (let* ((mc (sb-mop:generic-function-method-combination gf))
-         (sb-pcl::*applicable-methods* methods)
-         (em (sb-mop:compute-effective-method gf mc methods)))
-    (sb-pcl::make-effective-method-function gf em)))
+  (if (null methods)
+      (lambda (&rest args) (apply #'no-applicable-method gf args))
+      (let* ((mc (sb-mop:generic-function-method-combination gf))
+             (sb-pcl::*applicable-methods* methods)
+             (em (sb-mop:compute-effective-method gf mc methods)))
+        (sb-pcl::make-effective-method-function gf em))))
 
 ;; new, not in closette
 (defgeneric generalizer-of-using-class (generic-function object))