Fixing struct pattern optimization
This commit is contained in:
parent
ad3ee86863
commit
57d27373ac
|
@ -106,7 +106,7 @@
|
||||||
(syntax-property
|
(syntax-property
|
||||||
pred
|
pred
|
||||||
'disappeared-use (list struct-name))
|
'disappeared-use (list struct-name))
|
||||||
lineage complete?
|
lineage (and (checked-struct-info? v) complete?)
|
||||||
acc
|
acc
|
||||||
(cond [(eq? '_ (syntax-e pats))
|
(cond [(eq? '_ (syntax-e pats))
|
||||||
(map make-Dummy acc)]
|
(map make-Dummy acc)]
|
||||||
|
|
|
@ -179,7 +179,7 @@
|
||||||
(else #f)))
|
(else #f)))
|
||||||
(check-true (origin? (make-point 0 0)))
|
(check-true (origin? (make-point 0 0)))
|
||||||
(check-false (origin? (make-point 1 1)))))
|
(check-false (origin? (make-point 1 1)))))
|
||||||
; This test ensures that the unsafe struct optimization is correct
|
; These tests ensures that the unsafe struct optimization is correct
|
||||||
(test-case "struct patterns (with opaque parent)"
|
(test-case "struct patterns (with opaque parent)"
|
||||||
(let ()
|
(let ()
|
||||||
(define-struct opq (any))
|
(define-struct opq (any))
|
||||||
|
@ -191,6 +191,21 @@
|
||||||
(else #f)))
|
(else #f)))
|
||||||
(check-true (origin? (make-point 'a 0 0)))
|
(check-true (origin? (make-point 'a 0 0)))
|
||||||
(check-false (origin? (make-point 'a 1 1))))))
|
(check-false (origin? (make-point 'a 1 1))))))
|
||||||
|
(test-case "struct patterns (with fake struct info)"
|
||||||
|
(let ()
|
||||||
|
(define (point? x)
|
||||||
|
(and (list? x) (= 2 (length x))))
|
||||||
|
(define-syntax point
|
||||||
|
(list #f #f #'point? (list #'cadr #'car) (list #f #f) #t))
|
||||||
|
(define (origin? pt)
|
||||||
|
(match pt
|
||||||
|
((struct point (0 1)) #t)
|
||||||
|
(else #f)))
|
||||||
|
(check-true (origin? (list 0 1)))
|
||||||
|
(check-false (origin? (list 1 1)))
|
||||||
|
(check-false (origin? (list 1 1 1)))
|
||||||
|
(check-false (origin? (list 1)))
|
||||||
|
(check-false (origin? 1))))
|
||||||
))
|
))
|
||||||
|
|
||||||
(define nonlinear-tests
|
(define nonlinear-tests
|
||||||
|
|
Loading…
Reference in New Issue
Block a user