comparison src/coding.c @ 103035:6e443d717c7b

(decode_coding_utf_16): Reduce charbuf_end for the worst case. (decode_coding_emacs_mule, decode_coding_iso_2022) (decode_coding_sjis, decode_coding_big5, decode_coding_charset): Likewise.
author Kenichi Handa <handa@m17n.org>
date Tue, 21 Apr 2009 06:36:03 +0000
parents 41e7ab490f69
children e68707cf48a5
comparison
equal deleted inserted replaced
103034:c77b801c1161 103035:6e443d717c7b
1701 { 1701 {
1702 const unsigned char *src = coding->source + coding->consumed; 1702 const unsigned char *src = coding->source + coding->consumed;
1703 const unsigned char *src_end = coding->source + coding->src_bytes; 1703 const unsigned char *src_end = coding->source + coding->src_bytes;
1704 const unsigned char *src_base; 1704 const unsigned char *src_base;
1705 int *charbuf = coding->charbuf + coding->charbuf_used; 1705 int *charbuf = coding->charbuf + coding->charbuf_used;
1706 int *charbuf_end = coding->charbuf + coding->charbuf_size; 1706 /* We may produces at most 3 chars in one loop. */
1707 int *charbuf_end = coding->charbuf + coding->charbuf_size - 2;
1707 int consumed_chars = 0, consumed_chars_base = 0; 1708 int consumed_chars = 0, consumed_chars_base = 0;
1708 int multibytep = coding->src_multibyte; 1709 int multibytep = coding->src_multibyte;
1709 enum utf_bom_type bom = CODING_UTF_16_BOM (coding); 1710 enum utf_bom_type bom = CODING_UTF_16_BOM (coding);
1710 enum utf_16_endian_type endian = CODING_UTF_16_ENDIAN (coding); 1711 enum utf_16_endian_type endian = CODING_UTF_16_ENDIAN (coding);
1711 int surrogate = CODING_UTF_16_SURROGATE (coding); 1712 int surrogate = CODING_UTF_16_SURROGATE (coding);
1747 int c, c1, c2; 1748 int c, c1, c2;
1748 1749
1749 src_base = src; 1750 src_base = src;
1750 consumed_chars_base = consumed_chars; 1751 consumed_chars_base = consumed_chars;
1751 1752
1752 if (charbuf + 2 >= charbuf_end) 1753 if (charbuf >= charbuf_end)
1753 { 1754 {
1754 if (byte_after_cr1 >= 0) 1755 if (byte_after_cr1 >= 0)
1755 src_base -= 2; 1756 src_base -= 2;
1756 break; 1757 break;
1757 } 1758 }
2440 { 2441 {
2441 const unsigned char *src = coding->source + coding->consumed; 2442 const unsigned char *src = coding->source + coding->consumed;
2442 const unsigned char *src_end = coding->source + coding->src_bytes; 2443 const unsigned char *src_end = coding->source + coding->src_bytes;
2443 const unsigned char *src_base; 2444 const unsigned char *src_base;
2444 int *charbuf = coding->charbuf + coding->charbuf_used; 2445 int *charbuf = coding->charbuf + coding->charbuf_used;
2446 /* We may produce two annocations (charset and composition) in one
2447 loop and one more charset annocation at the end. */
2445 int *charbuf_end 2448 int *charbuf_end
2446 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; 2449 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3);
2447 int consumed_chars = 0, consumed_chars_base; 2450 int consumed_chars = 0, consumed_chars_base;
2448 int multibytep = coding->src_multibyte; 2451 int multibytep = coding->src_multibyte;
2449 Lisp_Object attrs, charset_list; 2452 Lisp_Object attrs, charset_list;
2450 int char_offset = coding->produced_char; 2453 int char_offset = coding->produced_char;
2451 int last_offset = char_offset; 2454 int last_offset = char_offset;
3556 { 3559 {
3557 const unsigned char *src = coding->source + coding->consumed; 3560 const unsigned char *src = coding->source + coding->consumed;
3558 const unsigned char *src_end = coding->source + coding->src_bytes; 3561 const unsigned char *src_end = coding->source + coding->src_bytes;
3559 const unsigned char *src_base; 3562 const unsigned char *src_base;
3560 int *charbuf = coding->charbuf + coding->charbuf_used; 3563 int *charbuf = coding->charbuf + coding->charbuf_used;
3564 /* We may produce two annocations (charset and composition) in one
3565 loop and one more charset annocation at the end. */
3561 int *charbuf_end 3566 int *charbuf_end
3562 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; 3567 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3);
3563 int consumed_chars = 0, consumed_chars_base; 3568 int consumed_chars = 0, consumed_chars_base;
3564 int multibytep = coding->src_multibyte; 3569 int multibytep = coding->src_multibyte;
3565 /* Charsets invoked to graphic plane 0 and 1 respectively. */ 3570 /* Charsets invoked to graphic plane 0 and 1 respectively. */
3566 int charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0); 3571 int charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
3567 int charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1); 3572 int charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1);
4756 { 4761 {
4757 const unsigned char *src = coding->source + coding->consumed; 4762 const unsigned char *src = coding->source + coding->consumed;
4758 const unsigned char *src_end = coding->source + coding->src_bytes; 4763 const unsigned char *src_end = coding->source + coding->src_bytes;
4759 const unsigned char *src_base; 4764 const unsigned char *src_base;
4760 int *charbuf = coding->charbuf + coding->charbuf_used; 4765 int *charbuf = coding->charbuf + coding->charbuf_used;
4766 /* We may produce one charset annocation in one loop and one more at
4767 the end. */
4761 int *charbuf_end 4768 int *charbuf_end
4762 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; 4769 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2);
4763 int consumed_chars = 0, consumed_chars_base; 4770 int consumed_chars = 0, consumed_chars_base;
4764 int multibytep = coding->src_multibyte; 4771 int multibytep = coding->src_multibyte;
4765 struct charset *charset_roman, *charset_kanji, *charset_kana; 4772 struct charset *charset_roman, *charset_kanji, *charset_kana;
4766 struct charset *charset_kanji2; 4773 struct charset *charset_kanji2;
4767 Lisp_Object attrs, charset_list, val; 4774 Lisp_Object attrs, charset_list, val;
4873 { 4880 {
4874 const unsigned char *src = coding->source + coding->consumed; 4881 const unsigned char *src = coding->source + coding->consumed;
4875 const unsigned char *src_end = coding->source + coding->src_bytes; 4882 const unsigned char *src_end = coding->source + coding->src_bytes;
4876 const unsigned char *src_base; 4883 const unsigned char *src_base;
4877 int *charbuf = coding->charbuf + coding->charbuf_used; 4884 int *charbuf = coding->charbuf + coding->charbuf_used;
4885 /* We may produce one charset annocation in one loop and one more at
4886 the end. */
4878 int *charbuf_end 4887 int *charbuf_end
4879 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; 4888 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2);
4880 int consumed_chars = 0, consumed_chars_base; 4889 int consumed_chars = 0, consumed_chars_base;
4881 int multibytep = coding->src_multibyte; 4890 int multibytep = coding->src_multibyte;
4882 struct charset *charset_roman, *charset_big5; 4891 struct charset *charset_roman, *charset_big5;
4883 Lisp_Object attrs, charset_list, val; 4892 Lisp_Object attrs, charset_list, val;
4884 int char_offset = coding->produced_char; 4893 int char_offset = coding->produced_char;
5547 { 5556 {
5548 const unsigned char *src = coding->source + coding->consumed; 5557 const unsigned char *src = coding->source + coding->consumed;
5549 const unsigned char *src_end = coding->source + coding->src_bytes; 5558 const unsigned char *src_end = coding->source + coding->src_bytes;
5550 const unsigned char *src_base; 5559 const unsigned char *src_base;
5551 int *charbuf = coding->charbuf + coding->charbuf_used; 5560 int *charbuf = coding->charbuf + coding->charbuf_used;
5561 /* We may produce one charset annocation in one loop and one more at
5562 the end. */
5552 int *charbuf_end 5563 int *charbuf_end
5553 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; 5564 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2);
5554 int consumed_chars = 0, consumed_chars_base; 5565 int consumed_chars = 0, consumed_chars_base;
5555 int multibytep = coding->src_multibyte; 5566 int multibytep = coding->src_multibyte;
5556 Lisp_Object attrs, charset_list, valids; 5567 Lisp_Object attrs, charset_list, valids;
5557 int char_offset = coding->produced_char; 5568 int char_offset = coding->produced_char;
5558 int last_offset = char_offset; 5569 int last_offset = char_offset;