repair handling of PLTCOMPILEDROOTS

Commit a110c58e52 broke the interaction with `PLTCOMPILEDROOTS`.
Instead of reverting to the old behavior that coerced 'same to a path,
this change makes `path-list-string->path-list` a little more
flexible.

Closes #3704
This commit is contained in:
Matthew Flatt 2021-02-27 19:16:21 -07:00
parent 2b79ba6d4f
commit 04e78c4bb7
4 changed files with 19 additions and 6 deletions

View File

@ -252,8 +252,8 @@ by @racket[kind], which must be one of the following:
with similar adjustments for Mac OS.}]}
@defproc[(path-list-string->path-list [str (or/c string? bytes?)]
[default-path-list (listof path?)])
(listof path?)]{
[default-path-list (listof (or/c path? 'same))])
(listof (or/c path? 'same))]{
Parses a string or byte string containing a list of paths, and returns
a list of path strings. On @|AllUnix|, paths in a path list are
@ -262,7 +262,10 @@ separated by a @litchar{:}; on Windows, paths are separated by a
list contains an empty path, the list
@racket[default-path-list] is spliced into the returned list of
paths. Parts of @racket[str] that do not form a valid path are not
included in the returned list.}
included in the returned list.
@history[#:changed "8.0.0.10" @elem{Changed to allow @racket['same] in
@racket[default-path-list].}]}
@defproc[(find-executable-path [program path-string?]

View File

@ -27,7 +27,7 @@
(string? s))
(raise-argument-error 'path-list-string->path-list "(or/c bytes? string?)" s))
(unless (and (list? default)
(andmap path? default))
(andmap (lambda (p) (or (eq? p 'same) path?)) default))
(raise-argument-error 'path-list-string->path-list "(listof path?)" default))
(init-rx:path-list!)
(let loop ([s (if (string? s)

View File

@ -556,7 +556,11 @@ static const char *startup_source =
"(if(let-values(((or-part_0)(bytes? s_0)))(if or-part_0 or-part_0(string? s_0)))"
"(void)"
" (let-values () (raise-argument-error 'path-list-string->path-list \"(or/c bytes? string?)\" s_0)))"
"(if(if(list? default_0)(andmap path? default_0) #f)"
"(if(if(list? default_0)"
"(andmap"
"(lambda(p_0)(let-values(((or-part_0)(eq? p_0 'same)))(if or-part_0 or-part_0 path?)))"
" default_0)"
" #f)"
"(void)"
" (let-values () (raise-argument-error 'path-list-string->path-list \"(listof path?)\" default_0)))"
"(init-rx:path-list!)"

View File

@ -1093,7 +1093,13 @@
'path-list-string->path-list
"(or/c bytes? string?)"
s_0))
(if (if (list? default_0) (andmap path? default_0) #f)
(if (if (list? default_0)
(andmap
(lambda (p_0)
(let ((or-part_0 (eq? p_0 'same)))
(if or-part_0 or-part_0 path?)))
default_0)
#f)
(void)
(raise-argument-error
'path-list-string->path-list