]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fbyte_code): If arg BYTESTR is multibyte, convert it
authorKenichi Handa <handa@m17n.org>
Fri, 19 May 2000 23:50:52 +0000 (23:50 +0000)
committerKenichi Handa <handa@m17n.org>
Fri, 19 May 2000 23:50:52 +0000 (23:50 +0000)
to unibyte.

src/bytecode.c

index ff9a36e54b77afe341250ba9c88353c58f2c6132..bfbb3b847e0c3960bffa12cef1a517a364e5bb2e 100644 (file)
@@ -401,12 +401,12 @@ If the third argument is incorrect, Emacs may crash.")
 #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 @@ If the third argument is incorrect, Emacs may crash.")
     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;