allow (submod "..")' as a shorthand for (submod "." "..")'

Also, `(submod ".")' is allowed as a module path; it's not useful,
but it makes the grammar slightly more regular.
This commit is contained in:
Matthew Flatt 2012-03-22 18:43:11 -06:00
parent 876bc6f02b
commit ae89e210fb
12 changed files with 360 additions and 255 deletions

View File

@ -212,7 +212,8 @@ with other forms.}
@specsubform/subs[#:literals (submod)
(submod base element ...+)
([base module-path
"."]
"."
".."]
[element id
".."])]{
@ -229,13 +230,14 @@ names to reach the final submodule.
monkey
]
Using @racket["."] as @racket[base] within @racket[submod] stands for the
enclosing module. When a path of the form @racket[(#,(racket quote)
id)] refers to a submodule, it is equivalent to @racket[(submod "."
id)].
Using @racket["."] as @racket[base] within @racket[submod] stands for
the enclosing module. Using @racket[".."] as @racket[base] is
equivalent to using @racket["."] followed by an extra
@racket[".."]. When a path of the form @racket[(#,(racket quote) id)]
refers to a submodule, it is equivalent to @racket[(submod "." id)].
Using @racket[".."] as an @racket[element] cancels one submodule step, effectively
referring to the enclosing module. For example, @racket[(submod "." "..")]
referring to the enclosing module. For example, @racket[(submod "..")]
refers to the enclosing module of the submodule in which the path
appears.
@ -245,7 +247,7 @@ appears.
(provide monkey)
(define monkey "Curious George"))
(module crocodile-house racket
(require (submod "." ".." monkey-house))
(require (submod ".." monkey-house))
(provide dinner)
(define dinner monkey)))
(require (submod 'zoo crocodile-house))

View File

@ -362,8 +362,9 @@ Legal only in a @tech{module begin context}, and handled by the
(for-label require-spec ...)
(for-meta phase-level require-spec ...)
derived-require-spec]
[module-path (submod root-module-path submod-path-element ...+)
(submod "." submod-path-element ...+)]
[module-path (submod root-module-path submod-path-element ...)
(submod "." submod-path-element ...)
(submod ".." submod-path-element ...)]
[root-module-path (#,(racket quote) id)
rel-string
(lib rel-string ...+)
@ -765,14 +766,18 @@ corresponds to the default @tech{module name resolver}.
(eval:alts (require (planet mcdonald/farm:2:5/duck)) (void))
]}
@defsubform*[((submod root-module submod-path-element ...+)
(submod "." submod-path-element ...+))]{
@defsubform*[((submod root-module submod-path-element ...)
(submod "." submod-path-element ...)
(submod ".." submod-path-element ...))]{
Identifies a @tech{submodule} within the module specified by @racket[root-module]
or relative to the current module in the case of @racket[(submod "." ....)].
or relative to the current module in the case of @racket[(submod "." ....)],
where @racket[(submod ".." submod-path-element ...)] is equivalent to
@racket[(submod "." ".." submod-path-element ...)].
Submodules have symbolic names, and a sequence of identifiers as @racket[submod-path-element]s
determine a path of successively nested submodules with the given names.
A @racket[".."] as a @racket[submod-path-element] names the enclosing module
of a submodule, and it's intended for use in @racket[(submod "." ....)] forms.}
of a submodule, and it's intended for use in @racket[(submod "." ....)]
and @racket[(submod ".." ....)] forms.}
}

View File

@ -96,14 +96,20 @@
(module-path-index-join s #f)))
submod)]
[(eq? (car s) 'submod)
(define r (if (equal? (cadr s) ".")
(let ()
(define-values (d submod) (force-relto relto #f))
(combine-submod d submod))
(resolve-module-path (cadr s) relto)))
(define base-submods (if (and (equal? (cadr s) ".") (pair? r)) (cddr r) null))
(define r (cond
[(or (equal? (cadr s) ".")
(equal? (cadr s) ".."))
(define-values (d submod) (force-relto relto #f))
(combine-submod d submod)]
[else (resolve-module-path (cadr s) relto)]))
(define base-submods (if (and (or (equal? (cadr s) ".")
(equal? (cadr s) ".."))
(pair? r))
(cddr r)
null))
(define base (if (pair? r) (cadr r) r))
(flatten base (append base-submods (cddr s)))]
(flatten base (append base-submods
(if (equal? (cadr s) "..") (cdr s) (cddr s))))]
[else #f]))
(define (resolve-module-path-index mpi relto)

View File

@ -287,7 +287,9 @@ Use syntax/modcollapse instead.
(if (null? subpath)
(cadr sm)
`(submod ,(cadr sm) ,@subpath)))
sm))
(if (null? (cddr sm))
(cadr sm)
sm)))
(let normalize-recur ([s s])
(cond [(string? s)
@ -317,11 +319,15 @@ Use syntax/modcollapse instead.
[(eq? (car s) 'planet) (normalize-planet s)]
[(eq? (car s) 'quote) s]
[(eq? (car s) 'submod)
(if (equal? (cadr s) ".")
(begin
(flatten-relto-mp!)
(normalize-submod `(submod ,relto-mp ,@relto-submod ,@(cddr s))))
(normalize-submod `(submod ,(normalize-recur (cadr s)) ,@relto-submod ,@(cddr s))))]
(cond
[(equal? (cadr s) ".")
(flatten-relto-mp!)
(normalize-submod `(submod ,relto-mp ,@relto-submod ,@(cddr s)))]
[(equal? (cadr s) "..")
(flatten-relto-mp!)
(normalize-submod `(submod ,relto-mp ,@relto-submod ,@(cdr s)))]
[else
(normalize-submod `(submod ,(normalize-recur (cadr s)) ,@relto-submod ,@(cddr s)))])]
[else #f])))
(define (collapse-module-path-index mpi relto-mp)

View File

@ -14,6 +14,7 @@
(unless (and (pair? path) (eq? 'submod (car path)))
(test `(submod ,expect a b) resolve-module-path `(submod ,path a b) rel-to)
(test `(submod ,expect a b) resolve-module-path `(submod ,path a c ".." b) rel-to)
(test expect resolve-module-path `(submod ,path) rel-to)
(when rel-to
(test expect collapse-module-path path (if (procedure? rel-to)
(lambda () `(submod ,(rel-to) a b))
@ -29,7 +30,8 @@
pi-rel-to)
(unless (and (pair? path)
(eq? (car path) 'submod)
(equal? (cadr path) "."))
(or (equal? (cadr path) ".")
(equal? (cadr path) "..")))
(test expect resolve-module-path-index
(module-path-index-join path
(module-path-index-join
@ -67,8 +69,10 @@
(test-rmp (build-path (current-directory) "x.rkt") (build-path (current-directory) "x.ss") #f)
(test-rmp (build-path (current-directory) "x.rkt") (build-path "x.ss") #f)
(test-rmp `(submod ,(build-path mzlib "y.rkt") n) '(submod "y.rkt" n) `(submod ,(build-path mzlib "x.rkt") q z))
(test-rmp `(submod ,(build-path mzlib "x.rkt") q) '(submod "..") `(submod ,(build-path mzlib "x.rkt") q z))
(test-rmp `(submod ,(build-path mzlib "x.rkt") q) '(submod "." "..") `(submod ,(build-path mzlib "x.rkt") q z))
(test-rmp (build-path mzlib "x.rkt") '(submod "." ".." "..") `(submod ,(build-path mzlib "x.rkt") q z))
(test-rmp (build-path mzlib "x.rkt") '(submod ".." "..") `(submod ,(build-path mzlib "x.rkt") q z))
(void))
(err/rt-test (resolve-module-path "apple.ss" 'no))
@ -90,6 +94,7 @@
(unless (and (pair? path) (eq? 'submod (car path)))
(test `(submod ,expect a b) collapse-module-path `(submod ,path a b) rel-to)
(test `(submod ,expect a b) collapse-module-path `(submod ,path a c ".." b) rel-to)
(test expect collapse-module-path `(submod ,path) rel-to)
(unless (symbol? rel-to)
(test expect collapse-module-path path (if (procedure? rel-to)
(lambda () `(submod ,(rel-to) a b))
@ -97,7 +102,10 @@
(test expect collapse-module-path-index
(module-path-index-join path (module-path-index-join #f #f))
rel-to)
(unless (and (pair? path) (eq? 'submod (car path)) (equal? (cadr path) "."))
(unless (and (pair? path)
(eq? 'submod (car path))
(or (equal? (cadr path) ".")
(equal? (cadr path) "..")))
(test expect collapse-module-path-index
(module-path-index-join path
(module-path-index-join
@ -258,9 +266,13 @@
(test-cmp (build-path 'same "x.rkt") "x.ss" (build-path 'same))
(test-cmp (build-path 'same "x.scm") "x.scm" (build-path 'same))
(test-cmp ''a '(submod ".") ''a)
(test-cmp '(submod 'a x y) '(submod "." x y) ''a)
(test-cmp '(submod 'a q z x y) '(submod "." x y) '(submod 'a q z))
(test-cmp '(submod 'a q y) '(submod "." ".." y) '(submod 'a q z))
(test-cmp '(submod 'a q y) '(submod ".." y) '(submod 'a q z))
(test-cmp '(submod 'a q) '(submod "..") '(submod 'a q z))
(test-cmp '(submod 'a q y) '(submod ".." y) '(submod 'a q z))
(test-cmp ''a '(submod "." ".." "..") '(submod 'a q z))
(test-cmp `(submod ,(build-path 'same) x y) '(submod "." x y) (build-path 'same))

View File

@ -389,6 +389,9 @@
(test #t module-path? "x/.")
(test #t module-path? "x/..")
(test #t module-path? (collection-file-path "module.rktl" "tests" "racket"))
(test #t module-path? (string->path "x"))
(test #t module-path? 'hello)
(test #f module-path? 'hello/)
(test #f module-path? 'hello.rkt)

View File

@ -5,6 +5,44 @@
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(test #t module-path? '(submod "."))
(test #t module-path? '(submod "." x))
(test #t module-path? '(submod "." x y))
(test #t module-path? '(submod "." x ".." y))
(test #t module-path? '(submod "." x ".." y ".." ".." ".."))
(test #f module-path? '(submod "." "x" y))
(test #f module-path? '(submod "." x "y"))
(test #t module-path? '(submod ".."))
(test #t module-path? '(submod ".." x))
(test #t module-path? '(submod ".." x y))
(test #f module-path? '(submod ".." "x" y))
(test #f module-path? '(submod ".." x "y"))
(test #t module-path? '(submod ".." ".."))
(test #f module-path? '(submod ".." "."))
(test #t module-path? '(submod x a b))
(test #f module-path? '(submod x "a" b))
(test #t module-path? '(submod 'x a))
(test #t module-path? '(submod 'x))
(define (check-resolution root [root-mod root])
(test root resolved-module-path-name
(module-path-index-resolve (module-path-index-join `(submod ,root-mod) #f)))
(test root resolved-module-path-name
(module-path-index-resolve (module-path-index-join `(submod ".") (make-resolved-module-path root))))
(test root resolved-module-path-name
(module-path-index-resolve (module-path-index-join `(submod "." "..") (make-resolved-module-path (list root 'y)))))
(test root resolved-module-path-name
(module-path-index-resolve (module-path-index-join `(submod "..") (make-resolved-module-path (list root 'y)))))
(err/rt-test
(module-path-index-resolve (module-path-index-join `(submod "..") (make-resolved-module-path root)))
exn:fail?))
(check-resolution 'x ''x)
(check-resolution (path->complete-path "file.rkt"))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(module subm-example-1 racket/base
(define x 1)
(provide x)

View File

@ -1,5 +1,5 @@
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,
13,0,20,0,33,0,38,0,42,0,45,0,50,0,57,0,61,0,66,0,73,
0,82,0,85,0,91,0,105,0,119,0,122,0,128,0,132,0,134,0,145,0,
@ -16,12 +16,12 @@
108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1,
20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,
61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,
160,77,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16,
237,81,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16,
20,2,3,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2,
2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97,
37,11,8,240,160,77,0,0,93,159,2,16,36,37,16,2,2,13,161,2,2,
37,2,13,2,2,2,13,96,38,11,8,240,160,77,0,0,16,0,96,11,11,
8,240,160,77,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,
37,11,8,240,237,81,0,0,93,159,2,16,36,37,16,2,2,13,161,2,2,
37,2,13,2,2,2,13,96,38,11,8,240,237,81,0,0,16,0,96,11,11,
8,240,237,81,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,
2,2,11,11,8,32,8,31,8,30,8,29,27,248,22,156,4,195,249,22,149,
4,80,158,39,36,251,22,83,2,18,248,22,98,199,12,249,22,73,2,19,248,
22,100,201,27,248,22,156,4,195,249,22,149,4,80,158,39,36,251,22,83,2,
@ -30,14 +30,14 @@
194,248,22,74,193,249,22,149,4,80,158,39,36,251,22,83,2,18,248,22,74,
199,249,22,73,2,6,248,22,75,201,11,18,100,10,13,16,5,36,2,14,2,
2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,
110,118,49,53,50,52,48,16,4,11,11,2,21,3,1,8,101,110,118,49,53,
50,52,49,27,248,22,75,248,22,156,4,196,28,248,22,81,193,20,14,159,37,
110,118,49,53,53,52,49,16,4,11,11,2,21,3,1,8,101,110,118,49,53,
53,52,50,27,248,22,75,248,22,156,4,196,28,248,22,81,193,20,14,159,37,
36,37,28,248,22,81,248,22,75,194,248,22,74,193,249,22,149,4,80,158,39,
36,250,22,83,2,22,248,22,83,249,22,83,248,22,83,2,23,248,22,74,201,
251,22,83,2,18,2,23,2,23,249,22,73,2,7,248,22,75,204,18,100,11,
13,16,5,36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,
11,2,20,3,1,8,101,110,118,49,53,50,52,51,16,4,11,11,2,21,3,
1,8,101,110,118,49,53,50,52,52,248,22,156,4,193,27,248,22,156,4,194,
11,2,20,3,1,8,101,110,118,49,53,53,52,52,16,4,11,11,2,21,3,
1,8,101,110,118,49,53,53,52,53,248,22,156,4,193,27,248,22,156,4,194,
249,22,73,248,22,83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,156,
4,23,197,1,249,22,149,4,80,158,39,36,28,248,22,58,248,22,150,4,248,
22,74,23,198,2,27,249,22,2,32,0,88,163,8,36,37,43,11,9,222,33,
@ -67,8 +67,8 @@
28,249,22,142,9,248,22,150,4,248,22,74,200,64,101,108,115,101,10,248,22,
74,197,250,22,84,2,22,9,248,22,75,200,249,22,73,2,11,248,22,75,202,
99,13,16,5,36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,
11,11,2,20,3,1,8,101,110,118,49,53,50,54,54,16,4,11,11,2,21,
3,1,8,101,110,118,49,53,50,54,55,18,158,94,10,64,118,111,105,100,8,
11,11,2,20,3,1,8,101,110,118,49,53,53,54,55,16,4,11,11,2,21,
3,1,8,101,110,118,49,53,53,54,56,18,158,94,10,64,118,111,105,100,8,
48,27,248,22,75,248,22,156,4,196,249,22,149,4,80,158,39,36,28,248,22,
58,248,22,150,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,199,
248,22,98,198,27,248,22,150,4,248,22,74,197,250,22,83,2,28,248,22,83,
@ -99,7 +99,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 2024);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,109,0,0,0,1,0,0,8,0,
21,0,26,0,43,0,65,0,94,0,109,0,127,0,139,0,155,0,169,0,191,
0,207,0,224,0,246,0,1,1,7,1,16,1,23,1,30,1,42,1,58,1,
@ -599,7 +599,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 10435);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,
40,0,57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,
0,178,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,
@ -626,7 +626,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 502);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,1,0,0,7,0,
18,0,45,0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,158,0,170,
0,185,0,201,0,219,0,239,0,251,0,11,1,34,1,46,1,77,1,84,1,
@ -634,8 +634,8 @@
1,163,1,170,1,174,1,185,1,192,1,195,1,203,1,212,1,220,1,21,2,
124,2,145,2,166,2,196,2,226,2,28,3,86,3,135,3,184,3,32,10,83,
10,146,10,165,10,179,10,81,11,94,11,228,11,14,13,137,13,143,13,171,13,
184,13,81,14,88,14,142,14,164,14,184,14,239,14,249,14,80,15,82,15,185,
15,202,23,255,23,23,24,47,24,0,0,177,27,0,0,66,35,37,98,111,111,
184,13,90,14,97,14,151,14,173,14,193,14,248,14,2,15,89,15,91,15,194,
15,38,24,91,24,115,24,139,24,0,0,13,28,0,0,66,35,37,98,111,111,
116,70,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97,117,108,116,
45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,65,113,117,
111,116,101,29,94,2,4,67,35,37,117,116,105,108,115,11,68,35,37,112,97,
@ -807,177 +807,181 @@
249,22,144,9,248,22,74,23,199,2,2,32,28,248,22,81,23,196,2,86,95,
23,196,1,23,195,1,250,22,175,9,2,21,6,37,37,116,111,111,32,109,97,
110,121,32,34,46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108,101,
32,112,97,116,104,58,32,126,46,115,250,22,84,2,31,28,249,22,144,9,200,
2,33,198,249,22,83,28,248,22,58,201,2,4,2,34,200,199,251,2,65,196,
197,248,22,75,199,248,22,75,200,251,2,65,196,197,249,22,73,248,22,74,202,
200,248,22,75,200,251,2,65,196,197,9,197,27,249,22,155,7,6,31,31,115,
116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114,
101,115,111,108,118,101,114,58,32,196,28,193,250,22,177,9,11,195,196,248,22,
175,9,193,28,249,22,138,7,194,2,33,2,27,28,249,22,138,7,194,2,32,
62,117,112,192,32,70,88,163,8,36,37,50,11,67,115,115,45,62,114,107,116,
222,33,71,27,248,22,135,7,194,28,249,22,188,3,194,39,28,249,22,138,7,
6,3,3,46,115,115,249,22,154,7,197,249,22,176,3,198,39,249,22,155,7,
250,22,154,7,198,36,249,22,176,3,199,39,2,38,193,193,0,8,35,114,120,
34,91,46,93,34,28,249,22,144,9,248,22,75,23,200,2,23,197,1,28,249,
22,142,9,248,22,74,23,200,2,23,196,1,251,22,175,9,2,21,6,28,28,
99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,
46,115,58,32,126,46,115,23,200,1,249,22,2,22,75,248,22,88,249,22,73,
23,206,1,23,202,1,12,12,247,192,20,13,159,80,159,43,48,38,249,22,73,
249,22,73,248,22,172,15,247,22,137,13,23,201,1,23,195,1,20,13,159,80,
159,43,40,37,250,80,159,46,41,37,249,22,27,11,80,159,48,40,37,22,181,
4,23,198,2,249,247,22,163,5,23,200,1,27,248,22,61,248,22,163,14,23,
201,1,28,23,202,2,28,250,22,153,2,23,200,1,23,201,1,11,249,22,73,
11,203,249,22,73,194,203,192,86,94,28,28,248,22,159,14,23,197,2,10,248,
22,148,5,23,197,2,12,28,23,198,2,250,22,177,9,11,6,15,15,98,97,
100,32,109,111,100,117,108,101,32,112,97,116,104,23,201,2,250,22,178,9,2,
21,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,
116,104,23,199,2,28,28,248,22,71,23,197,2,249,22,142,9,248,22,74,23,
199,2,2,4,11,248,22,139,5,248,22,98,197,28,28,248,22,71,23,197,2,
28,249,22,142,9,248,22,74,23,199,2,2,31,28,248,22,71,248,22,98,23,
198,2,249,22,142,9,248,22,102,23,199,2,2,4,11,11,11,86,98,23,199,
1,23,198,1,23,197,1,23,194,1,23,193,1,248,22,139,5,249,2,64,248,
22,115,23,200,2,248,22,100,23,200,1,28,28,248,22,71,23,197,2,28,249,
22,142,9,248,22,74,23,199,2,2,31,28,249,22,144,9,248,22,98,23,199,
2,2,33,28,23,197,2,27,248,22,140,5,23,199,2,28,248,22,58,193,10,
28,248,22,71,193,248,22,58,248,22,74,194,11,11,11,11,11,86,97,23,199,
1,23,198,1,23,194,1,23,193,1,27,248,22,140,5,23,199,1,248,22,139,
5,249,2,64,28,248,22,71,23,197,2,248,22,74,23,197,2,23,196,2,28,
248,22,71,23,197,2,249,22,87,248,22,75,23,199,1,248,22,100,23,203,1,
86,94,23,196,1,248,22,100,23,201,1,28,28,248,22,71,23,197,2,249,22,
142,9,248,22,74,23,199,2,2,35,11,86,94,23,193,1,86,94,28,208,12,
20,13,159,80,159,38,55,37,80,158,38,53,89,161,37,37,10,249,22,183,4,
21,94,2,36,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,
114,46,114,107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,
110,97,109,101,45,114,101,115,111,108,118,101,114,12,252,213,200,201,202,203,80,
158,43,53,86,94,23,194,1,28,28,248,22,71,23,197,2,28,249,22,142,9,
248,22,74,23,199,2,2,31,28,248,22,71,248,22,98,23,198,2,249,22,142,
9,248,22,102,23,199,2,2,35,11,11,11,35,251,24,198,1,248,22,98,201,
23,202,2,23,203,1,23,204,1,27,248,22,140,5,23,200,1,28,248,22,71,
193,249,2,64,248,22,74,195,249,22,87,248,22,75,197,248,22,100,202,249,2,
64,194,248,22,100,200,86,94,23,193,1,27,88,163,8,36,37,47,11,79,115,
104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223,6,33,
68,27,28,248,22,71,23,199,2,28,249,22,142,9,2,31,248,22,74,23,201,
2,27,248,22,98,23,200,2,28,249,22,144,9,23,195,2,2,33,86,94,23,
193,1,28,23,200,2,27,248,22,140,5,23,202,2,28,248,22,71,193,248,22,
74,193,192,250,22,175,9,2,21,6,45,45,110,111,32,98,97,115,101,32,112,
97,116,104,32,102,111,114,32,114,101,108,97,116,105,118,101,32,115,117,98,109,
111,100,117,108,101,32,112,97,116,104,58,32,126,46,115,23,202,2,192,23,198,
2,23,198,2,27,28,248,22,71,23,200,2,28,249,22,142,9,2,31,248,22,
74,23,202,2,27,28,28,249,22,144,9,248,22,98,23,203,2,2,33,23,201,
2,11,27,248,22,140,5,23,203,2,28,248,22,71,23,194,2,249,2,64,248,
22,74,23,196,2,249,22,87,248,22,75,23,198,1,248,22,100,23,206,1,249,
2,64,23,195,1,248,22,100,23,204,1,249,2,64,2,33,248,22,100,23,203,
1,28,248,22,71,193,248,22,75,193,11,11,11,27,28,248,22,58,23,196,2,
27,248,80,159,44,46,39,249,22,73,23,199,2,247,22,137,15,28,23,193,2,
192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,47,52,39,
248,22,64,23,201,2,11,27,28,248,22,81,23,195,2,2,37,249,22,155,7,
23,197,2,2,38,251,80,159,50,57,39,23,204,1,28,248,22,81,23,199,2,
23,199,1,86,94,23,199,1,248,22,74,23,199,2,28,248,22,81,23,199,2,
86,94,23,198,1,9,248,22,75,23,199,1,23,197,1,28,248,22,132,7,23,
196,2,86,94,23,196,1,27,248,80,159,44,8,26,39,23,203,2,27,248,80,
159,45,46,39,249,22,73,23,200,2,23,197,2,28,23,193,2,192,86,94,23,
193,1,90,159,38,11,89,161,38,36,11,249,80,159,48,52,39,23,201,2,11,
250,22,1,22,177,14,23,199,1,249,22,87,249,22,2,32,0,88,163,8,36,
37,44,11,9,222,33,69,23,200,1,248,22,83,248,2,70,23,201,1,28,248,
22,159,14,23,196,2,86,94,23,196,1,248,80,159,43,8,27,39,248,22,186,
14,28,248,22,183,14,23,198,2,23,197,2,249,22,184,14,23,199,2,248,80,
159,47,8,26,39,23,206,2,28,249,22,142,9,248,22,74,23,198,2,2,36,
27,248,80,159,44,46,39,249,22,73,23,199,2,247,22,137,15,28,23,193,2,
192,86,94,23,193,1,90,159,39,11,89,161,38,36,11,249,80,159,48,52,39,
248,22,98,23,202,2,11,89,161,37,38,11,28,248,22,81,248,22,100,23,201,
2,28,248,22,81,23,194,2,249,22,151,15,2,72,23,196,2,11,10,27,28,
23,196,2,248,2,70,23,196,2,28,248,22,81,23,195,2,2,37,28,249,22,
151,15,2,72,23,197,2,248,2,70,23,196,2,249,22,155,7,23,197,2,2,
38,27,28,23,197,1,86,94,23,196,1,249,22,87,28,248,22,81,248,22,100,
23,205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,87,249,22,2,
80,159,54,8,28,39,248,22,100,23,208,2,23,197,1,28,248,22,81,23,196,
2,86,94,23,195,1,248,22,83,23,197,1,86,94,23,196,1,23,195,1,251,
80,159,52,57,39,23,206,1,248,22,74,23,198,2,248,22,75,23,198,1,23,
198,1,28,249,22,142,9,248,22,74,23,198,2,2,34,248,80,159,43,8,27,
39,248,22,186,14,249,22,184,14,248,22,188,14,248,22,98,23,201,2,248,80,
159,47,8,26,39,23,206,2,12,86,94,28,28,248,22,159,14,23,194,2,10,
248,22,157,8,23,194,2,86,94,23,202,1,12,28,23,202,2,250,22,177,9,
67,114,101,113,117,105,114,101,249,22,180,7,6,17,17,98,97,100,32,109,111,
100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,74,23,199,2,
2,39,23,205,1,86,94,23,202,1,250,22,178,9,2,21,249,22,180,7,6,
13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,
74,23,199,2,2,39,23,198,2,27,28,248,22,157,8,23,195,2,249,22,162,
8,23,196,2,36,249,22,186,14,248,22,187,14,23,197,2,11,27,28,248,22,
157,8,23,196,2,249,22,162,8,23,197,2,37,248,80,159,45,58,39,23,195,
2,90,159,39,11,89,161,39,36,11,28,248,22,157,8,23,199,2,250,22,7,
2,40,249,22,162,8,23,203,2,38,2,40,248,22,180,14,23,198,2,86,95,
23,195,1,23,193,1,27,28,248,22,157,8,23,200,2,249,22,162,8,23,201,
2,39,249,80,159,50,56,39,23,197,2,5,0,27,28,248,22,157,8,23,201,
2,249,22,162,8,23,202,2,40,248,22,139,5,23,200,2,27,250,22,153,2,
80,159,53,43,38,248,22,172,15,247,22,137,13,11,27,28,23,194,2,23,194,
1,86,94,23,194,1,27,247,22,133,2,86,94,250,22,151,2,80,159,55,43,
38,248,22,172,15,247,22,137,13,195,192,27,28,23,204,2,248,22,139,5,249,
22,73,248,22,140,5,23,200,2,23,207,2,23,196,2,86,95,28,23,213,1,
27,250,22,153,2,23,198,2,196,11,28,23,193,1,12,86,94,27,27,28,248,
22,17,80,159,56,49,38,80,159,55,49,38,247,22,19,251,22,27,11,80,159,
59,48,38,9,23,197,1,27,248,22,172,15,247,22,137,13,86,94,249,22,3,
20,20,94,88,163,8,36,37,55,11,9,226,14,13,2,3,33,73,23,195,1,
23,196,2,248,28,248,22,17,80,159,57,49,38,32,0,88,163,36,37,42,11,
9,222,33,74,80,159,56,8,29,39,20,20,95,88,163,36,36,55,8,176,64,
9,230,20,15,13,12,8,7,5,2,33,75,23,195,1,23,208,1,250,22,151,
2,23,198,1,196,10,12,28,28,248,22,157,8,23,204,1,11,28,248,22,132,
7,23,206,2,10,28,248,22,58,23,206,2,10,28,248,22,71,23,206,2,249,
22,142,9,248,22,74,23,208,2,2,36,11,249,80,159,54,47,39,28,248,22,
132,7,23,208,2,249,22,73,23,209,1,248,80,159,57,8,26,39,23,216,1,
86,94,23,213,1,249,22,73,23,209,1,247,22,137,15,252,22,159,8,23,209,
1,23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18,159,11,
80,158,36,53,248,80,159,37,8,25,37,249,22,27,11,80,159,39,55,37,248,
22,180,4,80,159,37,54,38,248,22,163,5,80,159,37,37,39,248,22,128,14,
80,159,37,42,39,20,18,159,11,80,158,36,53,248,80,159,37,8,25,37,249,
22,27,11,80,159,39,55,37,20,18,159,11,80,158,36,53,248,80,159,37,8,
25,37,249,22,27,11,80,159,39,55,37,159,36,20,113,159,36,16,1,11,16,
0,20,26,144,9,2,1,2,1,29,11,11,9,9,11,11,11,10,38,80,158,
36,36,20,113,159,40,16,26,2,2,2,3,30,2,5,72,112,97,116,104,45,
115,116,114,105,110,103,63,11,30,2,5,75,112,97,116,104,45,97,100,100,45,
115,117,102,102,105,120,8,30,2,7,2,8,6,30,2,7,1,23,101,120,116,
101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,
2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,
19,2,20,2,21,30,2,22,2,8,6,30,2,5,79,112,97,116,104,45,114,
101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2,5,73,102,105,110,
100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110,111,114,109,97,108,
45,99,97,115,101,45,112,97,116,104,7,2,23,2,24,30,2,22,74,114,101,
112,97,114,97,109,101,116,101,114,105,122,101,7,16,0,37,39,36,16,0,36,
16,14,2,15,2,16,2,10,2,12,2,17,2,18,2,11,2,3,2,9,2,
2,2,13,2,14,2,19,2,21,50,11,11,11,16,3,2,23,2,20,2,24,
16,3,11,11,11,16,3,2,23,2,20,2,24,39,39,37,12,11,11,16,0,
16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,21,20,
15,16,2,88,163,36,37,45,8,128,128,9,223,0,33,41,80,159,36,8,29,
39,20,15,16,2,88,163,8,36,37,45,8,240,0,0,1,0,9,223,0,33,
42,80,159,36,8,28,39,20,15,16,2,88,163,36,37,49,8,240,0,0,16,
0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0,33,43,80,159,36,
8,27,39,20,15,16,2,88,163,36,37,49,8,240,0,192,0,0,67,103,101,
116,45,100,105,114,223,0,33,44,80,159,36,8,26,39,20,15,16,2,248,22,
154,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,20,15,16,2,
88,163,36,38,8,38,8,61,2,3,223,0,33,53,80,159,36,37,37,20,15,
16,2,20,27,158,32,0,88,163,8,36,37,42,11,2,9,222,192,32,0,88,
163,8,36,37,42,11,2,9,222,192,80,159,36,42,37,20,15,16,2,247,22,
136,2,80,159,36,43,37,20,15,16,2,8,128,8,80,159,36,44,37,20,15,
16,2,249,22,158,8,8,128,8,11,80,159,36,45,37,20,15,16,2,88,163,
8,36,37,50,8,128,8,2,13,223,0,33,54,80,159,36,46,37,20,15,16,
2,88,163,8,36,38,55,8,128,8,2,14,223,0,33,55,80,159,36,47,37,
20,15,16,2,247,22,69,80,159,36,48,37,20,15,16,2,248,22,18,74,109,
111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,36,49,37,20,15,16,
2,11,80,158,36,50,20,15,16,2,11,80,158,36,51,20,15,16,2,32,0,
88,163,36,38,8,25,11,2,19,222,33,61,80,159,36,52,37,20,15,16,2,
11,80,158,36,53,20,15,16,2,27,11,20,19,158,36,90,159,37,10,89,161,
37,36,10,20,25,96,2,21,88,163,8,36,37,51,8,128,2,9,224,2,1,
33,62,88,163,36,39,49,11,9,223,0,33,63,88,163,36,40,8,33,16,2,
8,176,242,8,187,241,9,225,2,1,0,33,76,207,80,159,36,54,37,20,15,
16,2,88,163,36,36,45,8,240,66,0,14,2,2,23,223,0,33,77,80,159,
36,59,37,20,15,16,2,20,27,158,88,163,8,36,36,45,8,240,0,0,10,
2,2,24,223,0,33,78,88,163,8,36,36,45,8,240,0,0,10,2,2,24,
223,0,33,79,80,159,36,8,24,37,96,29,94,2,4,68,35,37,107,101,114,
110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2,5,
2,22,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 7293);
32,112,97,116,104,58,32,126,46,115,250,22,84,2,31,28,249,22,144,9,23,
201,2,2,33,198,28,248,22,159,14,199,198,249,22,83,28,248,22,58,201,2,
4,2,34,200,199,251,2,65,196,197,248,22,75,199,248,22,75,200,251,2,65,
196,197,249,22,73,248,22,74,202,200,248,22,75,200,251,2,65,196,197,9,197,
27,249,22,155,7,6,31,31,115,116,97,110,100,97,114,100,45,109,111,100,117,
108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,58,32,196,28,193,
250,22,177,9,11,195,196,248,22,175,9,193,28,249,22,138,7,194,2,33,2,
27,28,249,22,138,7,194,2,32,62,117,112,192,32,70,88,163,8,36,37,50,
11,67,115,115,45,62,114,107,116,222,33,71,27,248,22,135,7,194,28,249,22,
188,3,194,39,28,249,22,138,7,6,3,3,46,115,115,249,22,154,7,197,249,
22,176,3,198,39,249,22,155,7,250,22,154,7,198,36,249,22,176,3,199,39,
2,38,193,193,0,8,35,114,120,34,91,46,93,34,28,249,22,144,9,248,22,
75,23,200,2,23,197,1,28,249,22,142,9,248,22,74,23,200,2,23,196,1,
251,22,175,9,2,21,6,28,28,99,121,99,108,101,32,105,110,32,108,111,97,
100,105,110,103,32,97,116,32,126,46,115,58,32,126,46,115,23,200,1,249,22,
2,22,75,248,22,88,249,22,73,23,206,1,23,202,1,12,12,247,192,20,13,
159,80,159,43,48,38,249,22,73,249,22,73,248,22,172,15,247,22,137,13,23,
201,1,23,195,1,20,13,159,80,159,43,40,37,250,80,159,46,41,37,249,22,
27,11,80,159,48,40,37,22,181,4,23,198,2,249,247,22,163,5,23,200,1,
27,248,22,61,248,22,163,14,23,201,1,28,23,202,2,28,250,22,153,2,23,
200,1,23,201,1,11,249,22,73,11,203,249,22,73,194,203,192,86,94,28,28,
248,22,159,14,23,197,2,10,248,22,148,5,23,197,2,12,28,23,198,2,250,
22,177,9,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,
104,23,201,2,250,22,178,9,2,21,6,19,19,109,111,100,117,108,101,45,112,
97,116,104,32,111,114,32,112,97,116,104,23,199,2,28,28,248,22,71,23,197,
2,249,22,142,9,248,22,74,23,199,2,2,4,11,248,22,139,5,248,22,98,
197,28,28,248,22,71,23,197,2,28,249,22,142,9,248,22,74,23,199,2,2,
31,28,248,22,71,248,22,98,23,198,2,249,22,142,9,248,22,102,23,199,2,
2,4,11,11,11,86,98,23,199,1,23,198,1,23,197,1,23,194,1,23,193,
1,248,22,139,5,249,2,64,248,22,115,23,200,2,248,22,100,23,200,1,28,
28,248,22,71,23,197,2,28,249,22,142,9,248,22,74,23,199,2,2,31,28,
28,249,22,144,9,248,22,98,23,199,2,2,33,10,249,22,144,9,248,22,98,
23,199,2,2,32,28,23,197,2,27,248,22,140,5,23,199,2,28,248,22,58,
193,10,28,248,22,71,193,248,22,58,248,22,74,194,11,11,11,11,11,86,97,
23,199,1,23,198,1,23,194,1,23,193,1,27,248,22,140,5,23,199,1,248,
22,139,5,249,2,64,28,248,22,71,23,197,2,248,22,74,23,197,2,23,196,
2,27,28,249,22,144,9,248,22,98,23,204,2,2,32,248,22,75,201,248,22,
100,201,28,248,22,71,23,198,2,249,22,87,248,22,75,199,194,192,28,28,248,
22,71,23,197,2,249,22,142,9,248,22,74,23,199,2,2,35,11,86,94,23,
193,1,86,94,28,208,12,20,13,159,80,159,38,55,37,80,158,38,53,89,161,
37,37,10,249,22,183,4,21,94,2,36,6,19,19,112,108,97,110,101,116,47,
114,101,115,111,108,118,101,114,46,114,107,116,1,27,112,108,97,110,101,116,45,
109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,
252,213,200,201,202,203,80,158,43,53,86,94,23,194,1,28,28,248,22,71,23,
197,2,28,249,22,142,9,248,22,74,23,199,2,2,31,28,248,22,71,248,22,
98,23,198,2,249,22,142,9,248,22,102,23,199,2,2,35,11,11,11,35,251,
24,198,1,248,22,98,201,23,202,2,23,203,1,23,204,1,27,248,22,140,5,
23,200,1,28,248,22,71,193,249,2,64,248,22,74,195,249,22,87,248,22,75,
197,248,22,100,202,249,2,64,194,248,22,100,200,86,94,23,193,1,27,88,163,
8,36,37,47,11,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,
45,101,114,114,223,6,33,68,27,28,248,22,71,23,199,2,28,249,22,142,9,
2,31,248,22,74,23,201,2,27,248,22,98,23,200,2,28,28,249,22,144,9,
23,195,2,2,33,10,249,22,144,9,23,195,2,2,32,86,94,23,193,1,28,
23,200,2,27,248,22,140,5,23,202,2,28,248,22,71,193,248,22,74,193,192,
250,22,175,9,2,21,6,45,45,110,111,32,98,97,115,101,32,112,97,116,104,
32,102,111,114,32,114,101,108,97,116,105,118,101,32,115,117,98,109,111,100,117,
108,101,32,112,97,116,104,58,32,126,46,115,23,202,2,192,23,198,2,23,198,
2,27,28,248,22,71,23,200,2,28,249,22,142,9,2,31,248,22,74,23,202,
2,27,28,28,28,249,22,144,9,248,22,98,23,203,2,2,33,10,249,22,144,
9,248,22,98,23,203,2,2,32,23,201,2,11,27,248,22,140,5,23,203,2,
27,28,249,22,144,9,248,22,98,23,205,2,2,32,248,22,75,23,203,1,248,
22,100,23,203,1,28,248,22,71,23,195,2,249,2,64,248,22,74,23,197,2,
249,22,87,248,22,75,23,199,1,23,197,1,249,2,64,23,196,1,23,195,1,
249,2,64,2,33,28,249,22,144,9,248,22,98,23,205,2,2,32,248,22,75,
23,203,1,248,22,100,23,203,1,28,248,22,71,193,248,22,75,193,11,11,11,
27,28,248,22,58,23,196,2,27,248,80,159,44,46,39,249,22,73,23,199,2,
247,22,137,15,28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,
36,11,249,80,159,47,52,39,248,22,64,23,201,2,11,27,28,248,22,81,23,
195,2,2,37,249,22,155,7,23,197,2,2,38,251,80,159,50,57,39,23,204,
1,28,248,22,81,23,199,2,23,199,1,86,94,23,199,1,248,22,74,23,199,
2,28,248,22,81,23,199,2,86,94,23,198,1,9,248,22,75,23,199,1,23,
197,1,28,248,22,132,7,23,196,2,86,94,23,196,1,27,248,80,159,44,8,
26,39,23,203,2,27,248,80,159,45,46,39,249,22,73,23,200,2,23,197,2,
28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,
159,48,52,39,23,201,2,11,250,22,1,22,177,14,23,199,1,249,22,87,249,
22,2,32,0,88,163,8,36,37,44,11,9,222,33,69,23,200,1,248,22,83,
248,2,70,23,201,1,28,248,22,159,14,23,196,2,86,94,23,196,1,248,80,
159,43,8,27,39,248,22,186,14,28,248,22,183,14,23,198,2,23,197,2,249,
22,184,14,23,199,2,248,80,159,47,8,26,39,23,206,2,28,249,22,142,9,
248,22,74,23,198,2,2,36,27,248,80,159,44,46,39,249,22,73,23,199,2,
247,22,137,15,28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38,
36,11,249,80,159,48,52,39,248,22,98,23,202,2,11,89,161,37,38,11,28,
248,22,81,248,22,100,23,201,2,28,248,22,81,23,194,2,249,22,151,15,2,
72,23,196,2,11,10,27,28,23,196,2,248,2,70,23,196,2,28,248,22,81,
23,195,2,2,37,28,249,22,151,15,2,72,23,197,2,248,2,70,23,196,2,
249,22,155,7,23,197,2,2,38,27,28,23,197,1,86,94,23,196,1,249,22,
87,28,248,22,81,248,22,100,23,205,2,21,93,6,5,5,109,122,108,105,98,
249,22,1,22,87,249,22,2,80,159,54,8,28,39,248,22,100,23,208,2,23,
197,1,28,248,22,81,23,196,2,86,94,23,195,1,248,22,83,23,197,1,86,
94,23,196,1,23,195,1,251,80,159,52,57,39,23,206,1,248,22,74,23,198,
2,248,22,75,23,198,1,23,198,1,28,249,22,142,9,248,22,74,23,198,2,
2,34,248,80,159,43,8,27,39,248,22,186,14,249,22,184,14,248,22,188,14,
248,22,98,23,201,2,248,80,159,47,8,26,39,23,206,2,12,86,94,28,28,
248,22,159,14,23,194,2,10,248,22,157,8,23,194,2,86,94,23,202,1,12,
28,23,202,2,250,22,177,9,67,114,101,113,117,105,114,101,249,22,180,7,6,
17,17,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,
198,2,248,22,74,23,199,2,2,39,23,205,1,86,94,23,202,1,250,22,178,
9,2,21,249,22,180,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,
126,97,28,23,198,2,248,22,74,23,199,2,2,39,23,198,2,27,28,248,22,
157,8,23,195,2,249,22,162,8,23,196,2,36,249,22,186,14,248,22,187,14,
23,197,2,11,27,28,248,22,157,8,23,196,2,249,22,162,8,23,197,2,37,
248,80,159,45,58,39,23,195,2,90,159,39,11,89,161,39,36,11,28,248,22,
157,8,23,199,2,250,22,7,2,40,249,22,162,8,23,203,2,38,2,40,248,
22,180,14,23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,157,8,23,
200,2,249,22,162,8,23,201,2,39,249,80,159,50,56,39,23,197,2,5,0,
27,28,248,22,157,8,23,201,2,249,22,162,8,23,202,2,40,248,22,139,5,
23,200,2,27,250,22,153,2,80,159,53,43,38,248,22,172,15,247,22,137,13,
11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,247,22,133,2,86,94,
250,22,151,2,80,159,55,43,38,248,22,172,15,247,22,137,13,195,192,27,28,
23,204,2,248,22,139,5,249,22,73,248,22,140,5,23,200,2,23,207,2,23,
196,2,86,95,28,23,213,1,27,250,22,153,2,23,198,2,196,11,28,23,193,
1,12,86,94,27,27,28,248,22,17,80,159,56,49,38,80,159,55,49,38,247,
22,19,251,22,27,11,80,159,59,48,38,9,23,197,1,27,248,22,172,15,247,
22,137,13,86,94,249,22,3,20,20,94,88,163,8,36,37,55,11,9,226,14,
13,2,3,33,73,23,195,1,23,196,2,248,28,248,22,17,80,159,57,49,38,
32,0,88,163,36,37,42,11,9,222,33,74,80,159,56,8,29,39,20,20,95,
88,163,36,36,55,8,176,64,9,230,20,15,13,12,8,7,5,2,33,75,23,
195,1,23,208,1,250,22,151,2,23,198,1,196,10,12,28,28,248,22,157,8,
23,204,1,11,28,248,22,132,7,23,206,2,10,28,248,22,58,23,206,2,10,
28,248,22,71,23,206,2,249,22,142,9,248,22,74,23,208,2,2,36,11,249,
80,159,54,47,39,28,248,22,132,7,23,208,2,249,22,73,23,209,1,248,80,
159,57,8,26,39,23,216,1,86,94,23,213,1,249,22,73,23,209,1,247,22,
137,15,252,22,159,8,23,209,1,23,208,1,23,206,1,23,204,1,23,203,1,
12,192,86,96,20,18,159,11,80,158,36,53,248,80,159,37,8,25,37,249,22,
27,11,80,159,39,55,37,248,22,180,4,80,159,37,54,38,248,22,163,5,80,
159,37,37,39,248,22,128,14,80,159,37,42,39,20,18,159,11,80,158,36,53,
248,80,159,37,8,25,37,249,22,27,11,80,159,39,55,37,20,18,159,11,80,
158,36,53,248,80,159,37,8,25,37,249,22,27,11,80,159,39,55,37,159,36,
20,113,159,36,16,1,11,16,0,20,26,144,9,2,1,2,1,29,11,11,9,
9,11,11,11,10,38,80,158,36,36,20,113,159,40,16,26,2,2,2,3,30,
2,5,72,112,97,116,104,45,115,116,114,105,110,103,63,11,30,2,5,75,112,
97,116,104,45,97,100,100,45,115,117,102,102,105,120,8,30,2,7,2,8,6,
30,2,7,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,
105,122,97,116,105,111,110,3,2,9,2,10,2,11,2,12,2,13,2,14,2,
15,2,16,2,17,2,18,2,19,2,20,2,21,30,2,22,2,8,6,30,2,
5,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,
10,30,2,5,73,102,105,110,100,45,99,111,108,45,102,105,108,101,3,30,2,
5,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,7,2,23,
2,24,30,2,22,74,114,101,112,97,114,97,109,101,116,101,114,105,122,101,7,
16,0,37,39,36,16,0,36,16,14,2,15,2,16,2,10,2,12,2,17,2,
18,2,11,2,3,2,9,2,2,2,13,2,14,2,19,2,21,50,11,11,11,
16,3,2,23,2,20,2,24,16,3,11,11,11,16,3,2,23,2,20,2,24,
39,39,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,
0,16,0,36,36,16,21,20,15,16,2,88,163,36,37,45,8,128,128,9,223,
0,33,41,80,159,36,8,29,39,20,15,16,2,88,163,8,36,37,45,8,240,
0,0,1,0,9,223,0,33,42,80,159,36,8,28,39,20,15,16,2,88,163,
36,37,49,8,240,0,0,16,0,72,112,97,116,104,45,115,115,45,62,114,107,
116,223,0,33,43,80,159,36,8,27,39,20,15,16,2,88,163,36,37,49,8,
240,0,192,0,0,67,103,101,116,45,100,105,114,223,0,33,44,80,159,36,8,
26,39,20,15,16,2,248,22,154,8,69,115,111,45,115,117,102,102,105,120,80,
159,36,36,37,20,15,16,2,88,163,36,38,8,38,8,61,2,3,223,0,33,
53,80,159,36,37,37,20,15,16,2,20,27,158,32,0,88,163,8,36,37,42,
11,2,9,222,192,32,0,88,163,8,36,37,42,11,2,9,222,192,80,159,36,
42,37,20,15,16,2,247,22,136,2,80,159,36,43,37,20,15,16,2,8,128,
8,80,159,36,44,37,20,15,16,2,249,22,158,8,8,128,8,11,80,159,36,
45,37,20,15,16,2,88,163,8,36,37,50,8,128,8,2,13,223,0,33,54,
80,159,36,46,37,20,15,16,2,88,163,8,36,38,55,8,128,8,2,14,223,
0,33,55,80,159,36,47,37,20,15,16,2,247,22,69,80,159,36,48,37,20,
15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,
80,159,36,49,37,20,15,16,2,11,80,158,36,50,20,15,16,2,11,80,158,
36,51,20,15,16,2,32,0,88,163,36,38,8,25,11,2,19,222,33,61,80,
159,36,52,37,20,15,16,2,11,80,158,36,53,20,15,16,2,27,11,20,19,
158,36,90,159,37,10,89,161,37,36,10,20,25,96,2,21,88,163,8,36,37,
51,8,128,2,9,224,2,1,33,62,88,163,36,39,49,11,9,223,0,33,63,
88,163,36,40,8,33,16,2,8,176,242,8,187,241,9,225,2,1,0,33,76,
207,80,159,36,54,37,20,15,16,2,88,163,36,36,45,8,240,66,0,14,2,
2,23,223,0,33,77,80,159,36,59,37,20,15,16,2,20,27,158,88,163,8,
36,36,45,8,240,0,0,10,2,2,24,223,0,33,78,88,163,8,36,36,45,
8,240,0,0,10,2,2,24,223,0,33,79,80,159,36,8,24,37,96,29,94,
2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109,105,
110,45,115,116,120,11,2,5,2,22,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 7385);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,50,46,57,48,48,46,50,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,
16,0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,97,
1,0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,
@ -986,7 +990,7 @@
2,2,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,
2,66,35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,
115,11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,
151,79,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,
235,83,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,
2,6,36,36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,
9,36,36,16,0,159,36,20,113,159,36,16,1,11,16,0,20,26,144,9,2,
1,2,1,29,11,11,9,9,11,11,11,18,96,11,46,46,46,36,80,158,36,

View File

@ -2305,30 +2305,32 @@ int scheme_is_module_path(Scheme_Object *obj)
if (SCHEME_PAIRP(obj)
&& (SAME_OBJ(SCHEME_CAR(obj), submod_symbol))) {
Scheme_Object *p, *a;
int len = 0;
p = SCHEME_CDR(obj);
if (SCHEME_PAIRP(p)) {
p = SCHEME_CDR(p);
if (SCHEME_PAIRP(p)) {
while (SCHEME_PAIRP(p)) {
a = SCHEME_CAR(p);
if (!SCHEME_SYMBOLP(a)
&& (!SCHEME_CHAR_STRINGP(a)
|| (SCHEME_CHAR_STRLEN_VAL(a) != 2)
|| (SCHEME_CHAR_STR_VAL(a)[0] != '.')
|| (SCHEME_CHAR_STR_VAL(a)[1] != '.')))
break;
p = SCHEME_CDR(p);
}
} else
p = scheme_false;
while (SCHEME_PAIRP(p)) {
len++;
a = SCHEME_CAR(p);
if (!SCHEME_SYMBOLP(a)
&& (!SCHEME_CHAR_STRINGP(a)
|| (SCHEME_CHAR_STRLEN_VAL(a) != 2)
|| (SCHEME_CHAR_STR_VAL(a)[0] != '.')
|| (SCHEME_CHAR_STR_VAL(a)[1] != '.')))
break;
p = SCHEME_CDR(p);
}
} else
p = scheme_false;
if (SCHEME_NULLP(p)) {
obj = SCHEME_CDR(obj);
obj = SCHEME_CAR(obj);
if (SCHEME_CHAR_STRINGP(obj)
&& (SCHEME_CHAR_STRLEN_VAL(obj) == 1)
&& (SCHEME_CHAR_STR_VAL(obj)[0] == '.'))
&& (((SCHEME_CHAR_STRLEN_VAL(obj) == 1)
&& (SCHEME_CHAR_STR_VAL(obj)[0] == '.'))
|| ((SCHEME_CHAR_STRLEN_VAL(obj) == 2)
&& (SCHEME_CHAR_STR_VAL(obj)[0] == '.')
&& (SCHEME_CHAR_STR_VAL(obj)[1] == '.'))))
return 1;
}
}
@ -6512,9 +6514,8 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env,
Scheme_Object *rn;
iidx = scheme_make_modidx(scheme_make_pair(submod_symbol,
scheme_make_pair(scheme_make_utf8_string("."),
scheme_make_pair(scheme_make_utf8_string(".."),
scheme_null))),
scheme_make_pair(scheme_make_utf8_string(".."),
scheme_null)),
self_modidx,
scheme_false);

View File

@ -13,12 +13,12 @@
consistently.)
*/
#define MZSCHEME_VERSION "5.2.900.1"
#define MZSCHEME_VERSION "5.2.900.2"
#define MZSCHEME_VERSION_X 5
#define MZSCHEME_VERSION_Y 2
#define MZSCHEME_VERSION_Z 900
#define MZSCHEME_VERSION_W 1
#define MZSCHEME_VERSION_W 2
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

View File

@ -839,7 +839,9 @@
"(list* 'submod"
" (if (equal? base \".\") "
" base "
"(list(if(symbol? base) 'quote 'file) base))"
"(if(path? base)"
" base"
"(list(if(symbol? base) 'quote 'file) base)))"
" orig-l))"
"(loop(cdr a)(cdr l))))"
"(else(loop(cons(car l) a)(cdr l))))))"
@ -850,16 +852,20 @@
"(pair?(cadr s))(eq?(caadr s) 'quote))"
"(make-resolved-module-path(flatten-sub-path(cadadr s)(cddr s))))"
"((and(pair? s)(eq?(car s) 'submod)"
" (equal? (cadr s) \".\")"
" (or (equal? (cadr s) \".\")"
" (equal? (cadr s) \"..\"))"
"(and relto"
"(let((p(resolved-module-path-name relto)))"
"(or(symbol? p)"
"(and(pair? p)(symbol?(car p)))))))"
"(define rp(resolved-module-path-name relto))"
"(make-resolved-module-path(flatten-sub-path(if(pair? rp)(car rp) rp)"
" (let ((r (if (equal? (cadr s) \"..\")"
"(cdr s)"
"(cddr s))))"
"(if(pair? rp)"
"(append(cdr rp)(cddr s))"
"(cddr s)))))"
"(append(cdr rp) r)"
" r)))))"
"((and(pair? s)(eq?(car s) 'planet))"
"(unless planet-resolver"
"(with-continuation-mark"
@ -910,7 +916,8 @@
" p))))"
"(s(if(and(pair? s)(eq? 'submod(car s)))"
"(let((v(cadr s)))"
" (if (equal? v \".\")"
" (if (or (equal? v \".\")"
" (equal? v \"..\"))"
"(if relto"
"(let((p(resolved-module-path-name relto)))"
"(if(pair? p)"
@ -922,13 +929,20 @@
" v))"
" s))"
"(subm-path(if(and(pair? s)(eq? 'submod(car s)))"
" (let ((p (if (and (equal? (cadr s) \".\")"
" (let ((p (if (and (or (equal? (cadr s) \".\")"
" (equal? (cadr s) \"..\"))"
" relto)"
"(let((p(resolved-module-path-name relto)))"
"(let((p(resolved-module-path-name relto))"
" (r (if (equal? (cadr s) \"..\")"
"(cdr s)"
"(cddr s))))"
"(if(pair? p)"
"(flatten-sub-path(car p)(append(cdr p)(cddr s)))"
"(flatten-sub-path p(cddr s))))"
" (flatten-sub-path \".\" (cddr s)))))"
"(flatten-sub-path(car p)(append(cdr p) r))"
"(flatten-sub-path p r)))"
" (flatten-sub-path \".\" "
" (if (equal? (cadr s) \"..\")"
"(cdr s)"
"(cddr s))))))"
"(if(pair? p)"
"(cdr p)"
" #f))"

View File

@ -967,7 +967,9 @@
(list* 'submod
(if (equal? base ".")
base
(list (if (symbol? base) 'quote 'file) base))
(if (path? base)
base
(list (if (symbol? base) 'quote 'file) base)))
orig-l))
(loop (cdr a) (cdr l)))]
[else (loop (cons (car l) a) (cdr l))])))
@ -978,16 +980,20 @@
(pair? (cadr s)) (eq? (caadr s) 'quote))
(make-resolved-module-path (flatten-sub-path (cadadr s) (cddr s)))]
[(and (pair? s) (eq? (car s) 'submod)
(equal? (cadr s) ".")
(or (equal? (cadr s) ".")
(equal? (cadr s) ".."))
(and relto
(let ([p (resolved-module-path-name relto)])
(or (symbol? p)
(and (pair? p) (symbol? (car p)))))))
(define rp (resolved-module-path-name relto))
(make-resolved-module-path (flatten-sub-path (if (pair? rp) (car rp) rp)
(if (pair? rp)
(append (cdr rp) (cddr s))
(cddr s))))]
(let ([r (if (equal? (cadr s) "..")
(cdr s)
(cddr s))])
(if (pair? rp)
(append (cdr rp) r)
r))))]
[(and (pair? s) (eq? (car s) 'planet))
(unless planet-resolver
(with-continuation-mark
@ -1038,7 +1044,8 @@
p)))]
[s (if (and (pair? s) (eq? 'submod (car s)))
(let ([v (cadr s)])
(if (equal? v ".")
(if (or (equal? v ".")
(equal? v ".."))
(if relto
;; must have a path inside, or we wouldn't get here
(let ([p (resolved-module-path-name relto)])
@ -1051,13 +1058,20 @@
v))
s)]
[subm-path (if (and (pair? s) (eq? 'submod (car s)))
(let ([p (if (and (equal? (cadr s) ".")
(let ([p (if (and (or (equal? (cadr s) ".")
(equal? (cadr s) ".."))
relto)
(let ([p (resolved-module-path-name relto)])
(let ([p (resolved-module-path-name relto)]
[r (if (equal? (cadr s) "..")
(cdr s)
(cddr s))])
(if (pair? p)
(flatten-sub-path (car p) (append (cdr p) (cddr s)))
(flatten-sub-path p (cddr s))))
(flatten-sub-path "." (cddr s)))])
(flatten-sub-path (car p) (append (cdr p) r))
(flatten-sub-path p r)))
(flatten-sub-path "."
(if (equal? (cadr s) "..")
(cdr s)
(cddr s))))])
;; flattening may erase the submodule path:
(if (pair? p)
(cdr p)