From c1f62ae959c462dd717d92fbb1c34ba504b3f691 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 15 Sep 2020 15:17:57 -0600 Subject: [PATCH] Chez Scheme: fix intern of some symbols on startup Closes #3399 --- pkgs/racket-test-core/tests/racket/basic.rktl | 1 + racket/src/ChezScheme/c/intern.c | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/basic.rktl b/pkgs/racket-test-core/tests/racket/basic.rktl index d8dea469f8..b72371e41b 100644 --- a/pkgs/racket-test-core/tests/racket/basic.rktl +++ b/pkgs/racket-test-core/tests/racket/basic.rktl @@ -475,6 +475,7 @@ (test #f eq? (symbol->string 'apple) (symbol->string 'apple)) (test "apple" symbol->immutable-string 'apple) (test #t immutable? (symbol->immutable-string 'apple)) +(test #t immutable? (symbol->immutable-string 'box)) #ci(test #t eq? 'mISSISSIppi 'mississippi) #ci(test #f 'string->symbol (eq? 'bitBlt (string->symbol "bitBlt"))) diff --git a/racket/src/ChezScheme/c/intern.c b/racket/src/ChezScheme/c/intern.c index 3b83cbeef7..49ffde7134 100644 --- a/racket/src/ChezScheme/c/intern.c +++ b/racket/src/ChezScheme/c/intern.c @@ -153,7 +153,7 @@ ptr S_intern(const unsigned char *s) { iptr n = strlen((const char *)s); iptr hc = hash(s, n); iptr idx = OBINDEX(hc, S_G.oblist_length); - ptr sym; + ptr sym, str; bucket *b; tc_mutex_acquire(); @@ -177,7 +177,10 @@ ptr S_intern(const unsigned char *s) { b = b->next; } - sym = S_symbol(S_string((const char *)s, n)); + str = S_string((const char *)s, n); + STRTYPE(str) |= string_immutable_flag; + + sym = S_symbol(str); INITSYMHASH(sym) = FIX(hc); oblist_insert(sym, idx, 0);