Mercurial > emacs
comparison src/coding.c @ 91838:7bed61cbed0c
(decode_coding_object, encode_coding_object): Preserve
Vdeactivate_mark. Delete unnecessary call of Fcurrnet_buffer.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Thu, 14 Feb 2008 12:24:15 +0000 |
| parents | 507bcfb4342c |
| children | 52c3ba60b54b |
comparison
equal
deleted
inserted
replaced
| 91837:3ef9dcc38460 | 91838:7bed61cbed0c |
|---|---|
| 6850 unsigned char *destination; | 6850 unsigned char *destination; |
| 6851 EMACS_INT dst_bytes; | 6851 EMACS_INT dst_bytes; |
| 6852 EMACS_INT chars = to - from; | 6852 EMACS_INT chars = to - from; |
| 6853 EMACS_INT bytes = to_byte - from_byte; | 6853 EMACS_INT bytes = to_byte - from_byte; |
| 6854 Lisp_Object attrs; | 6854 Lisp_Object attrs; |
| 6855 Lisp_Object buffer; | |
| 6856 int saved_pt = -1, saved_pt_byte; | 6855 int saved_pt = -1, saved_pt_byte; |
| 6857 int need_marker_adjustment = 0; | 6856 int need_marker_adjustment = 0; |
| 6858 | 6857 Lisp_Object old_deactivate_mark; |
| 6859 buffer = Fcurrent_buffer (); | 6858 |
| 6859 old_deactivate_mark = Vdeactivate_mark; | |
| 6860 | 6860 |
| 6861 if (NILP (dst_object)) | 6861 if (NILP (dst_object)) |
| 6862 { | 6862 { |
| 6863 destination = coding->destination; | 6863 destination = coding->destination; |
| 6864 dst_bytes = coding->dst_bytes; | 6864 dst_bytes = coding->dst_bytes; |
| 6936 if (BUFFERP (coding->dst_object)) | 6936 if (BUFFERP (coding->dst_object)) |
| 6937 set_buffer_internal (XBUFFER (coding->dst_object)); | 6937 set_buffer_internal (XBUFFER (coding->dst_object)); |
| 6938 | 6938 |
| 6939 if (! NILP (CODING_ATTR_POST_READ (attrs))) | 6939 if (! NILP (CODING_ATTR_POST_READ (attrs))) |
| 6940 { | 6940 { |
| 6941 struct gcpro gcpro1, gcpro2; | 6941 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
| 6942 EMACS_INT prev_Z = Z, prev_Z_BYTE = Z_BYTE; | 6942 EMACS_INT prev_Z = Z, prev_Z_BYTE = Z_BYTE; |
| 6943 Lisp_Object val; | 6943 Lisp_Object val; |
| 6944 | 6944 |
| 6945 TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); | 6945 TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte); |
| 6946 GCPRO2 (coding->src_object, coding->dst_object); | 6946 GCPRO5 (coding->src_object, coding->dst_object, src_object, dst_object, |
| 6947 old_deactivate_mark); | |
| 6947 val = safe_call1 (CODING_ATTR_POST_READ (attrs), | 6948 val = safe_call1 (CODING_ATTR_POST_READ (attrs), |
| 6948 make_number (coding->produced_char)); | 6949 make_number (coding->produced_char)); |
| 6949 UNGCPRO; | 6950 UNGCPRO; |
| 6950 CHECK_NATNUM (val); | 6951 CHECK_NATNUM (val); |
| 6951 coding->produced_char += Z - prev_Z; | 6952 coding->produced_char += Z - prev_Z; |
| 6959 else if (NILP (dst_object) && BUFFERP (coding->dst_object)) | 6960 else if (NILP (dst_object) && BUFFERP (coding->dst_object)) |
| 6960 { | 6961 { |
| 6961 set_buffer_internal (XBUFFER (coding->dst_object)); | 6962 set_buffer_internal (XBUFFER (coding->dst_object)); |
| 6962 if (dst_bytes < coding->produced) | 6963 if (dst_bytes < coding->produced) |
| 6963 { | 6964 { |
| 6964 destination | 6965 destination = xrealloc (destination, coding->produced); |
| 6965 = (unsigned char *) xrealloc (destination, coding->produced); | |
| 6966 if (! destination) | 6966 if (! destination) |
| 6967 { | 6967 { |
| 6968 record_conversion_result (coding, | 6968 record_conversion_result (coding, |
| 6969 CODING_RESULT_INSUFFICIENT_DST); | 6969 CODING_RESULT_INSUFFICIENT_DST); |
| 6970 unbind_to (count, Qnil); | 6970 unbind_to (count, Qnil); |
| 7017 } | 7017 } |
| 7018 } | 7018 } |
| 7019 } | 7019 } |
| 7020 } | 7020 } |
| 7021 | 7021 |
| 7022 Vdeactivate_mark = old_deactivate_mark; | |
| 7022 unbind_to (count, coding->dst_object); | 7023 unbind_to (count, coding->dst_object); |
| 7023 } | 7024 } |
| 7024 | 7025 |
| 7025 | 7026 |
| 7026 void | 7027 void |
| 7033 { | 7034 { |
| 7034 int count = specpdl_ptr - specpdl; | 7035 int count = specpdl_ptr - specpdl; |
| 7035 EMACS_INT chars = to - from; | 7036 EMACS_INT chars = to - from; |
| 7036 EMACS_INT bytes = to_byte - from_byte; | 7037 EMACS_INT bytes = to_byte - from_byte; |
| 7037 Lisp_Object attrs; | 7038 Lisp_Object attrs; |
| 7038 Lisp_Object buffer; | |
| 7039 int saved_pt = -1, saved_pt_byte; | 7039 int saved_pt = -1, saved_pt_byte; |
| 7040 int need_marker_adjustment = 0; | 7040 int need_marker_adjustment = 0; |
| 7041 int kill_src_buffer = 0; | 7041 int kill_src_buffer = 0; |
| 7042 | 7042 Lisp_Object old_deactivate_mark; |
| 7043 buffer = Fcurrent_buffer (); | 7043 |
| 7044 old_deactivate_mark = Vdeactivate_mark; | |
| 7044 | 7045 |
| 7045 coding->src_object = src_object; | 7046 coding->src_object = src_object; |
| 7046 coding->src_chars = chars; | 7047 coding->src_chars = chars; |
| 7047 coding->src_bytes = bytes; | 7048 coding->src_bytes = bytes; |
| 7048 coding->src_multibyte = chars < bytes; | 7049 coding->src_multibyte = chars < bytes; |
| 7080 set_buffer_internal (XBUFFER (coding->src_object)); | 7081 set_buffer_internal (XBUFFER (coding->src_object)); |
| 7081 } | 7082 } |
| 7082 | 7083 |
| 7083 { | 7084 { |
| 7084 Lisp_Object args[3]; | 7085 Lisp_Object args[3]; |
| 7085 | 7086 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
| 7087 | |
| 7088 GCPRO5 (coding->src_object, coding->dst_object, src_object, dst_object, | |
| 7089 old_deactivate_mark); | |
| 7086 args[0] = CODING_ATTR_PRE_WRITE (attrs); | 7090 args[0] = CODING_ATTR_PRE_WRITE (attrs); |
| 7087 args[1] = make_number (BEG); | 7091 args[1] = make_number (BEG); |
| 7088 args[2] = make_number (Z); | 7092 args[2] = make_number (Z); |
| 7089 safe_call (3, args); | 7093 safe_call (3, args); |
| 7094 UNGCPRO; | |
| 7090 } | 7095 } |
| 7091 if (XBUFFER (coding->src_object) != current_buffer) | 7096 if (XBUFFER (coding->src_object) != current_buffer) |
| 7092 kill_src_buffer = 1; | 7097 kill_src_buffer = 1; |
| 7093 coding->src_object = Fcurrent_buffer (); | 7098 coding->src_object = Fcurrent_buffer (); |
| 7094 if (BEG != GPT) | 7099 if (BEG != GPT) |
| 7215 } | 7220 } |
| 7216 } | 7221 } |
| 7217 | 7222 |
| 7218 if (kill_src_buffer) | 7223 if (kill_src_buffer) |
| 7219 Fkill_buffer (coding->src_object); | 7224 Fkill_buffer (coding->src_object); |
| 7225 | |
| 7226 Vdeactivate_mark = old_deactivate_mark; | |
| 7220 unbind_to (count, Qnil); | 7227 unbind_to (count, Qnil); |
| 7221 } | 7228 } |
| 7222 | 7229 |
| 7223 | 7230 |
| 7224 Lisp_Object | 7231 Lisp_Object |
