From 65a9e787023c709d59e456b684f2295887c624b0 Mon Sep 17 00:00:00 2001
From: Sam Tobin-Hochstadt <samth@racket-lang.org>
Date: Sat, 14 Jul 2012 18:25:11 -0400
Subject: [PATCH] Use `unstable/lazy-require` to dynamically-load the
 compile-time of `match`.

NOTE: Does not build!
---
 collects/racket/match/define-forms.rkt |    7 +++++--
 collects/racket/match/match.rkt        |   15 ++++++++++-----
 collects/racket/match/patterns.rkt     |   30 ++++--------------------------
 3 files changed, 19 insertions(+), 33 deletions(-)

diff --git a/collects/racket/match/define-forms.rkt b/collects/racket/match/define-forms.rkt
index 0cdbd0c..5f7aa0f 100644
--- a/collects/racket/match/define-forms.rkt
+++ b/collects/racket/match/define-forms.rkt
@@ -5,8 +5,11 @@
                      (only-in racket/list append* remove-duplicates)
                      unstable/sequence
                      syntax/parse
-                     "patterns.rkt"
-                     "gen-match.rkt"))
+                     unstable/lazy-require))
+
+(begin-for-syntax
+ (lazy-require ["patterns.rkt" (bound-vars)]
+               ["gen-match.rkt" (go parse-id go/one)]))
 
 (provide define-forms)
 
diff --git a/collects/racket/match/match.rkt b/collects/racket/match/match.rkt
index d619b62..dcff8dc 100644
--- a/collects/racket/match/match.rkt
+++ b/collects/racket/match/match.rkt
@@ -6,11 +6,15 @@
          (only-in "match-expander.rkt"
                   define-match-expander)
          "define-forms.rkt"
-         "struct.rkt"         
-         (for-syntax "parse.rkt"
-                     (only-in "patterns.rkt" 
+         "struct.rkt"
+         (for-syntax unstable/lazy-require
+                     (only-in "stxtime.rkt"
                               match-...-nesting
-                              prop:match-expander prop:legacy-match-expander)))
+                              prop:match-expander
+                              prop:legacy-match-expander)))
+
+(begin-for-syntax
+  (lazy-require ["parse.rkt" (parse)]))
 
 (provide (for-syntax match-...-nesting
                      prop:match-expander prop:legacy-match-expander)
@@ -22,4 +26,5 @@
 (define-forms parse
   match match* match-lambda match-lambda* match-lambda** match-let match-let*
   match-let-values match-let*-values
-  match-define match-define-values match-letrec match/values match/derived match*/derived)
+  match-define match-define-values match-letrec match/values
+  match/derived match*/derived)
diff --git a/collects/racket/match/patterns.rkt b/collects/racket/match/patterns.rkt
index d259986..cfeca2a 100644
--- a/collects/racket/match/patterns.rkt
+++ b/collects/racket/match/patterns.rkt
@@ -2,9 +2,12 @@
 
 (require syntax/boundmap
          racket/contract
+         "stxtime.rkt"
          (for-syntax racket/base))
 
-(provide (except-out (all-defined-out)
+(provide (except-out (combine-out 
+                      (all-defined-out)
+                      (all-from-out "stxtime.rkt"))
                      struct-key-ht
                      get-key
                      (struct-out Row)))
@@ -176,8 +179,6 @@
     [(Exact? p) null]
     [else (error 'match "bad pattern: ~a" p)]))
 
-(define match-...-nesting (make-parameter 0))
-
 (define current-renaming (make-parameter (make-free-identifier-mapping)))
 
 (define (copy-mapping ht)
@@ -209,29 +210,6 @@
                                                           identifier?))])))
 
 
-(struct acc-prop (n acc))
-(define (make-struct-type-property/accessor name [guard #f] [supers null])
-  (define-values (p pred? acc)
-    (make-struct-type-property name
-     (λ (pval sinfo)
-	(cond [(exact-nonnegative-integer? pval)
-	       (acc-prop pval (cadddr sinfo))]
-	      [else (if (procedure? guard) 
-			(guard pval sinfo)
-			pval)]))
-     supers))
-  (values p pred? (lambda (v)
-		    (define v* (acc v))
-		    (if (acc-prop? v*)
-			((acc-prop-acc v*) v (acc-prop-n v*))
-			v*))))
-
-(define-values (prop:match-expander match-expander? match-expander-proc) 
-  (make-struct-type-property/accessor 'prop:match-expander))
-
-(define-values (prop:legacy-match-expander legacy-match-expander? legacy-match-expander-proc)
-  (make-struct-type-property/accessor 'prop:legacy-match-expander ))
-
 (define make-match-expander
   (let ()
     (define-struct match-expander (match-xform legacy-xform macro-xform)
-- 
1.7.9.5

