racket/collects/scheme/runtime-path.ss
Matthew Flatt 5e2dfcbac4 define-runtime-module-path
svn: r13283
2009-01-26 00:32:26 +00:00

35 lines
1.3 KiB
Scheme

#lang scheme/base
(require (for-syntax scheme/base))
(require mzlib/runtime-path)
(provide (all-from-out mzlib/runtime-path)
(for-syntax #%datum)
define-runtime-module-path)
(define-syntax (define-runtime-module-path stx)
(syntax-case stx ()
[(_ id mod-path)
(begin
(unless (memq (syntax-local-context) '(top-level module module-begin))
(raise-syntax-error #f
"allowed only in a module top-level or top-level context"
stx))
(unless (identifier? #'id)
(raise-syntax-error #f
"expected an identifier to bind"
stx
#'id))
(unless (module-path? (syntax->datum #'mod-path))
(raise-syntax-error #f
"expected a literal module path"
stx
#'mod-path))
#`(begin
(require (only-in (for-label mod-path)))
(define id (combine-module-path (#%variable-reference) 'mod-path))))]))
(define (combine-module-path vr mod-path)
(module-path-index-resolve (module-path-index-join
mod-path
(variable-reference->resolved-module-path vr))))