Add a dummy lambda expansion to signature compilation to ensure that the
expressions only refer to locally-bound names or names that are part of the signature itself. svn: r17573
This commit is contained in:
parent
9e0f2a3c5f
commit
ea20ee160f
|
@ -307,6 +307,7 @@
|
||||||
(with-syntax (((super-rtime ...) super-rtimes)
|
(with-syntax (((super-rtime ...) super-rtimes)
|
||||||
((super-name ...) super-names)
|
((super-name ...) super-names)
|
||||||
((var ...) all-bindings)
|
((var ...) all-bindings)
|
||||||
|
((ctc ...) all-ctcs)
|
||||||
((((vid ...) . vbody) ...) all-val-defs)
|
((((vid ...) . vbody) ...) all-val-defs)
|
||||||
((((sid ...) . sbody) ...) all-stx-defs))
|
((((sid ...) . sbody) ...) all-stx-defs))
|
||||||
#`(begin
|
#`(begin
|
||||||
|
@ -333,7 +334,14 @@
|
||||||
(quote-syntax #,c))
|
(quote-syntax #,c))
|
||||||
#'#f))
|
#'#f))
|
||||||
all-ctcs))
|
all-ctcs))
|
||||||
(quote-syntax #,sigid))))))))
|
(quote-syntax #,sigid))))
|
||||||
|
(define-values ()
|
||||||
|
(begin
|
||||||
|
(λ (var ...)
|
||||||
|
(letrec-syntaxes+values
|
||||||
|
([(sid ...) sbody] ...) ([(vid ...) vbody] ...)
|
||||||
|
ctc ...))
|
||||||
|
(values)))))))
|
||||||
(else
|
(else
|
||||||
(syntax-case (car sig-exprs) (define-values define-syntaxes contracted)
|
(syntax-case (car sig-exprs) (define-values define-syntaxes contracted)
|
||||||
(x
|
(x
|
||||||
|
|
|
@ -103,6 +103,13 @@
|
||||||
(test-syntax-error "identifier not first part of pair after contracted in signature"
|
(test-syntax-error "identifier not first part of pair after contracted in signature"
|
||||||
(define-signature x ((contracted [(-> number? number?) x]))))
|
(define-signature x ((contracted [(-> number? number?) x]))))
|
||||||
|
|
||||||
|
(test-syntax-error "identifier h? not bound anywhere"
|
||||||
|
(module h?-test scheme
|
||||||
|
(define-signature s^
|
||||||
|
((define-values (f?) (values number?))
|
||||||
|
(define-syntaxes (g?) (make-rename-transformer #'number?))
|
||||||
|
(contracted [f (-> f? (and/c g? h?))])))))
|
||||||
|
|
||||||
(test-syntax-error "f not defined in unit exporting sig3"
|
(test-syntax-error "f not defined in unit exporting sig3"
|
||||||
(unit (import) (export sig3 sig4)
|
(unit (import) (export sig3 sig4)
|
||||||
(define a #t)
|
(define a #t)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user