From: Kenichi Handa Date: Fri, 19 May 2000 23:50:52 +0000 (+0000) Subject: (Fbyte_code): If arg BYTESTR is multibyte, convert it X-Git-Tag: emacs-pretest-21.0.90~3887 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=089b985ff9f2d34e99b4c62c928c461ffc0bf2a9;p=emacs.git (Fbyte_code): If arg BYTESTR is multibyte, convert it to unibyte. --- diff --git a/src/bytecode.c b/src/bytecode.c index ff9a36e54b7..bfbb3b847e0 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -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;