Make the DeinProgramm / DMdA one-of' / case' contracts use beginner-equal?.

svn: r16556
This commit is contained in:
Mike Sperber 2009-11-05 10:10:17 +00:00
parent a68c6c8005
commit 2a8e5d64be
3 changed files with 7 additions and 6 deletions

View File

@ -10,7 +10,8 @@
scheme/promise scheme/promise
(for-syntax scheme/base) (for-syntax scheme/base)
(for-syntax syntax/stx) (for-syntax syntax/stx)
(for-syntax stepper/private/shared)) (for-syntax stepper/private/shared)
(only-in lang/private/teachprims beginner-equal?))
(define-for-syntax (phase-lift stx) (define-for-syntax (phase-lift stx)
(with-syntax ((?stx stx)) (with-syntax ((?stx stx))
@ -46,7 +47,7 @@
(syntax->list #'((?temp ?exp) ...))))) (syntax->list #'((?temp ?exp) ...)))))
#'(let ((?temp ?exp) ...) #'(let ((?temp ?exp) ...)
?check ... ?check ...
(make-case-contract '?name (list ?temp ...) ?stx))))) (make-case-contract '?name (list ?temp ...) beginner-equal? ?stx)))))
((predicate ?exp) ((predicate ?exp)
(with-syntax ((?stx (phase-lift stx)) (with-syntax ((?stx (phase-lift stx))
(?name name)) (?name name))

View File

@ -194,7 +194,7 @@
syntax syntax
#f)) #f))
(define (make-case-contract name cases syntax) (define (make-case-contract name cases =? syntax)
(make-contract (make-contract
name name
(lambda (self obj) (lambda (self obj)
@ -203,12 +203,12 @@
((null? cases) ((null? cases)
(contract-violation obj self #f #f) (contract-violation obj self #f #f)
obj) obj)
((equal? (car cases) obj) ((=? (car cases) obj)
obj) obj)
(else (else
(loop (cdr cases)))))) (loop (cdr cases))))))
syntax syntax
(delay (apply arbitrary-one-of equal? cases)))) (delay (apply arbitrary-one-of =? cases))))
(define-struct procedure-to-blame (proc syntax)) (define-struct procedure-to-blame (proc syntax))

View File

@ -129,7 +129,7 @@
(test-case (test-case
"case" "case"
(define foo-or-bar (make-case-contract 'foo-or-bar '("foo" "bar") 'foo-or-bar-marker)) (define foo-or-bar (make-case-contract 'foo-or-bar '("foo" "bar") equal? 'foo-or-bar-marker))
(check-equal? (say-no (apply-contract foo-or-bar #f)) (check-equal? (say-no (apply-contract foo-or-bar #f))
'no) 'no)
(check-equal? (say-no (apply-contract foo-or-bar "foo")) (check-equal? (say-no (apply-contract foo-or-bar "foo"))