Tests metafunction Check Syntax arrows
This commit is contained in:
parent
efa04066c6
commit
9e2e11e9c4
|
@ -2196,7 +2196,10 @@
|
||||||
(identifier? #'id)
|
(identifier? #'id)
|
||||||
(let ([v (syntax-local-value #'id (lambda () #f))])
|
(let ([v (syntax-local-value #'id (lambda () #f))])
|
||||||
(if (term-fn? v)
|
(if (term-fn? v)
|
||||||
#`(make-metafunction #,(term-fn-get-id v))
|
(syntax-property
|
||||||
|
#`(make-metafunction #,(term-fn-get-id v))
|
||||||
|
'disappeared-use
|
||||||
|
(list #'id))
|
||||||
(raise-syntax-error
|
(raise-syntax-error
|
||||||
#f
|
#f
|
||||||
"not bound as a metafunction"
|
"not bound as a metafunction"
|
||||||
|
|
|
@ -35,11 +35,12 @@
|
||||||
(define-namespace-anchor module-anchor)
|
(define-namespace-anchor module-anchor)
|
||||||
(define module-namespace
|
(define module-namespace
|
||||||
(namespace-anchor->namespace module-anchor))
|
(namespace-anchor->namespace module-anchor))
|
||||||
(define-values (add-syntax done)
|
|
||||||
(make-traversal module-namespace #f))
|
|
||||||
|
|
||||||
;; judgment forms
|
;; judgment forms
|
||||||
(let ([annotations (new arrow-collector%)])
|
(let ([annotations (new arrow-collector%)])
|
||||||
|
(define-values (add-syntax done)
|
||||||
|
(make-traversal module-namespace #f))
|
||||||
|
|
||||||
(define language-def-name #'L)
|
(define language-def-name #'L)
|
||||||
(define language-use-name #'L)
|
(define language-use-name #'L)
|
||||||
|
|
||||||
|
@ -72,4 +73,37 @@
|
||||||
(list (source mode-name) (source render-name))
|
(list (source mode-name) (source render-name))
|
||||||
(list (source mode-name) (source holds-name)))))
|
(list (source mode-name) (source holds-name)))))
|
||||||
|
|
||||||
|
;; metafunctions
|
||||||
|
(let ([annotations (new arrow-collector%)])
|
||||||
|
(define-values (add-syntax done)
|
||||||
|
(make-traversal module-namespace #f))
|
||||||
|
|
||||||
|
(define language-def-name #'L)
|
||||||
|
(define language-use-name #'L)
|
||||||
|
|
||||||
|
(define contract-name #'f)
|
||||||
|
(define lhs-name #'f)
|
||||||
|
(define rhs-name #'f)
|
||||||
|
(define render-name #'f)
|
||||||
|
(define term-name #'f)
|
||||||
|
|
||||||
|
(parameterize ([current-annotations annotations]
|
||||||
|
[current-namespace module-namespace])
|
||||||
|
(add-syntax
|
||||||
|
(expand #`(let ()
|
||||||
|
(define-language #,language-def-name)
|
||||||
|
(define-metafunction #,language-use-name
|
||||||
|
#,contract-name : () -> ()
|
||||||
|
[(#,lhs-name) (#,rhs-name)])
|
||||||
|
(render-metafunction #,render-name)
|
||||||
|
(term (#,term-name)))))
|
||||||
|
(done))
|
||||||
|
|
||||||
|
(test (send annotations collected-arrows)
|
||||||
|
(set (list (source language-def-name) (source language-use-name))
|
||||||
|
(list (source contract-name) (source lhs-name))
|
||||||
|
(list (source contract-name) (source rhs-name))
|
||||||
|
(list (source contract-name) (source render-name))
|
||||||
|
(list (source contract-name) (source term-name)))))
|
||||||
|
|
||||||
(print-tests-passed 'check-syntax-test.rkt)
|
(print-tests-passed 'check-syntax-test.rkt)
|
Loading…
Reference in New Issue
Block a user