diff --git a/racket/collects/racket/generic.rkt b/racket/collects/racket/generic.rkt index 468b57e8b8..10cb4e9ea4 100644 --- a/racket/collects/racket/generic.rkt +++ b/racket/collects/racket/generic.rkt @@ -14,6 +14,8 @@ (provide define-generics define/generic + raise-support-error + (struct-out exn:fail:support) chaperone-generics impersonate-generics redirect-generics diff --git a/racket/collects/racket/private/dict.rkt b/racket/collects/racket/private/dict.rkt index c6eb9b0102..d474cfce02 100644 --- a/racket/collects/racket/private/dict.rkt +++ b/racket/collects/racket/private/dict.rkt @@ -316,9 +316,6 @@ (for/list ([k*v (in-dict-pairs d)]) k*v)) -(define (raise-support-error name s) - (raise-mismatch-error name "not implemented for " s)) - (define-primitive-generics (dict gen:dict prop:gen:dict prop:gen:dict-methods dict? dict-implements?) #:fast-defaults diff --git a/racket/collects/racket/private/generic.rkt b/racket/collects/racket/private/generic.rkt index e14ec8b818..5ff73a8bc0 100644 --- a/racket/collects/racket/private/generic.rkt +++ b/racket/collects/racket/private/generic.rkt @@ -9,7 +9,9 @@ (provide define-primitive-generics define-primitive-generics/derived - define/generic) + define/generic + raise-support-error + (struct-out exn:fail:support)) (begin-for-syntax @@ -383,11 +385,17 @@ #'(define (method-name . method-formals) (define proc-name proc) (unless proc-name - (raise-arguments-error 'method-name - (format "not implemented for ~e" - self-name))) + (raise-support-error 'method-name self-name)) method-apply))])) +(struct exn:fail:support exn:fail [] #:transparent) + +(define (raise-support-error name v) + (raise + (exn:fail:support + (format "~a: not implemented for ~e" name v) + (current-continuation-marks)))) + (define-syntax (check-generic-method stx) (syntax-case stx () [(check-generic-method diff --git a/racket/collects/racket/private/set.rkt b/racket/collects/racket/private/set.rkt index 1498fe34c6..8f37c3a7fc 100644 --- a/racket/collects/racket/private/set.rkt +++ b/racket/collects/racket/private/set.rkt @@ -386,9 +386,6 @@ (set-remove! s x))] [else (raise-support-error 'set-symmetric-difference! s)])) -(define (raise-support-error name s) - (raise-mismatch-error name "not implemented for " s)) - (define-sequence-syntax *in-set (lambda () #'in-set) (lambda (stx)