Mercurial > emacs
diff src/data.c @ 94122:c7f0faccd3c2
(Faset): Allow setting a multibyte character in an
ASCII-only unibyte string.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Thu, 17 Apr 2008 01:10:58 +0000 |
| parents | 889781860700 |
| children | 8971ddf55736 |
line wrap: on
line diff
--- a/src/data.c Thu Apr 17 01:09:57 2008 +0000 +++ b/src/data.c Thu Apr 17 01:10:58 2008 +0000 @@ -2093,7 +2093,17 @@ CHECK_NUMBER (newelt); if (XINT (newelt) >= 0 && ! SINGLE_BYTE_CHAR_P (XINT (newelt))) - args_out_of_range (array, newelt); + { + int i; + + for (i = SBYTES (array) - 1; i >= 0; i--) + if (SREF (array, i) >= 0x80) + args_out_of_range (array, newelt); + /* ARRAY is an ASCII string. Convert it to a multibyte + string, and try `aset' again. */ + STRING_SET_MULTIBYTE (array); + return Faset (array, idx, newelt); + } SSET (array, idxval, XINT (newelt)); }
