
Paths are left as paths, instead of trying to convert them to strings or byte strings. Submodule path elements should be unquoted -- in the same form as a `submod' form. All extra parts are submodule path elements, never module paths or ".".
55 lines
1.8 KiB
Racket
55 lines
1.8 KiB
Racket
#lang racket/base
|
|
(require syntax/location)
|
|
(require tests/eli-tester)
|
|
|
|
(define-syntax-rule (module-source)
|
|
(variable-reference->module-source
|
|
(#%variable-reference)))
|
|
|
|
(test
|
|
(quote-module-name) => (module-source)
|
|
(quote-module-name "..") => (list (module-source) "..")
|
|
(quote-module-name ".." A) => (list (module-source) ".." 'A)
|
|
(quote-module-name A B) => (list (module-source) 'A 'B))
|
|
|
|
(module A racket
|
|
(require syntax/location)
|
|
(define-syntax-rule (name) (quote-module-name))
|
|
(define a-name (name))
|
|
(define a-path (quote-module-path))
|
|
(module+ C
|
|
(require syntax/location)
|
|
(define c-name (quote-module-name))
|
|
(define c-name2 (quote-module-name ".."))
|
|
(define c-path (quote-module-path))
|
|
(define c-path2 (quote-module-path ".."))
|
|
(provide c-name c-name2 c-path c-path2))
|
|
(provide (all-defined-out)))
|
|
(module B racket
|
|
(require syntax/location)
|
|
(require (submod ".." A))
|
|
(define b-name (name))
|
|
(define b-path (quote-module-path))
|
|
(provide (all-defined-out)))
|
|
(require 'B)
|
|
|
|
(require 'A)
|
|
(require (submod 'A C))
|
|
(test
|
|
a-name => (list (module-source) 'A)
|
|
c-name => (list (module-source) 'A 'C)
|
|
c-name2 => (list (module-source) 'A 'C "..")
|
|
b-name => (list (module-source) 'B))
|
|
|
|
(test
|
|
(quote-module-path) => (module-source)
|
|
(quote-module-path "..") => (list 'submod (module-source) "..")
|
|
(quote-module-path ".." A) => (list 'submod (module-source) ".." 'A)
|
|
(quote-module-path A B) => (list 'submod (module-source) 'A 'B))
|
|
|
|
(test
|
|
a-path => (list 'submod (module-source) 'A)
|
|
c-path => (list 'submod (module-source) 'A 'C)
|
|
c-path2 => (list 'submod (module-source) 'A 'C "..")
|
|
b-path => (list 'submod (module-source) 'B))
|