avoid dropping provide/contract-original-contract property

This commit is contained in:
Robby Findler 2016-08-09 16:25:15 -05:00
parent bf53f02bb1
commit d22a771c98
2 changed files with 44 additions and 2 deletions

View File

@ -3,7 +3,7 @@
(for-syntax racket/base))
(parameterize ([current-contract-namespace
(make-basic-contract-namespace 'racket/contract)])
(make-basic-contract-namespace 'racket/contract 'racket/list)])
(define exn:fail:contract:blame-object
(contract-eval 'exn:fail:contract:blame-object))
@ -1457,5 +1457,45 @@
(λ (x)
(and (exn:fail:contract:blame? x)
(regexp-match? #rx"blaming: bad1-client" (exn-message x)))))
(contract-eval
'(define (find-p/c-prop stx)
(define the-props
(flatten
(let loop ([stx stx])
(cond
[(syntax? stx)
(cons (syntax-property stx 'provide/contract-original-contract)
(loop (syntax-e stx)))]
[(pair? stx)
(cons (loop (car stx)) (loop (cdr stx)))]
[else '()]))))
(remove-duplicates
(for/list ([e (in-list the-props)]
#:when e)
(syntax->datum (vector-ref e 1))))))
(test/spec-passed/result
'provide/contract.prop1
'(let ()
(find-p/c-prop
(expand
'(module test racket
(provide/contract
[x (>/c 5)])
(define x 6)))))
(list '(>/c 5)))
(test/spec-passed/result
'provide/contract.prop2
'(let ()
(find-p/c-prop
(expand
'(module test racket
(provide
(contract-out
[x (>/c 5)]))
(define x 6)))))
(list '(>/c 5)))
)

View File

@ -38,7 +38,9 @@
(let loop ([stx (true-provide/contract #'orig-stx #f 'contract-out)])
(syntax-case stx (begin provide)
[(begin args ...)
#`(begin #,@(map loop (syntax->list #'(args ...))))]
(syntax-property #`(begin #,@(map loop (syntax->list #'(args ...))))
'provide/contract-original-contract
(syntax-property stx 'provide/contract-original-contract))]
[(provide clause ...)
(identifier? #'x)
(begin (set! provide-clauses (append (syntax->list #'(clause ...))