aboutsummaryrefslogtreecommitdiffstats
path: root/src/coding.h
diff options
context:
space:
mode:
authorDmitry Antipov2014-07-10 08:35:55 +0400
committerDmitry Antipov2014-07-10 08:35:55 +0400
commit80fb41cd90467782f4cfb21074aaa4f95308985e (patch)
tree00ffd4871657cc09edb7d61e6de233d753c1b7d5 /src/coding.h
parent09880d8533e588da3388263f8c2360eb28ccc878 (diff)
downloademacs-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.h61
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