From 6e21376473f8bd3520b9bc611982bf2149f5fd5c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 29 Oct 2015 16:14:14 -0400 Subject: [PATCH] fix relative-path handling for source locations in bytecode Closes PR 15174 --- pkgs/racket-test-core/tests/racket/stx.rktl | 23 +++++++++++++++++++++ racket/src/racket/src/file.c | 2 +- racket/src/racket/src/marshal.c | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 5cce96d9e6..838992b882 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -2204,6 +2204,29 @@ name)]))) (eval '(m racket/base values))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check marshaling and unmarshaling with relative paths + +(let () + (define dir (find-system-path 'temp-dir)) + + (define x (parameterize ([current-namespace (make-base-namespace)]) + (compile (datum->syntax #f '#'x (vector (build-path dir "sub" "x.rkt") + 1 + 1 + 1 + 1))))) + (define-values (i o) (make-pipe)) + (parameterize ([current-write-relative-directory + (cons (build-path dir "nested") + dir)]) + (write x o)) + (test (build-path dir "inner" 'up "sub" "x.rkt") + syntax-source + (eval (parameterize ([read-accept-compiled #t] + [current-load-relative-directory (build-path dir "inner")]) + (read i))))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/file.c b/racket/src/racket/src/file.c index b892d78529..1d0c40f16d 100644 --- a/racket/src/racket/src/file.c +++ b/racket/src/racket/src/file.c @@ -5693,7 +5693,7 @@ Scheme_Object *scheme_extract_relative_to(Scheme_Object *obj, Scheme_Object *dir while (!SCHEME_NULLP(be)) { if (cache) { - obj = scheme_make_pair(up_symbol, scheme_null); + obj = scheme_make_pair(up_symbol, obj); } else { a[0] = up_symbol; a[1] = obj; diff --git a/racket/src/racket/src/marshal.c b/racket/src/racket/src/marshal.c index a7ae4cddcb..b64b84866d 100644 --- a/racket/src/racket/src/marshal.c +++ b/racket/src/racket/src/marshal.c @@ -747,7 +747,7 @@ static Scheme_Object *read_quote_syntax(Scheme_Object *obj) static int not_relative_path(Scheme_Object *p, Scheme_Hash_Table *cache) { Scheme_Object *dir, *rel_p; - + dir = scheme_get_param(scheme_current_config(), MZCONFIG_WRITE_DIRECTORY); if (SCHEME_TRUEP(dir)) {