From 7f5a2b26484a84d79acf06d97c6ea3919c89b9b7 Mon Sep 17 00:00:00 2001 From: sorawee Date: Fri, 19 Jun 2020 05:29:51 -0700 Subject: [PATCH] disallow bogus mode arguments and fix related bugs Fix #131: - Raise a syntax error when bogus mode arguments are given. - Fix a bug where `extend-final` and `augment-final` are not recognized - Document the `public` mode which was already supported but not documented. - Clarify the default mode when `maybe-mode` is not given. --- .../scribblings/scribble/manual.scrbl | 12 ++++++--- scribble-lib/info.rkt | 2 +- .../scribble/private/manual-class.rkt | 26 ++++++++++++------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/scribble-doc/scribblings/scribble/manual.scrbl b/scribble-doc/scribblings/scribble/manual.scrbl index bee92093..e7cf59c3 100644 --- a/scribble-doc/scribblings/scribble/manual.scrbl +++ b/scribble-doc/scribblings/scribble/manual.scrbl @@ -1609,14 +1609,15 @@ accepted and propagated to the superclass.} ([maybe-link code:blank (code:line #:link-target? link-target?-expr)] [maybe-mode code:blank + (code:line #:mode public) + (code:line #:mode public-final) (code:line #:mode override) (code:line #:mode override-final) - (code:line #:mode public-final) (code:line #:mode augment) (code:line #:mode augment-final) - (code:line #:mode pubment) (code:line #:mode extend) - (code:line #:mode extend-final)])]{ + (code:line #:mode extend-final) + (code:line #:mode pubment)])]{ Like @racket[defproc], but for a method within a @racket[defclass] or @racket[definterface] body. @@ -1626,7 +1627,10 @@ method from a superclass, and so on. (For these purposes, use @racket[#:mode override] when refining a method of an implemented interface.) The @racket[extend] mode is like @racket[override], but the description of the method should describe only extensions to the -superclass implementation.} +superclass implementation. When @racket[maybe-mode] is not supplied, +it defaults to @racket[public]. + +@history[#:changed "1.35" @elem{Added a check against invalid @racket[maybe-mode].}]} @defform[(defmethod* maybe-mode maybe-link ([(id arg-spec ...) diff --git a/scribble-lib/info.rkt b/scribble-lib/info.rkt index d72abc33..a6cf7305 100644 --- a/scribble-lib/info.rkt +++ b/scribble-lib/info.rkt @@ -23,4 +23,4 @@ (define pkg-authors '(mflatt eli)) -(define version "1.34") +(define version "1.35") diff --git a/scribble-lib/scribble/private/manual-class.rkt b/scribble-lib/scribble/private/manual-class.rkt index a9358f2c..855375c5 100644 --- a/scribble-lib/scribble/private/manual-class.rkt +++ b/scribble-lib/scribble/private/manual-class.rkt @@ -425,26 +425,32 @@ [name1 (car (syntax->list #'(name ...)))]) (with-syntax ([(extra ...) (let ([finality - (lambda () + (lambda (prefix) (case (syntax-e #'mode) [(override-final public-final extend-final) - #'(" This method is final, so it cannot be overiddden.")] + #`(#,prefix "This method is final, so it cannot be overiddden.")] [(augment-final) - #'(" This method is final, so it cannot be augmented.")] + #`(#,prefix "This method is final, so it cannot be augmented.")] [else null]))]) (case (syntax-e #'mode) [(pubment) #'((t "Refine this method with " (racket augment) "."))] - [(override override-final extend augment) - #`((t (case (syntax-e #'mode) - [(override override-final) "Overrides "] - [(extend extend-final) "Extends "] - [(augment augment-final) "Augments "]) + [(override + override-final + extend + extend-final + augment + augment-final) + #`((t #,(case (syntax-e #'mode) + [(override override-final) "Overrides "] + [(extend extend-final) "Extends "] + [(augment augment-final) "Augments "]) (*xmethod/super (quote-syntax/loc cname) 'name1) "." - #,@(finality)))] - [else null]))]) + #,@(finality " ")))] + [(public public-final) #`((t #,@(finality "")))] + [else (raise-syntax-error #f "unrecognized mode" #'mode)]))]) #'(make-meth '(name ...) 'mode (lambda ()