diff --git a/collects/scheme/private/class-internal.ss b/collects/scheme/private/class-internal.ss index 97c9927d5d..f970efd1d9 100644 --- a/collects/scheme/private/class-internal.ss +++ b/collects/scheme/private/class-internal.ss @@ -2402,22 +2402,21 @@ (define method-ht (class-method-ht cls)) (define beta-methods (class-beta-methods cls)) (define meth-flags (class-meth-flags cls)) - (define (check-overrideable m) - (let ([index (hash-ref method-ht m #f)]) - (unless index - (failed "no public method ~a" m)) - (let ([flag (vector-ref meth-flags index)]) - (when (eq? flag 'final) - (failed "method ~a is final, not overrideable" m)) - (when (eq? flag 'augmentable) - (failed "method ~a is augmentable, not overrideable" m))))) (unless (class? cls) (failed "not a class")) (for ([m (class/c-methods ctc)]) (unless (hash-ref method-ht m #f) (failed "no public method ~a" m))) (for ([m (class/c-overrides ctc)]) - (check-overrideable m)) + (let ([index (hash-ref method-ht m #f)]) + (unless index + (failed "no public method ~a" m)) + (let ([vec (vector-ref beta-methods index)]) + (unless (zero? (vector-length vec)) + (failed "method ~a was previously augmentable" m))) + (let ([flag (vector-ref meth-flags index)]) + (when (eq? flag 'final) + (failed "method ~a is final, not overrideable" m))))) (for ([m (class/c-augments ctc)]) (let ([index (hash-ref method-ht m #f)]) (unless index @@ -2426,7 +2425,14 @@ (when (zero? (vector-length vec)) (failed "method ~a has never been augmentable" m))))) (for ([s (class/c-supers ctc)]) - (check-overrideable s)) + (let ([index (hash-ref method-ht s #f)]) + (unless index + (failed "no public method ~a" s)) + (let ([flag (vector-ref meth-flags index)]) + (when (eq? flag 'final) + (failed "method ~a is final, not overrideable" s)) + (when (eq? flag 'augmentable) + (failed "method ~a is augmentable, not overrideable" s))))) (for ([i (class/c-inners ctc)]) (let ([index (hash-ref method-ht i #f)]) (unless index