]> git.eshelyaron.com Git - emacs.git/commitdiff
(Faset): Allow setting a multibyte character in an
authorKenichi Handa <handa@m17n.org>
Thu, 17 Apr 2008 01:11:11 +0000 (01:11 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 17 Apr 2008 01:11:11 +0000 (01:11 +0000)
ASCII-only unibyte string.

src/ChangeLog
src/data.c

index dd0d8cd266f0afd84477ad3af4437f9d1ad9df60..527ff3c689d6407e1914ffbe78d95eb0d252ba33 100644 (file)
@@ -1,3 +1,10 @@
+2008-04-17  Kenichi Handa  <handa@m17n.org>
+
+       * data.c (Faset): Allow setting a multibyte character in an
+       ASCII-only unibyte string.
+
+       * lisp.h (STRING_SET_MULTIBYTE): New macro.
+
 2008-04-16  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * Makefile.in: Don't use HAVE_GTK and don't -DUSE_GTK since it's now
index 6b1a9fc886029673ce91ca8fe39081b0903eb395..cb9d210c62899f66d4296680957bc11e1b6e9b87 100644 (file)
@@ -2093,7 +2093,17 @@ bool-vector.  IDX starts at 0.  */)
       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));
     }