diff --git a/NEWS b/NEWS index f4ca739e3..9f6e0eda0 100644 --- a/NEWS +++ b/NEWS @@ -26,6 +26,7 @@ available: Guile is now always configured in "maintainer mode". * Bugs fixed +** `symbol->string' now returns a read-only string, as per R5RS ** `guile-config link' now prints `-L$libdir' before `-lguile' ** Fix memory corruption involving GOOPS' `class-redefinition' ** Fix possible deadlock in `mutex-lock' diff --git a/libguile/strings.c b/libguile/strings.c index 4d387fb51..7399d8831 100644 --- a/libguile/strings.c +++ b/libguile/strings.c @@ -491,7 +491,7 @@ scm_i_symbol_substring (SCM sym, size_t start, size_t end) scm_i_pthread_mutex_lock (&stringbuf_write_mutex); SET_STRINGBUF_SHARED (buf); scm_i_pthread_mutex_unlock (&stringbuf_write_mutex); - return scm_double_cell (STRING_TAG, SCM_UNPACK(buf), + return scm_double_cell (RO_STRING_TAG, SCM_UNPACK (buf), (scm_t_bits)start, (scm_t_bits) end - start); } diff --git a/test-suite/tests/symbols.test b/test-suite/tests/symbols.test index b57667f7f..3fe3402f8 100644 --- a/test-suite/tests/symbols.test +++ b/test-suite/tests/symbols.test @@ -1,6 +1,6 @@ ;;;; symbols.test --- test suite for Guile's symbols -*- scheme -*- ;;;; -;;;; Copyright (C) 2001, 2006 Free Software Foundation, Inc. +;;;; Copyright (C) 2001, 2006, 2008 Free Software Foundation, Inc. ;;;; ;;;; This program is free software; you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by @@ -17,17 +17,17 @@ ;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;;;; Boston, MA 02110-1301 USA -(use-modules (ice-9 documentation)) +(define-module (test-suite test-symbols) + #:use-module (test-suite lib) + #:use-module (ice-9 documentation)) ;;; ;;; miscellaneous ;;; -;; FIXME: As soon as guile supports immutable strings, this has to be -;; replaced with the appropriate error type and message. (define exception:immutable-string - (cons 'some-error-type "^trying to modify an immutable string")) + (cons 'misc-error "^string is read-only")) (define (documented? object) (not (not (object-documentation object)))) @@ -55,7 +55,7 @@ (with-test-prefix "symbol->string" - (expect-fail-exception "result is an immutable string" + (pass-if-exception "result is an immutable string" exception:immutable-string (string-set! (symbol->string 'abc) 1 #\space)))