32 lines
835 B
Scheme
32 lines
835 B
Scheme
|
|
(module library-repl mzscheme
|
|
(require (all-except "library-module.ss" #%module-begin)
|
|
(prefix r6rs: "reader.ss"))
|
|
(require-for-syntax "private/uri.ss")
|
|
(provide import export indirect-export library)
|
|
|
|
(current-readtable r6rs:r6rs-readtable)
|
|
|
|
(define-syntax (library stx)
|
|
(syntax-case stx ()
|
|
[(_ name . rest)
|
|
(unless (string? (syntax-e #'name))
|
|
(raise-syntax-error
|
|
#f
|
|
"expected a string for the library name"
|
|
stx
|
|
#'name))
|
|
(let ([modname (uri->symbol (syntax-e #'name))])
|
|
#`(begin
|
|
(module #,modname (lib "library-module.ss" "r6rs")
|
|
#,(datum->syntax-object
|
|
#f
|
|
(list '#%module-begin stx)))
|
|
;; Notify module-name resolver that we defined something that
|
|
;; might otherwise be loaded.
|
|
((current-module-name-resolver) #f '#,modname #f)))])))
|
|
|
|
|
|
|
|
|