From 65d804d2867ea66cfdeb61e544f21aa2e835fb7a Mon Sep 17 00:00:00 2001 From: Sam Tobin-Hochstadt Date: Thu, 1 Oct 2009 18:59:12 +0000 Subject: [PATCH] Add disappeared-use properties for struct ids. Fix bug with handling of identifier as second arg to `define-match-expander' svn: r16201 --- collects/scheme/match.ss | 37 +++++++++++++-------------- collects/scheme/match/parse-helper.ss | 7 ++++- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/collects/scheme/match.ss b/collects/scheme/match.ss index e5407b47f4..cfe1cb2c7c 100644 --- a/collects/scheme/match.ss +++ b/collects/scheme/match.ss @@ -1,22 +1,21 @@ +#lang scheme/base +(require scheme/match/match + (for-syntax scheme/base)) +(provide (except-out (all-from-out scheme/match/match) + define-match-expander) + (rename-out [define-match-expander* define-match-expander])) -(module match scheme/base - (require scheme/match/match - (for-syntax scheme/base)) - (provide (except-out (all-from-out scheme/match/match) - define-match-expander) - (rename-out [define-match-expander* define-match-expander])) +(define-for-syntax (no-old-match-form stx) + (raise-syntax-error + #f + "works only for constructor-based `match' form" + stx)) - (define-for-syntax (no-old-match-form stx) - (raise-syntax-error - #f - "works only for constructor-based `match' form" - stx)) - - (define-syntax define-match-expander* - (syntax-rules () - [(_ id expr) (define-match-expander id expr)] - [(_ id expr expr2) (define-match-expander id - expr - no-old-match-form - expr2)]))) +(define-syntax define-match-expander* + (syntax-rules () + [(_ id expr) (define-match-expander id expr)] + [(_ id expr expr2) (define-match-expander id + expr + no-old-match-form + (#%expression expr2))])) diff --git a/collects/scheme/match/parse-helper.ss b/collects/scheme/match/parse-helper.ss index daf6ca64ac..83c30b05d0 100644 --- a/collects/scheme/match/parse-helper.ss +++ b/collects/scheme/match/parse-helper.ss @@ -93,7 +93,12 @@ [acc (cond [(null? acc) acc] [(not (car acc)) (cdr acc)] [else acc])]) - (make-Struct id pred (get-lineage (cert struct-name)) acc + (make-Struct id + (syntax-property + pred + 'disappeared-use (list struct-name)) + (get-lineage (cert struct-name)) + acc (cond [(eq? '_ (syntax-e pats)) (map make-Dummy acc)] [(syntax->list pats)