From d081586959eaeee1ebc8fb8b345b574e2dad10b4 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 14 Jul 2017 07:37:55 -0600 Subject: [PATCH] fix immutability of some `syntax-e` results Internally, when scopes are propagated to nested syntax objects, vectors and boxes were not reconstructed as immutable. Closes #1745 --- pkgs/racket-test-core/tests/racket/stx.rktl | 6 ++++++ racket/src/racket/src/syntax.c | 3 +++ 2 files changed, 9 insertions(+) diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 012284b855..9d461a82b5 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -228,6 +228,12 @@ (define-define-stx stx-with-property) (test 'y syntax-property stx-with-property 'x) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check immutability + +(test #t immutable? (syntax-e #'#(1 2))) +(test #t immutable? (syntax-e #'#&1)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Plain s, se derived from part of s diff --git a/racket/src/racket/src/syntax.c b/racket/src/racket/src/syntax.c index babc06a5fc..73ab62edbe 100644 --- a/racket/src/racket/src/syntax.c +++ b/racket/src/racket/src/syntax.c @@ -2196,6 +2196,7 @@ static Scheme_Object *raw_stx_content(Scheme_Object *o) shifts, add_taint, false_insp); v = scheme_box(result); + SCHEME_SET_BOX_IMMUTABLE(v); } else if (SCHEME_VECTORP(v)) { Scheme_Object *v2; int size = SCHEME_VEC_SIZE(v), i; @@ -2209,6 +2210,8 @@ static Scheme_Object *raw_stx_content(Scheme_Object *o) add_taint, false_insp); SCHEME_VEC_ELS(v2)[i] = result; } + + SCHEME_SET_VECTOR_IMMUTABLE(v2); v = v2; } else if (SCHEME_HASHTRP(v)) {