changeset 28999:4c808e415352

(Fbyte_code): If arg BYTESTR is multibyte, convert it to unibyte.
author Kenichi Handa <handa@m17n.org>
date Fri, 19 May 2000 23:50:52 +0000
parents d8c9e2f7022f
children f5c7d80ed4de
files src/bytecode.c
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/bytecode.c	Fri May 19 23:50:26 2000 +0000
+++ b/src/bytecode.c	Fri May 19 23:50:52 2000 +0000
@@ -401,12 +401,12 @@
 #endif
   int op;
   /* Lisp_Object v1, v2; */
-  Lisp_Object *vectorp = XVECTOR (vector)->contents;
+  Lisp_Object *vectorp;
 #ifdef BYTE_CODE_SAFE
   int const_length = XVECTOR (vector)->size;
   Lisp_Object *stacke;
 #endif
-  int bytestr_length = STRING_BYTES (XSTRING (bytestr));
+  int bytestr_length;
   struct byte_stack stack;
   Lisp_Object *top;
   Lisp_Object result;
@@ -416,6 +416,17 @@
     vector = wrong_type_argument (Qvectorp, vector);
   CHECK_NUMBER (maxdepth, 2);
 
+  if (STRING_MULTIBYTE (bytestr))
+    /* BYTESTR must have been produced by Emacs 20.2 or the earlier
+       because they produced a raw 8-bit string for byte-code and now
+       such a byte-code string is loaded as multibyte while raw 8-bit
+       characters converted to multibyte form.  Thus, now we must
+       convert them back to the original unibyte form.  */
+    bytestr = Fstring_as_unibyte (bytestr);
+
+  bytestr_length = STRING_BYTES (XSTRING (bytestr));
+  vectorp = XVECTOR (vector)->contents;
+
   stack.byte_string = bytestr;
   stack.pc = stack.byte_string_start = XSTRING (bytestr)->data;
   stack.constants = vector;