* module/oop/goops.scm (multiple-arity-dispatcher): Fix dispatch for
max-arity+1 when a generic is already in multiple-arity dispatch.
Fixes #24454.
* test-suite/tests/goops.test ("dispatch"): Add test.
#`(case-lambda
#,@(build-clauses #'(arg ...))
(args (apply miss args)))))))
- (arity-case (vector-length fv) 20 dispatch
+ (arity-case (1- (vector-length fv)) 20 dispatch
(lambda args
(let ((nargs (length args)))
(if (< nargs (vector-length fv))
(class (<a>) (slot) #:name '<static-sub> #:static-slot-allocation? #t))
(pass-if-equal "non-static subclass" '(a d)
(map slot-definition-name (class-slots (class (<a>) (d) #:name '<ad>))))))
+
+(with-test-prefix "dispatch"
+ (pass-if-equal "multi-arity dispatch" 0
+ (eval '(begin
+ (define-method (dispatch (x <number>) . args) 0)
+ (dispatch 1)
+ (dispatch 1 2)
+ ;; By now "dispatch" is forced into multi-arity mode. Test
+ ;; that the multi-arity dispatcher works:
+ (dispatch 1 2 3))
+ (current-module))))