racket/collects/scheme/enter.ss
2007-12-01 01:47:32 +00:00

33 lines
788 B
Scheme

#lang scheme/base
(require (for-syntax scheme/base))
(provide enter!)
(define-syntax (enter! stx)
(syntax-case stx ()
[(enter! mod)
(if (or (not (syntax-e #'mod))
(module-path? (syntax->datum #'mod)))
#'(do-enter! 'mod)
(raise-syntax-error
#f
"not a valid module path, and not #f"
stx
#'mod))]
[_ (raise-syntax-error
#f
"bad syntax; should be `(enter! <module-path-or-#f>)'"
stx)]))
(define orig-namespace (current-namespace))
(define (do-enter! mod)
(if mod
(begin
(dynamic-require mod #f)
(let ([ns (module->namespace mod)])
(current-namespace ns)
(namespace-require 'scheme/enter)))
(current-namespace orig-namespace)))