diff options
| author | Dmitry Antipov | 2014-07-10 08:35:55 +0400 |
|---|---|---|
| committer | Dmitry Antipov | 2014-07-10 08:35:55 +0400 |
| commit | 80fb41cd90467782f4cfb21074aaa4f95308985e (patch) | |
| tree | 00ffd4871657cc09edb7d61e6de233d753c1b7d5 /src/coding.h | |
| parent | 09880d8533e588da3388263f8c2360eb28ccc878 (diff) | |
| download | emacs-80fb41cd90467782f4cfb21074aaa4f95308985e.tar.gz emacs-80fb41cd90467782f4cfb21074aaa4f95308985e.zip | |
* 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.
Diffstat (limited to 'src/coding.h')
| -rw-r--r-- | src/coding.h | 61 |
1 files changed, 28 insertions, 33 deletions
diff --git a/src/coding.h b/src/coding.h index f3efcca031d..ffd839f4212 100644 --- a/src/coding.h +++ b/src/coding.h | |||
| @@ -434,11 +434,37 @@ struct coding_system | |||
| 434 | 434 | ||
| 435 | /* Flag bits of the coding system. The meaning of each bit is common | 435 | /* Flag bits of the coding system. The meaning of each bit is common |
| 436 | to all types of coding systems. */ | 436 | to all types of coding systems. */ |
| 437 | int common_flags; | 437 | unsigned common_flags : 14; |
| 438 | 438 | ||
| 439 | /* Mode bits of the coding system. See the comments of the macros | 439 | /* Mode bits of the coding system. See the comments of the macros |
| 440 | CODING_MODE_XXX. */ | 440 | CODING_MODE_XXX. */ |
| 441 | unsigned int mode; | 441 | unsigned mode : 5; |
| 442 | |||
| 443 | /* The following two members specify how binary 8-bit code 128..255 | ||
| 444 | are represented in source and destination text respectively. True | ||
| 445 | means they are represented by 2-byte sequence, false means they are | ||
| 446 | represented by 1-byte as is (see the comment in character.h). */ | ||
| 447 | bool_bf src_multibyte : 1; | ||
| 448 | bool_bf dst_multibyte : 1; | ||
| 449 | |||
| 450 | /* True if the source of conversion is not in the member | ||
| 451 | `charbuf', but at `src_object'. */ | ||
| 452 | bool_bf chars_at_source : 1; | ||
| 453 | |||
| 454 | /* Nonzero if the result of conversion is in `destination' | ||
| 455 | buffer rather than in `dst_object'. */ | ||
| 456 | bool_bf raw_destination : 1; | ||
| 457 | |||
| 458 | /* Set to true if charbuf contains an annotation. */ | ||
| 459 | bool_bf annotated : 1; | ||
| 460 | |||
| 461 | /* Used internally in coding.c. See the comment of detect_ascii. */ | ||
| 462 | unsigned eol_seen : 3; | ||
| 463 | |||
| 464 | /* Finish status of code conversion. */ | ||
| 465 | ENUM_BF (coding_result_code) result : 3; | ||
| 466 | |||
| 467 | int max_charset_id; | ||
| 442 | 468 | ||
| 443 | /* Detailed information specific to each type of coding system. */ | 469 | /* Detailed information specific to each type of coding system. */ |
| 444 | union | 470 | union |
| @@ -451,16 +477,8 @@ struct coding_system | |||
| 451 | struct undecided_spec undecided; | 477 | struct undecided_spec undecided; |
| 452 | } spec; | 478 | } spec; |
| 453 | 479 | ||
| 454 | int max_charset_id; | ||
| 455 | unsigned char *safe_charsets; | 480 | unsigned char *safe_charsets; |
| 456 | 481 | ||
| 457 | /* The following two members specify how binary 8-bit code 128..255 | ||
| 458 | are represented in source and destination text respectively. True | ||
| 459 | means they are represented by 2-byte sequence, false means they are | ||
| 460 | represented by 1-byte as is (see the comment in character.h). */ | ||
| 461 | bool_bf src_multibyte : 1; | ||
| 462 | bool_bf dst_multibyte : 1; | ||
| 463 | |||
| 464 | /* How may heading bytes we can skip for decoding. This is set to | 482 | /* How may heading bytes we can skip for decoding. This is set to |
| 465 | -1 in setup_coding_system, and updated by detect_coding. So, | 483 | -1 in setup_coding_system, and updated by detect_coding. So, |
| 466 | when this is equal to the byte length of the text being | 484 | when this is equal to the byte length of the text being |
| @@ -472,21 +490,9 @@ struct coding_system | |||
| 472 | sequence. Set by detect_coding_utf_8. */ | 490 | sequence. Set by detect_coding_utf_8. */ |
| 473 | ptrdiff_t detected_utf8_bytes, detected_utf8_chars; | 491 | ptrdiff_t detected_utf8_bytes, detected_utf8_chars; |
| 474 | 492 | ||
| 475 | /* Used internally in coding.c. See the comment of detect_ascii. */ | ||
| 476 | int eol_seen; | ||
| 477 | |||
| 478 | /* The following members are set by encoding/decoding routine. */ | 493 | /* The following members are set by encoding/decoding routine. */ |
| 479 | ptrdiff_t produced, produced_char, consumed, consumed_char; | 494 | ptrdiff_t produced, produced_char, consumed, consumed_char; |
| 480 | 495 | ||
| 481 | /* Number of error source data found in a decoding routine. */ | ||
| 482 | ptrdiff_t errors; | ||
| 483 | |||
| 484 | /* Store the positions of error source data. */ | ||
| 485 | ptrdiff_t *error_positions; | ||
| 486 | |||
| 487 | /* Finish status of code conversion. */ | ||
| 488 | enum coding_result_code result; | ||
| 489 | |||
| 490 | ptrdiff_t src_pos, src_pos_byte, src_chars, src_bytes; | 496 | ptrdiff_t src_pos, src_pos_byte, src_chars, src_bytes; |
| 491 | Lisp_Object src_object; | 497 | Lisp_Object src_object; |
| 492 | const unsigned char *source; | 498 | const unsigned char *source; |
| @@ -510,17 +516,6 @@ struct coding_system | |||
| 510 | int *charbuf; | 516 | int *charbuf; |
| 511 | int charbuf_size, charbuf_used; | 517 | int charbuf_size, charbuf_used; |
| 512 | 518 | ||
| 513 | /* True if the source of conversion is not in the member | ||
| 514 | `charbuf', but at `src_object'. */ | ||
| 515 | bool_bf chars_at_source : 1; | ||
| 516 | |||
| 517 | /* Nonzero if the result of conversion is in `destination' | ||
| 518 | buffer rather than in `dst_object'. */ | ||
| 519 | bool_bf raw_destination : 1; | ||
| 520 | |||
| 521 | /* Set to true if charbuf contains an annotation. */ | ||
| 522 | bool_bf annotated : 1; | ||
| 523 | |||
| 524 | unsigned char carryover[64]; | 519 | unsigned char carryover[64]; |
| 525 | int carryover_bytes; | 520 | int carryover_bytes; |
| 526 | 521 | ||