1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

Make `symbol->string' return a read-only string.

* libguile/strings.c (scm_i_symbol_substring): Return a read-only string
  since R5RS requires `symbol->string' to return a read-only string.
  Reported by Bill Schottstaedt <bil@ccrma.Stanford.EDU>.

* test-suite/tests/symbols.test: Add `define-module' clause.
  (exception:immutable-string): Adjust to current exception.
  ("symbol->string")["result is an immutable string"]: Use
  `pass-if-exception' instead of `expect-fail-exception'.

* NEWS: Update.
This commit is contained in:
Ludovic Courtès 2008-09-22 22:51:36 +02:00
parent 1dd797921c
commit fd2b17b9cb
3 changed files with 8 additions and 7 deletions

1
NEWS
View file

@ -63,6 +63,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'

View file

@ -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);
}

View file

@ -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)))