From 8ae7e16a62f1ea146e95d64d8cba02b6de652e81 Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Mon, 8 Apr 2013 11:19:44 -0400 Subject: [PATCH] Better error message for non-existent generics groups. Closes PR13671. (cherry picked from commit aac22e1ce5210be594d58f30d223de3715e2392a) --- collects/racket/private/define-struct.rkt | 3 ++- collects/tests/generic/errors.rkt | 14 ++++++++++++++ collects/tests/generic/tests.rkt | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 collects/tests/generic/errors.rkt diff --git a/collects/racket/private/define-struct.rkt b/collects/racket/private/define-struct.rkt index 676cd74f1d..8d763759e3 100644 --- a/collects/racket/private/define-struct.rkt +++ b/collects/racket/private/define-struct.rkt @@ -319,7 +319,8 @@ (raise-syntax-error #f "not a name for a generics group" gen:foo gen:foo)) - (unless (identifier? gen:foo) (bad-generics)) + (unless (and (identifier? gen:foo) (identifier-binding gen:foo)) + (bad-generics)) (define gen:foo-val (syntax-local-value gen:foo)) (unless (and (list? gen:foo-val) (>= (length gen:foo-val) 1)) diff --git a/collects/tests/generic/errors.rkt b/collects/tests/generic/errors.rkt new file mode 100644 index 0000000000..062e203492 --- /dev/null +++ b/collects/tests/generic/errors.rkt @@ -0,0 +1,14 @@ +#lang racket/base + +(require racket/generic unstable/macro-testing) + +(module+ test + (require rackunit) + + (check-exn #rx"not a name for a generics group" + (lambda () (convert-compile-time-error + (struct foo () #:methods 3)))) + (check-exn #rx"not a name for a generics group" + (lambda () (convert-compile-time-error + (struct foo () #:methods bad)))) + ) diff --git a/collects/tests/generic/tests.rkt b/collects/tests/generic/tests.rkt index cd58377429..b0d58c37ac 100644 --- a/collects/tests/generic/tests.rkt +++ b/collects/tests/generic/tests.rkt @@ -9,6 +9,7 @@ (submod "equal+hash.rkt" test) (submod "custom-write.rkt" test) (submod "defaults.rkt" test) + (submod "errors.rkt" test) "syntax-errors.rkt" "base-interfaces.rkt" "contract.rkt"