nested-set! (current-module) name val ;;; local-define name val == nested-define! (current-module) name val ;;; local-remove name == nested-remove! (current-module) name ;;; local-ref-module name == nested-ref-module (current-module) name ;;; local-define-module! name m == nested-define-module! (current-module) name m ;;; (define (nested-ref root names) (if (null? names) root (let loop ((cur root) (head (car names)) (tail (cdr names))) (if (null? tail) (module-ref cur head #f) (let ((cur (module-ref-submodule cur head))) (and cur (loop cur (car tail) (cdr tail)))))))) (define (nested-set! root names val) (let loop ((cur root) (head (car names)) (tail (cdr names))) (if (null? tail) (module-set! cur head val) (let ((cur (module-ref-submodule cur head))) (if (not cur) (error "failed to resolve module" names) (loop cur (car tail) (cdr tail))))))) (define (nested-define! root names val) (let loop ((cur root) (head (car names)) (tail (cdr names))) (if (null? tail) (module-define! cur head val) (let ((cur (module-ref-submodule cur head))) (if (not cur) (error "failed to resolve module" names) (loop cur (car tail) (cdr tail))))))) (define (nested-remove! root names) (let loop ((cur root) (head (car names)) (tail (cdr names))) (if (null? tail) (module-remove! cur head) (let ((cur (module-ref-submodule cur head))) (if (not cur) (error "failed to resolve module" names) (loop cur (car tail) (cdr tail))))))) (define (nested-ref-module root names) (let loop ((cur root) (names names)) (if (null? names) cur (let ((cur (module-ref-submodule cur (car names)))) (and cur (loop cur (cdr names))))))) (define (nested-define-module! root names module) (if (null? names) (error "can't redefine root module" root module) (let loop ((cur root) (head (car names)) (tail (cdr names))) (if (null? tail) (module-define-submodule! cur head module) (let ((cur (or (module-ref-submodule cur head) (let ((m (make-module))) (set-module-kind! m 'directory) (set-module-name! m (append (module-name cur) (list head))) (module-define-submodule! cur head m) m)))) (loop cur (car tail) (cdr tail))))))) (define (local-ref names) (nested-ref (current-module) names)) (define (local-set! names val) (nested-set! (current-module) names val)) (define (local-define names val) (nested-define! (current-module) names val)) (define (local-remove names) (nested-remove! (current-module) names)) (define (local-ref-module names) (nested-ref-module (current-module) names)) (define (local-define-module names mod) (nested-define-module! (current-module) names mod))