diff --git a/pkgs/racket-test-core/tests/racket/procs.rktl b/pkgs/racket-test-core/tests/racket/procs.rktl index 3c9eb2d2f0..5ec739d07f 100644 --- a/pkgs/racket-test-core/tests/racket/procs.rktl +++ b/pkgs/racket-test-core/tests/racket/procs.rktl @@ -363,8 +363,8 @@ ;; ---------------------------------------- ;; Check error for non-procedures -(err/rt-test (1 2 3) (lambda (x) (regexp-match? "not a procedure" (exn-message)))) -(err/rt-test (1 #:x 2 #:y 3) (lambda (x) (regexp-match? "not a procedure" (exn-message)))) +(err/rt-test (1 2 3) (lambda (x) (regexp-match? "not a procedure" (exn-message x)))) +(err/rt-test (1 #:x 2 #:y 3) (lambda (x) (regexp-match? "not a procedure" (exn-message x)))) ;; ---------------------------------------- ;; Check error reporting of `procedure-reduce-keyword-arity' @@ -456,6 +456,36 @@ (test 8 (lambda () (ba)))) +;; ---------------------------------------- +;; Test that procedure-rename doesn't accidentally convert procedures +;; into methods or methods into procedures. + +(let () + (define (f a b c d e #:x [x 5]) a) + (err/rt-test (f) + (lambda (exn) + (regexp-match? #rx"expected: 5 plus an optional argument with keyword #:x" + (exn-message exn)))) + + ;; procedure-rename shouldn't change this arity string + (define f* (procedure-rename f 'f)) + (err/rt-test (f*) + (lambda (exn) + (regexp-match? #rx"expected: 5 plus an optional argument with keyword #:x" + (exn-message exn)))) + + ;; but procedure->method should + (define fm (procedure->method f)) + (define fm* (procedure-rename fm 'fm)) + (err/rt-test (fm) + (lambda (exn) + (regexp-match? #rx"expected: 4 plus an optional argument with keyword #:x" + (exn-message exn)))) + (err/rt-test (fm*) + (lambda (exn) + (regexp-match? #rx"expected: 4 plus an optional argument with keyword #:x" + (exn-message exn))))) + ;; ---------------------------------------- (report-errs) diff --git a/racket/collects/racket/private/kw.rkt b/racket/collects/racket/private/kw.rkt index 4697f3d3b8..44d4dabaaa 100644 --- a/racket/collects/racket/private/kw.rkt +++ b/racket/collects/racket/private/kw.rkt @@ -1559,8 +1559,8 @@ (cond [(okp? proc) ((if (okm? proc) - make-optional-keyword-procedure - make-optional-keyword-method) + make-optional-keyword-method + make-optional-keyword-procedure) (keyword-procedure-checker proc) (keyword-procedure-proc proc) (keyword-procedure-required proc)