expander: fix check on syntax-local-lift-provide

Closes #3589
This commit is contained in:
Matthew Flatt 2020-12-28 14:03:25 -07:00
parent 471f18c02d
commit becf34a79b
4 changed files with 19 additions and 3 deletions

View File

@ -1276,6 +1276,22 @@
(void)))) (void))))
(test 10 eval `(dynamic-require '(submod 'm m) 'x))) (test 10 eval `(dynamic-require '(submod 'm m) 'x)))
;; ----------------------------------------
;; Check bad lift provide
(err/rt-test
(eval '(module a '#%kernel
(#%require (for-syntax '#%kernel))
(define-syntaxes (m)
(lambda (stx)
(let-values ([(ctx) (syntax-local-make-definition-context)])
(syntax-local-bind-syntaxes (list (quote-syntax x)) (quote-syntax 5) ctx)
(syntax-local-lift-provide (internal-definition-context-introduce ctx (quote-syntax x) 'add))
(quote-syntax (void)))))
(m)))
exn:fail:syntax?
#rx"provided identifier is not defined or required")
;; ---------------------------------------- ;; ----------------------------------------
;; Check module lifting in a top-level context ;; Check module lifting in a top-level context

View File

@ -76908,7 +76908,7 @@ static const char *startup_source =
"(let-values(((b_0)(resolve+shift/extra-inspector spec_0 at-phase_0 ns_0)))" "(let-values(((b_0)(resolve+shift/extra-inspector spec_0 at-phase_0 ns_0)))"
"(let-values((()" "(let-values((()"
"(begin" "(begin"
"(if b_0" "(if(module-binding? b_0)"
"(void)" "(void)"
"(let-values()" "(let-values()"
"(raise-syntax-error$1" "(raise-syntax-error$1"

View File

@ -86603,7 +86603,7 @@
(lambda (spec_0 orig-s_0 sym_0 at-phase_0 ns_0 rp_0 protected?_0) (lambda (spec_0 orig-s_0 sym_0 at-phase_0 ns_0 rp_0 protected?_0)
(let ((b_0 (resolve+shift/extra-inspector spec_0 at-phase_0 ns_0))) (let ((b_0 (resolve+shift/extra-inspector spec_0 at-phase_0 ns_0)))
(begin (begin
(if b_0 (if (module-binding? b_0)
(void) (void)
(raise-syntax-error$1 (raise-syntax-error$1
'provide 'provide

View File

@ -183,7 +183,7 @@
(define (parse-identifier! spec orig-s sym at-phase ns rp protected?) (define (parse-identifier! spec orig-s sym at-phase ns rp protected?)
(define b (resolve+shift/extra-inspector spec at-phase ns)) (define b (resolve+shift/extra-inspector spec at-phase ns))
(unless b (unless (module-binding? b)
(raise-syntax-error provide-form-name "provided identifier is not defined or required" orig-s spec)) (raise-syntax-error provide-form-name "provided identifier is not defined or required" orig-s spec))
(define as-transformer? (binding-for-transformer? b spec at-phase ns)) (define as-transformer? (binding-for-transformer? b spec at-phase ns))
(define immed-b (resolve+shift spec at-phase #:immediate? #t)) (define immed-b (resolve+shift spec at-phase #:immediate? #t))