fix a syntax-object problem related to module bindings

The immediate symptom was that `(provide (all-defined-out))'
didn't work in a `module+'-based submodule, but there were
also non-submodule ways to expose the problem.
This commit is contained in:
Matthew Flatt 2012-03-29 13:55:26 -06:00
parent 69899c33fc
commit f301838511
3 changed files with 35 additions and 1 deletions

View File

@ -659,6 +659,28 @@
(require 'post-ex-rename-example-1)
(go))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Check interaction of binding-context and mark:
(module binding-context-a racket
(provide q)
(define-syntax (q stx)
(syntax-case stx ()
[(_ f) (with-syntax ([x (syntax-local-introduce #'x)])
#'(f x))])))
(module binding-context-b racket
(require 'binding-context-a)
(define-syntax-rule (go id)
(begin
(define id 5)
(define-syntax-rule (prov)
(provide id))
(prov)))
(q go))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@ -447,6 +447,16 @@
(test 'c (dynamic-require '(submod 'subm-example-20 third) 'third) '(a b c))
(test 'c (dynamic-require '(submod 'subm-example-20 third) 't) '(a b c))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Check `all-defined-out':
(module subm-all-defined-1 racket/base
(module+ main
(define x 10)
(provide (all-defined-out))))
(test 10 dynamic-require '(submod 'subm-all-defined-1 main) 'x)
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(report-errs)

View File

@ -1085,7 +1085,9 @@ Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Objec
marks = SCHEME_CAR(marks);
}
if (!SCHEME_TRUEP(bdg))
/* Treat #f and void values of bdg the same, since a void value is
the same #f, but ensure that we get this far: */
if (SCHEME_FALSEP(bdg) || SCHEME_VOIDP(bdg))
bdg = NULL;
/* Find a mapping that matches the longest tail of marks */