From 04e78c4bb7c1e60fcb3a869a7a207230d7662b4d Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 27 Feb 2021 19:16:21 -0700 Subject: [PATCH] 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 --- pkgs/racket-doc/scribblings/reference/filesystem.scrbl | 9 ++++++--- racket/collects/racket/private/path-list.rkt | 2 +- racket/src/bc/src/startup.inc | 6 +++++- racket/src/cs/schemified/expander.scm | 8 +++++++- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/pkgs/racket-doc/scribblings/reference/filesystem.scrbl b/pkgs/racket-doc/scribblings/reference/filesystem.scrbl index 8b34e99f1e..a5d5279f0d 100644 --- a/pkgs/racket-doc/scribblings/reference/filesystem.scrbl +++ b/pkgs/racket-doc/scribblings/reference/filesystem.scrbl @@ -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?] diff --git a/racket/collects/racket/private/path-list.rkt b/racket/collects/racket/private/path-list.rkt index 8ba2b2cf57..2283d702fb 100644 --- a/racket/collects/racket/private/path-list.rkt +++ b/racket/collects/racket/private/path-list.rkt @@ -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) diff --git a/racket/src/bc/src/startup.inc b/racket/src/bc/src/startup.inc index 0d583363e6..09fd856183 100644 --- a/racket/src/bc/src/startup.inc +++ b/racket/src/bc/src/startup.inc @@ -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!)" diff --git a/racket/src/cs/schemified/expander.scm b/racket/src/cs/schemified/expander.scm index bbff6b0d2b..bc2791b252 100644 --- a/racket/src/cs/schemified/expander.scm +++ b/racket/src/cs/schemified/expander.scm @@ -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