From 1b1dc9cfb8b111c7603d6fe1901d8fd1f374d62e Mon Sep 17 00:00:00 2001 From: Max New Date: Mon, 10 Feb 2014 06:15:20 -0600 Subject: [PATCH] Redex Enumerator support for mismatch patterns --- .../redex-lib/redex/private/enum.rkt | 4 +--- .../redex/private/preprocess-pat.rkt | 1 - .../redex-test/redex/tests/enum-test.rkt | 21 ++++++++++++------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/pkgs/redex-pkgs/redex-lib/redex/private/enum.rkt b/pkgs/redex-pkgs/redex-lib/redex/private/enum.rkt index 2680292973..53560eedae 100644 --- a/pkgs/redex-pkgs/redex-lib/redex/private/enum.rkt +++ b/pkgs/redex-pkgs/redex-lib/redex/private/enum.rkt @@ -135,9 +135,7 @@ [`(name ,n ,pat) (const/e (name-ref n))] [`(mismatch-name ,n ,tag) - (unsupported "mismatch patterns") - ;; (const/e (misname-ref n tag)) - ] + (const/e (misname-ref n tag))] [`(in-hole ,p1 ,p2) (map/e decomp (match-lambda diff --git a/pkgs/redex-pkgs/redex-lib/redex/private/preprocess-pat.rkt b/pkgs/redex-pkgs/redex-lib/redex/private/preprocess-pat.rkt index 5036ae5b31..d815369c0d 100644 --- a/pkgs/redex-pkgs/redex-lib/redex/private/preprocess-pat.rkt +++ b/pkgs/redex-pkgs/redex-lib/redex/private/preprocess-pat.rkt @@ -28,7 +28,6 @@ (ann-pat (add-name subenv n subpat) `(name ,n ,new-subpat))] [`(mismatch-name ,n ,subpat) - (unimplemented "mismatch") (match-define (ann-pat subenv new-subpat) (walk subpat)) (define tag (get-and-inc!)) (ann-pat (add-mismatch subenv n subpat tag) diff --git a/pkgs/redex-pkgs/redex-test/redex/tests/enum-test.rkt b/pkgs/redex-pkgs/redex-test/redex/tests/enum-test.rkt index b8b44ea76f..11843be174 100644 --- a/pkgs/redex-pkgs/redex-test/redex/tests/enum-test.rkt +++ b/pkgs/redex-pkgs/redex-test/redex/tests/enum-test.rkt @@ -98,15 +98,20 @@ (try-it 25 λv x) ;; No longer supported -;; (define-language M -;; (m (x_!_1 x_!_1)) -;; (p (number_!_1 number_!_1)) -;; (n (p_!_1 p_!_1)) -;; (x number)) +(define-language M + (m (x_!_1 x_!_1)) + (p (number_!_1 number_!_1)) + (n (p_!_1 p_!_1)) + (x number) -;; (try-it 100 M m) -;; (try-it 100 M n) -;; (try-it 100 M p) + ;; Example of poorly behaved mismatch + (ambig (x ... x ...))) + +(try-it 100 M m) +(try-it 100 M n) +(try-it 100 M p) +;; Ambiguity kills us here +;; (try-it 5 M (ambig_!_1 ambig_!_1)) ;; test variable filtering (define-language Vars