match: add test for _ elimination in vector patterns
This commit is contained in:
parent
ec1f11e18e
commit
2af0d8ed55
|
@ -345,13 +345,15 @@
|
||||||
(comp
|
(comp
|
||||||
'ok
|
'ok
|
||||||
(let ()
|
(let ()
|
||||||
|
(define impersonated? #f)
|
||||||
(define-struct st ([x #:mutable])
|
(define-struct st ([x #:mutable])
|
||||||
#:transparent)
|
#:transparent)
|
||||||
(define a (st 1))
|
(define a (st 1))
|
||||||
(define b (impersonate-struct a st-x (lambda (_self _x)
|
(define b (impersonate-struct a st-x (lambda (_self x)
|
||||||
(error "must not impersonate"))))
|
(set! impersonated? #t)
|
||||||
|
x)))
|
||||||
(match b
|
(match b
|
||||||
[(st _) 'ok])))
|
[(st _) (if impersonated? 'fail 'ok)])))
|
||||||
|
|
||||||
(comp
|
(comp
|
||||||
'ok
|
'ok
|
||||||
|
@ -366,6 +368,32 @@
|
||||||
(match b
|
(match b
|
||||||
[(st x) (if impersonated? 'ok 'fail)])))
|
[(st x) (if impersonated? 'ok 'fail)])))
|
||||||
|
|
||||||
|
(comp
|
||||||
|
'ok
|
||||||
|
(let ()
|
||||||
|
(define impersonated? #f)
|
||||||
|
(define v (vector 1 2 3))
|
||||||
|
(define b (impersonate-vector v
|
||||||
|
(lambda (self idx _)
|
||||||
|
(set! impersonated? #t)
|
||||||
|
(vector-ref self idx))
|
||||||
|
vector-set!))
|
||||||
|
(match b
|
||||||
|
[(vector _ _ _) (if impersonated? 'fail 'ok)])))
|
||||||
|
|
||||||
|
(comp
|
||||||
|
'ok
|
||||||
|
(let ()
|
||||||
|
(define impersonated? #f)
|
||||||
|
(define v (vector 1 2 3))
|
||||||
|
(define b (impersonate-vector v
|
||||||
|
(lambda (self idx _)
|
||||||
|
(set! impersonated? #t)
|
||||||
|
(vector-ref self idx))
|
||||||
|
vector-set!))
|
||||||
|
(match b
|
||||||
|
[(vector a _ _) (if impersonated? 'ok 'fail)])))
|
||||||
|
|
||||||
(comp 1
|
(comp 1
|
||||||
(match #&1
|
(match #&1
|
||||||
[(box a) a]
|
[(box a) a]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user