From 991cb5f3718cf86f0d3fec3765f4e976ce2a822d Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Fri, 18 May 2012 17:20:00 -0400 Subject: [PATCH] Hide #:coerce-method-table from the public generics API. --- collects/racket/generics.rkt | 28 ++----------------- collects/scribblings/reference/generics.scrbl | 13 +-------- 2 files changed, 4 insertions(+), 37 deletions(-) diff --git a/collects/racket/generics.rkt b/collects/racket/generics.rkt index d726c00d65..14578fd78c 100644 --- a/collects/racket/generics.rkt +++ b/collects/racket/generics.rkt @@ -25,11 +25,12 @@ (define-generics (name prop:name name?) (generic . generic-args) ...))))])) -(define-syntax (define-generics stx) ; allows out-of-order kw args +(define-syntax (define-generics stx) ; allows out-of-order / optional kw args (syntax-case stx () ; can't use syntax-parse, since it depends on us [(_ (name prop:name name?) (generic . generics-args) ...) #'(define-generics/pre (name prop:name name? #:defined-table defined-table + ;; coerce-method-table is not public #:coerce-method-table #f) (generic . generics-args) ...)] [(_ (name prop:name name? #:defined-table defined-table) @@ -37,27 +38,4 @@ #'(define-generics/pre (name prop:name name? #:defined-table defined-table #:coerce-method-table #f) - (generic . generics-args) ...)] - [(_ (name prop:name name? #:coerce-method-table coerce-method-table) - (generic . generics-args) ...) - #'(define-generics/pre (name prop:name name? - #:defined-table defined-table ; fresh - #:coerce-method-table coerce-method-table) - (generic . generics-args) ...)] - [(_ (name prop:name name? - #:coerce-method-table coerce-method-table - #:defined-table defined-table) - (generic . generic-args) ...) - #'(define-generics/pre (name prop:name name? - #:defined-table defined-table - #:coerce-method-table coerce-method-table) - (generic . generics-args) ...)] - [(_ (name prop:name name? - #:defined-table defined-table - ;; use of coercion functions is explained below - #:coerce-method-table coerce-method-table) - (generic . generic-args) ...) - #'(define-generics/pre (name prop:name name? - #:defined-table defined-table - #:coerce-method-table coerce-method-table) - (generic . generic-args) ...)])) + (generic . generics-args) ...)])) diff --git a/collects/scribblings/reference/generics.scrbl b/collects/scribblings/reference/generics.scrbl index 380bdc1d6c..b7257ef053 100644 --- a/collects/scribblings/reference/generics.scrbl +++ b/collects/scribblings/reference/generics.scrbl @@ -10,8 +10,7 @@ @defmodule[racket/generics] @defform/subs[(define-generics (name prop:name name? - [#:defined-table defined-table] - [#:coerce-method-table coerce-method-table]) + [#:defined-table defined-table]) [method . kw-formals*] ...) ([kw-formals* (arg* ...) @@ -56,16 +55,6 @@ method is implemented by that instance. The intended use case for this table is to allow higher-level APIs to adapt their behavior depending on method availability. -The optional @racket[coerce-method-table] argument is used when implementing a -generics-based extension API for a syntax property that already has its own -extension API, while preserving backwards compatibility. This functionality is -intended for library writers updating their extension APIs to use generics. -@racket[coerce-method-table] should be bound to a coercion function that -accepts valid values for @racket[prop:name] under its old extension API, and -produces a vector of method implementations ordered as in the generics -definition. This allows implementations that were defined under the old -extension API to coexist with those defined using the generics-based API. - } @defform[(generics name