diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2014-07-10 08:35:55 +0400 |
---|---|---|
committer | Dmitry Antipov <dmantipov@yandex.ru> | 2014-07-10 08:35:55 +0400 |
commit | 80fb41cd90467782f4cfb21074aaa4f95308985e (patch) | |
tree | 00ffd4871657cc09edb7d61e6de233d753c1b7d5 | |
parent | 09880d8533e588da3388263f8c2360eb28ccc878 (diff) |
* coding.h (struct coding_system): Remove 'error_positions' (unused)
and 'errors' (set but unused) fields. Use bitfields for 'eol_seen',
'mode', 'common_flags' and 'result' fields, adjust layout to avoid
extra padding and shrink struct coding_system by 56 bytes (x86_64).
* coding.c (decode_coding_utf_8, decode_coding_utf_16)
(decode_coding_emacs_mule, decode_coding_iso_2022, decode_coding_sjis)
(decode_coding_big5, decode_coding_charset, decode_coding)
(encode_coding): Adjust users.
-rw-r--r-- | src/ChangeLog | 11 | ||||
-rw-r--r-- | src/coding.c | 10 | ||||
-rw-r--r-- | src/coding.h | 61 |
3 files changed, 39 insertions, 43 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index bcd004d967..541697c556 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2014-07-10 Dmitry Antipov <dmantipov@yandex.ru> + + * coding.h (struct coding_system): Remove 'error_positions' (unused) + and 'errors' (set but unused) fields. Use bitfields for 'eol_seen', + 'mode', 'common_flags' and 'result' fields, adjust layout to avoid + extra padding and shrink struct coding_system by 56 bytes (x86_64). + * coding.c (decode_coding_utf_8, decode_coding_utf_16) + (decode_coding_emacs_mule, decode_coding_iso_2022, decode_coding_sjis) + (decode_coding_big5, decode_coding_charset, decode_coding) + (encode_coding): Adjust users. + 2014-07-09 Paul Eggert <eggert@cs.ucla.edu> * syntax.c (back_comment): Use more-natural location for label. diff --git a/src/coding.c b/src/coding.c index 5e7a676aec..523a6bf0f2 100644 --- a/src/coding.c +++ b/src/coding.c @@ -1486,7 +1486,6 @@ decode_coding_utf_8 (struct coding_system *coding) consumed_chars = consumed_chars_base; ONE_MORE_BYTE (c); *charbuf++ = ASCII_CHAR_P (c) ? c : BYTE8_TO_CHAR (c); - coding->errors++; } no_more_source: @@ -1685,7 +1684,6 @@ decode_coding_utf_16 (struct coding_system *coding) /* The first two bytes are not BOM. Treat them as bytes for a normal character. */ src = src_base; - coding->errors++; } CODING_UTF_16_BOM (coding) = utf_without_bom; } @@ -1742,7 +1740,6 @@ decode_coding_utf_16 (struct coding_system *coding) c1 = surrogate & 0xFF, c2 = surrogate >> 8; *charbuf++ = c1; *charbuf++ = c2; - coding->errors++; if (UTF_16_HIGH_SURROGATE_P (c)) CODING_UTF_16_SURROGATE (coding) = surrogate = c; else @@ -2598,7 +2595,6 @@ decode_coding_emacs_mule (struct coding_system *coding) ONE_MORE_BYTE (c); *charbuf++ = ASCII_CHAR_P (c) ? c : BYTE8_TO_CHAR (c); char_offset++; - coding->errors++; } no_more_source: @@ -4006,7 +4002,6 @@ decode_coding_iso_2022 (struct coding_system *coding) ONE_MORE_BYTE (c); *charbuf++ = c < 0 ? -c : ASCII_CHAR_P (c) ? c : BYTE8_TO_CHAR (c); char_offset++; - coding->errors++; /* Reset the invocation and designation status to the safest one; i.e. designate ASCII to the graphic register 0, and invoke that register to the graphic plane 0. This typically @@ -4837,7 +4832,6 @@ decode_coding_sjis (struct coding_system *coding) ONE_MORE_BYTE (c); *charbuf++ = c < 0 ? -c : BYTE8_TO_CHAR (c); char_offset++; - coding->errors++; } no_more_source: @@ -4933,7 +4927,6 @@ decode_coding_big5 (struct coding_system *coding) ONE_MORE_BYTE (c); *charbuf++ = c < 0 ? -c : BYTE8_TO_CHAR (c); char_offset++; - coding->errors++; } no_more_source: @@ -5642,7 +5635,6 @@ decode_coding_charset (struct coding_system *coding) ONE_MORE_BYTE (c); *charbuf++ = c < 0 ? -c : ASCII_CHAR_P (c) ? c : BYTE8_TO_CHAR (c); char_offset++; - coding->errors++; } no_more_source: @@ -7375,7 +7367,6 @@ decode_coding (struct coding_system *coding) coding->produced = coding->produced_char = 0; coding->chars_at_source = 0; record_conversion_result (coding, CODING_RESULT_SUCCESS); - coding->errors = 0; ALLOC_CONVERSION_WORK_AREA (coding, coding->src_bytes); @@ -7771,7 +7762,6 @@ encode_coding (struct coding_system *coding) coding->consumed = coding->consumed_char = 0; coding->produced = coding->produced_char = 0; record_conversion_result (coding, CODING_RESULT_SUCCESS); - coding->errors = 0; ALLOC_CONVERSION_WORK_AREA (coding, coding->src_chars); diff --git a/src/coding.h b/src/coding.h index f3efcca031..ffd839f421 100644 --- a/src/coding.h +++ b/src/coding.h @@ -434,11 +434,37 @@ struct coding_system /* Flag bits of the coding system. The meaning of each bit is common to all types of coding systems. */ - int common_flags; + unsigned common_flags : 14; /* Mode bits of the coding system. See the comments of the macros CODING_MODE_XXX. */ - unsigned int mode; + unsigned mode : 5; + + /* The following two members specify how binary 8-bit code 128..255 + are represented in source and destination text respectively. True + means they are represented by 2-byte sequence, false means they are + represented by 1-byte as is (see the comment in character.h). */ + bool_bf src_multibyte : 1; + bool_bf dst_multibyte : 1; + + /* True if the source of conversion is not in the member + `charbuf', but at `src_object'. */ + bool_bf chars_at_source : 1; + + /* Nonzero if the result of conversion is in `destination' + buffer rather than in `dst_object'. */ + bool_bf raw_destination : 1; + + /* Set to true if charbuf contains an annotation. */ + bool_bf annotated : 1; + + /* Used internally in coding.c. See the comment of detect_ascii. */ + unsigned eol_seen : 3; + + /* Finish status of code conversion. */ + ENUM_BF (coding_result_code) result : 3; + + int max_charset_id; /* Detailed information specific to each type of coding system. */ union @@ -451,16 +477,8 @@ struct coding_system struct undecided_spec undecided; } spec; - int max_charset_id; unsigned char *safe_charsets; - /* The following two members specify how binary 8-bit code 128..255 - are represented in source and destination text respectively. True - means they are represented by 2-byte sequence, false means they are - represented by 1-byte as is (see the comment in character.h). */ - bool_bf src_multibyte : 1; - bool_bf dst_multibyte : 1; - /* How may heading bytes we can skip for decoding. This is set to -1 in setup_coding_system, and updated by detect_coding. So, when this is equal to the byte length of the text being @@ -472,21 +490,9 @@ struct coding_system sequence. Set by detect_coding_utf_8. */ ptrdiff_t detected_utf8_bytes, detected_utf8_chars; - /* Used internally in coding.c. See the comment of detect_ascii. */ - int eol_seen; - /* The following members are set by encoding/decoding routine. */ ptrdiff_t produced, produced_char, consumed, consumed_char; - /* Number of error source data found in a decoding routine. */ - ptrdiff_t errors; - - /* Store the positions of error source data. */ - ptrdiff_t *error_positions; - - /* Finish status of code conversion. */ - enum coding_result_code result; - ptrdiff_t src_pos, src_pos_byte, src_chars, src_bytes; Lisp_Object src_object; const unsigned char *source; @@ -510,17 +516,6 @@ struct coding_system int *charbuf; int charbuf_size, charbuf_used; - /* True if the source of conversion is not in the member - `charbuf', but at `src_object'. */ - bool_bf chars_at_source : 1; - - /* Nonzero if the result of conversion is in `destination' - buffer rather than in `dst_object'. */ - bool_bf raw_destination : 1; - - /* Set to true if charbuf contains an annotation. */ - bool_bf annotated : 1; - unsigned char carryover[64]; int carryover_bytes; |