From 733eab5805b36f419c4d466756399e8d01fa9773 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 28 Feb 2011 15:19:20 -0700 Subject: [PATCH] fix 0-field prefab immutability flag Closes PR 11777 --- collects/tests/racket/read.rktl | 3 +++ src/racket/src/struct.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/collects/tests/racket/read.rktl b/collects/tests/racket/read.rktl index 3ccbb96391..58b83d611f 100644 --- a/collects/tests/racket/read.rktl +++ b/collects/tests/racket/read.rktl @@ -1052,6 +1052,7 @@ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Prefab +(test #t struct? (readstr "#s(v)")) (test #t struct? (readstr "#s(v 1)")) (test #t struct? (readstr "#s((v 1) 1)")) (test #t struct? (readstr "#s((v 1 #()) 1)")) @@ -1078,6 +1079,8 @@ (and (exn:fail:read? x) (not (exn:fail:read:eof? x))))) +(test #t struct? (syntax-e (read-syntax 'string (open-input-string "#s(v)")))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; read-language diff --git a/src/racket/src/struct.c b/src/racket/src/struct.c index 57087a7abc..c1fd60f9b4 100644 --- a/src/racket/src/struct.c +++ b/src/racket/src/struct.c @@ -3929,7 +3929,7 @@ static void struct_type_set_if_immutable(Scheme_Struct_Type *struct_type) { size = struct_type->num_islots; if (struct_type->name_pos) size -= struct_type->parent_types[struct_type->name_pos - 1]->num_islots; - if (struct_type->immutables) { + if (!size || struct_type->immutables) { for (i = 0; i < size; i++) { if (!struct_type->immutables[i]) return;