35 lines
1.3 KiB
Scheme
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))))
|