diff --git a/pkgs/racket-test-core/tests/racket/chaperone.rktl b/pkgs/racket-test-core/tests/racket/chaperone.rktl index 0232b6d4e8..66f4aad880 100644 --- a/pkgs/racket-test-core/tests/racket/chaperone.rktl +++ b/pkgs/racket-test-core/tests/racket/chaperone.rktl @@ -3400,6 +3400,26 @@ (test gen current-pseudo-random-generator) (test gen impersonated-current-pseudo-random-generator))) +;; ---------------------------------------- +;; Test keyword-argument procedures and impersonator properties + +(let () + (define (group-rows #:group x) 1) + + (define-values (impersonator-prop:contracted + has-impersonator-prop:contracted? + get-impersonator-prop:contracted) + (make-impersonator-property 'impersonator-prop:contracted)) + + (define group-rows* + (chaperone-procedure group-rows + (λ (#:group x) (list x)) + impersonator-prop:contracted 2)) + + (test #t procedure? group-rows*) + (test #t has-impersonator-prop:contracted? group-rows*) + (test 1 'apply (group-rows* #:group 10))) + ;; ---------------------------------------- (report-errs) diff --git a/racket/src/cs/rumble/impersonator.ss b/racket/src/cs/rumble/impersonator.ss index c8631932f5..998a2e5319 100644 --- a/racket/src/cs/rumble/impersonator.ss +++ b/racket/src/cs/rumble/impersonator.ss @@ -610,18 +610,13 @@ ;; ---------------------------------------- (define (set-impersonator-applicables!) - (struct-property-set! prop:procedure - (record-type-descriptor props-procedure-impersonator) - impersonate-apply) - (struct-property-set! prop:procedure - (record-type-descriptor props-procedure-chaperone) - impersonate-apply) - (struct-property-set! prop:procedure-arity - (record-type-descriptor props-procedure-impersonator) - 3) - (struct-property-set! prop:procedure-arity - (record-type-descriptor props-procedure-chaperone) - 3) + (let ([add (lambda (rtd) + (struct-property-set! prop:procedure rtd impersonate-apply) + (struct-property-set! prop:procedure-arity rtd 3))]) + (add (record-type-descriptor props-procedure-impersonator)) + (add (record-type-descriptor props-procedure-chaperone)) + (add (record-type-descriptor props-procedure~-impersonator)) + (add (record-type-descriptor props-procedure~-chaperone))) (struct-property-set! prop:procedure (record-type-descriptor impersonator-property-accessor-procedure)