X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/7e2cac200108a4626573c4a8de851560c1fee456..c2982e87d382f0b5c00a65e63716c2b43d342881:/src/coding.c diff --git a/src/coding.c b/src/coding.c index 798e5c533f..38e41e7a99 100644 --- a/src/coding.c +++ b/src/coding.c @@ -159,7 +159,7 @@ detect_coding_XXX (struct coding_system *coding, const unsigned char *src = coding->source; const unsigned char *src_end = coding->source + coding->src_bytes; int multibytep = coding->src_multibyte; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; int found = 0; ...; @@ -266,7 +266,7 @@ encode_coding_XXX (struct coding_system *coding) unsigned char *dst = coding->destination + coding->produced; unsigned char *dst_end = coding->destination + coding->dst_bytes; unsigned char *adjusted_dst_end = dst_end - _MAX_BYTES_PRODUCED_IN_LOOP_; - int produced_chars = 0; + EMACS_INT produced_chars = 0; for (; charbuf < charbuf_end && dst < adjusted_dst_end; charbuf++) { @@ -300,27 +300,30 @@ encode_coding_XXX (struct coding_system *coding) Lisp_Object Vcoding_system_hash_table; -Lisp_Object Qcoding_system, Qcoding_aliases, Qeol_type; +static Lisp_Object Qcoding_system, Qeol_type; +static Lisp_Object Qcoding_aliases; Lisp_Object Qunix, Qdos; Lisp_Object Qbuffer_file_coding_system; -Lisp_Object Qpost_read_conversion, Qpre_write_conversion; -Lisp_Object Qdefault_char; +static Lisp_Object Qpost_read_conversion, Qpre_write_conversion; +static Lisp_Object Qdefault_char; Lisp_Object Qno_conversion, Qundecided; -Lisp_Object Qcharset, Qiso_2022, Qutf_8, Qutf_16, Qshift_jis, Qbig5; -Lisp_Object Qbig, Qlittle; -Lisp_Object Qcoding_system_history; -Lisp_Object Qvalid_codes; -Lisp_Object QCcategory, QCmnemonic, QCdefault_char; -Lisp_Object QCdecode_translation_table, QCencode_translation_table; -Lisp_Object QCpost_read_conversion, QCpre_write_conversion; -Lisp_Object QCascii_compatible_p; +Lisp_Object Qcharset, Qutf_8; +static Lisp_Object Qiso_2022; +static Lisp_Object Qutf_16, Qshift_jis, Qbig5; +static Lisp_Object Qbig, Qlittle; +static Lisp_Object Qcoding_system_history; +static Lisp_Object Qvalid_codes; +static Lisp_Object QCcategory, QCmnemonic, QCdefault_char; +static Lisp_Object QCdecode_translation_table, QCencode_translation_table; +static Lisp_Object QCpost_read_conversion, QCpre_write_conversion; +static Lisp_Object QCascii_compatible_p; Lisp_Object Qcall_process, Qcall_process_region; Lisp_Object Qstart_process, Qopen_network_stream; -Lisp_Object Qtarget_idx; +static Lisp_Object Qtarget_idx; -Lisp_Object Qinsufficient_source, Qinconsistent_eol, Qinvalid_source; -Lisp_Object Qinterrupted, Qinsufficient_memory; +static Lisp_Object Qinsufficient_source, Qinconsistent_eol, Qinvalid_source; +static Lisp_Object Qinterrupted, Qinsufficient_memory; /* If a symbol has this property, evaluate the value to define the symbol as a coding system. */ @@ -351,12 +354,12 @@ struct coding_system safe_terminal_coding; Lisp_Object Qtranslation_table; Lisp_Object Qtranslation_table_id; -Lisp_Object Qtranslation_table_for_decode; -Lisp_Object Qtranslation_table_for_encode; +static Lisp_Object Qtranslation_table_for_decode; +static Lisp_Object Qtranslation_table_for_encode; /* Two special coding systems. */ -Lisp_Object Vsjis_coding_system; -Lisp_Object Vbig5_coding_system; +static Lisp_Object Vsjis_coding_system; +static Lisp_Object Vbig5_coding_system; /* ISO2022 section */ @@ -943,7 +946,7 @@ record_conversion_result (struct coding_system *coding, do { \ if (dst + (bytes) >= dst_end) \ { \ - int more_bytes = charbuf_end - charbuf + (bytes); \ + EMACS_INT more_bytes = charbuf_end - charbuf + (bytes); \ \ dst = alloc_destination (coding, more_bytes, dst); \ dst_end = coding->destination + coding->dst_bytes; \ @@ -1208,7 +1211,7 @@ detect_coding_utf_8 (struct coding_system *coding, const unsigned char *src = coding->source, *src_base; const unsigned char *src_end = coding->source + coding->src_bytes; int multibytep = coding->src_multibyte; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; int bom_found = 0; int found = 0; @@ -1293,7 +1296,7 @@ decode_coding_utf_8 (struct coding_system *coding) const unsigned char *src_base; int *charbuf = coding->charbuf + coding->charbuf_used; int *charbuf_end = coding->charbuf + coding->charbuf_size; - int consumed_chars = 0, consumed_chars_base = 0; + EMACS_INT consumed_chars = 0, consumed_chars_base = 0; int multibytep = coding->src_multibyte; enum utf_bom_type bom = CODING_UTF_8_BOM (coding); int eol_dos = @@ -1444,7 +1447,7 @@ encode_coding_utf_8 (struct coding_system *coding) int *charbuf_end = charbuf + coding->charbuf_used; unsigned char *dst = coding->destination + coding->produced; unsigned char *dst_end = coding->destination + coding->dst_bytes; - int produced_chars = 0; + EMACS_INT produced_chars = 0; int c; if (CODING_UTF_8_BOM (coding) == utf_with_bom) @@ -1602,7 +1605,7 @@ decode_coding_utf_16 (struct coding_system *coding) int *charbuf = coding->charbuf + coding->charbuf_used; /* We may produces at most 3 chars in one loop. */ int *charbuf_end = coding->charbuf + coding->charbuf_size - 2; - int consumed_chars = 0, consumed_chars_base = 0; + EMACS_INT consumed_chars = 0, consumed_chars_base = 0; int multibytep = coding->src_multibyte; enum utf_bom_type bom = CODING_UTF_16_BOM (coding); enum utf_16_endian_type endian = CODING_UTF_16_ENDIAN (coding); @@ -1729,7 +1732,7 @@ encode_coding_utf_16 (struct coding_system *coding) int safe_room = 8; enum utf_bom_type bom = CODING_UTF_16_BOM (coding); int big_endian = CODING_UTF_16_ENDIAN (coding) == utf_16_big_endian; - int produced_chars = 0; + EMACS_INT produced_chars = 0; int c; if (bom != utf_without_bom) @@ -1863,7 +1866,7 @@ detect_coding_emacs_mule (struct coding_system *coding, const unsigned char *src = coding->source, *src_base; const unsigned char *src_end = coding->source + coding->src_bytes; int multibytep = coding->src_multibyte; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; int c; int found = 0; @@ -2331,10 +2334,10 @@ decode_coding_emacs_mule (struct coding_system *coding) loop and one more charset annotation at the end. */ int *charbuf_end = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3); - int consumed_chars = 0, consumed_chars_base; + EMACS_INT consumed_chars = 0, consumed_chars_base; int multibytep = coding->src_multibyte; - int char_offset = coding->produced_char; - int last_offset = char_offset; + EMACS_INT char_offset = coding->produced_char; + EMACS_INT last_offset = char_offset; int last_id = charset_ascii; int eol_dos = !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos); @@ -2585,7 +2588,7 @@ encode_coding_emacs_mule (struct coding_system *coding) unsigned char *dst = coding->destination + coding->produced; unsigned char *dst_end = coding->destination + coding->dst_bytes; int safe_room = 8; - int produced_chars = 0; + EMACS_INT produced_chars = 0; Lisp_Object attrs, charset_list; int c; int preferred_charset_id = -1; @@ -2859,7 +2862,7 @@ encode_coding_emacs_mule (struct coding_system *coding) COMPOSITION_WITH_RULE_ALTCHARS: ESC 4 ALTCHAR [ RULE ALTCHAR ] ESC 0 CHAR [ CHAR ] ESC 1 */ -enum iso_code_class_type iso_code_class[256]; +static enum iso_code_class_type iso_code_class[256]; #define SAFE_CHARSET_P(coding, id) \ ((id) <= (coding)->max_charset_id \ @@ -2943,7 +2946,7 @@ detect_coding_iso_2022 (struct coding_system *coding, int single_shifting = 0; int id; int c, c1; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; int i; int rejected = 0; int found = 0; @@ -3453,7 +3456,7 @@ decode_coding_iso_2022 (struct coding_system *coding) loop and one more charset annotation at the end. */ int *charbuf_end = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3); - int consumed_chars = 0, consumed_chars_base; + EMACS_INT consumed_chars = 0, consumed_chars_base; int multibytep = coding->src_multibyte; /* Charsets invoked to graphic plane 0 and 1 respectively. */ int charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0); @@ -3463,8 +3466,8 @@ decode_coding_iso_2022 (struct coding_system *coding) int c; struct composition_status *cmp_status = CODING_ISO_CMP_STATUS (coding); Lisp_Object attrs = CODING_ID_ATTRS (coding->id); - int char_offset = coding->produced_char; - int last_offset = char_offset; + EMACS_INT char_offset = coding->produced_char; + EMACS_INT last_offset = char_offset; int last_id = charset_ascii; int eol_dos = !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos); @@ -4190,10 +4193,10 @@ decode_coding_iso_2022 (struct coding_system *coding) static unsigned char * encode_invocation_designation (struct charset *charset, struct coding_system *coding, - unsigned char *dst, int *p_nchars) + unsigned char *dst, EMACS_INT *p_nchars) { int multibytep = coding->dst_multibyte; - int produced_chars = *p_nchars; + EMACS_INT produced_chars = *p_nchars; int reg; /* graphic register number */ int id = CHARSET_ID (charset); @@ -4285,7 +4288,7 @@ encode_designation_at_bol (struct coding_system *coding, int *charbuf, /* Table of charsets to be designated to each graphic register. */ int r[4]; int c, found = 0, reg; - int produced_chars = 0; + EMACS_INT produced_chars = 0; int multibytep = coding->dst_multibyte; Lisp_Object attrs; Lisp_Object charset_list; @@ -4340,7 +4343,7 @@ encode_coding_iso_2022 (struct coding_system *coding) int bol_designation = (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DESIGNATE_AT_BOL && CODING_ISO_BOL (coding)); - int produced_chars = 0; + EMACS_INT produced_chars = 0; Lisp_Object attrs, eol_type, charset_list; int ascii_compatible; int c; @@ -4528,7 +4531,7 @@ detect_coding_sjis (struct coding_system *coding, const unsigned char *src = coding->source, *src_base; const unsigned char *src_end = coding->source + coding->src_bytes; int multibytep = coding->src_multibyte; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; int found = 0; int c; Lisp_Object attrs, charset_list; @@ -4585,7 +4588,7 @@ detect_coding_big5 (struct coding_system *coding, const unsigned char *src = coding->source, *src_base; const unsigned char *src_end = coding->source + coding->src_bytes; int multibytep = coding->src_multibyte; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; int found = 0; int c; @@ -4636,13 +4639,13 @@ decode_coding_sjis (struct coding_system *coding) the end. */ int *charbuf_end = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); - int consumed_chars = 0, consumed_chars_base; + EMACS_INT consumed_chars = 0, consumed_chars_base; int multibytep = coding->src_multibyte; struct charset *charset_roman, *charset_kanji, *charset_kana; struct charset *charset_kanji2; Lisp_Object attrs, charset_list, val; - int char_offset = coding->produced_char; - int last_offset = char_offset; + EMACS_INT char_offset = coding->produced_char; + EMACS_INT last_offset = char_offset; int last_id = charset_ascii; int eol_dos = !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos); @@ -4754,12 +4757,12 @@ decode_coding_big5 (struct coding_system *coding) the end. */ int *charbuf_end = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); - int consumed_chars = 0, consumed_chars_base; + EMACS_INT consumed_chars = 0, consumed_chars_base; int multibytep = coding->src_multibyte; struct charset *charset_roman, *charset_big5; Lisp_Object attrs, charset_list, val; - int char_offset = coding->produced_char; - int last_offset = char_offset; + EMACS_INT char_offset = coding->produced_char; + EMACS_INT last_offset = char_offset; int last_id = charset_ascii; int eol_dos = !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos); @@ -4856,7 +4859,7 @@ encode_coding_sjis (struct coding_system *coding) unsigned char *dst = coding->destination + coding->produced; unsigned char *dst_end = coding->destination + coding->dst_bytes; int safe_room = 4; - int produced_chars = 0; + EMACS_INT produced_chars = 0; Lisp_Object attrs, charset_list, val; int ascii_compatible; struct charset *charset_kanji, *charset_kana; @@ -4947,7 +4950,7 @@ encode_coding_big5 (struct coding_system *coding) unsigned char *dst = coding->destination + coding->produced; unsigned char *dst_end = coding->destination + coding->dst_bytes; int safe_room = 4; - int produced_chars = 0; + EMACS_INT produced_chars = 0; Lisp_Object attrs, charset_list, val; int ascii_compatible; struct charset *charset_big5; @@ -5022,10 +5025,10 @@ detect_coding_ccl (struct coding_system *coding, const unsigned char *src = coding->source, *src_base; const unsigned char *src_end = coding->source + coding->src_bytes; int multibytep = coding->src_multibyte; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; int found = 0; unsigned char *valids; - int head_ascii = coding->head_ascii; + EMACS_INT head_ascii = coding->head_ascii; Lisp_Object attrs; detect_info->checked |= CATEGORY_MASK_CCL; @@ -5062,7 +5065,7 @@ decode_coding_ccl (struct coding_system *coding) const unsigned char *src_end = coding->source + coding->src_bytes; int *charbuf = coding->charbuf + coding->charbuf_used; int *charbuf_end = coding->charbuf + coding->charbuf_size; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; int multibytep = coding->src_multibyte; struct ccl_program *ccl = &coding->spec.ccl->ccl; int source_charbuf[1024]; @@ -5134,7 +5137,8 @@ encode_coding_ccl (struct coding_system *coding) unsigned char *dst = coding->destination + coding->produced; unsigned char *dst_end = coding->destination + coding->dst_bytes; int destination_charbuf[1024]; - int i, produced_chars = 0; + EMACS_INT produced_chars = 0; + int i; Lisp_Object attrs, charset_list; CODING_GET_INFO (coding, attrs, charset_list); @@ -5220,7 +5224,7 @@ encode_coding_raw_text (struct coding_system *coding) int *charbuf_end = coding->charbuf + coding->charbuf_used; unsigned char *dst = coding->destination + coding->produced; unsigned char *dst_end = coding->destination + coding->dst_bytes; - int produced_chars = 0; + EMACS_INT produced_chars = 0; int c; if (multibytep) @@ -5303,10 +5307,10 @@ detect_coding_charset (struct coding_system *coding, const unsigned char *src = coding->source, *src_base; const unsigned char *src_end = coding->source + coding->src_bytes; int multibytep = coding->src_multibyte; - int consumed_chars = 0; + EMACS_INT consumed_chars = 0; Lisp_Object attrs, valids, name; int found = 0; - int head_ascii = coding->head_ascii; + EMACS_INT head_ascii = coding->head_ascii; int check_latin_extra = 0; detect_info->checked |= CATEGORY_MASK_CHARSET; @@ -5410,12 +5414,12 @@ decode_coding_charset (struct coding_system *coding) the end. */ int *charbuf_end = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); - int consumed_chars = 0, consumed_chars_base; + EMACS_INT consumed_chars = 0, consumed_chars_base; int multibytep = coding->src_multibyte; Lisp_Object attrs = CODING_ID_ATTRS (coding->id); Lisp_Object valids; - int char_offset = coding->produced_char; - int last_offset = char_offset; + EMACS_INT char_offset = coding->produced_char; + EMACS_INT last_offset = char_offset; int last_id = charset_ascii; int eol_dos = !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos); @@ -5536,7 +5540,7 @@ encode_coding_charset (struct coding_system *coding) unsigned char *dst = coding->destination + coding->produced; unsigned char *dst_end = coding->destination + coding->dst_bytes; int safe_room = MAX_MULTIBYTE_LENGTH; - int produced_chars = 0; + EMACS_INT produced_chars = 0; Lisp_Object attrs, charset_list; int ascii_compatible; int c; @@ -6208,7 +6212,7 @@ adjust_coding_eol_type (struct coding_system *coding, int eol_seen) system is detected, update fields of CODING by the detected coding system. */ -void +static void detect_coding (struct coding_system *coding) { const unsigned char *src, *src_end; @@ -6444,7 +6448,7 @@ decode_eol (struct coding_system *coding) } else if (EQ (eol_type, Qdos)) { - int n = 0; + EMACS_INT n = 0; if (NILP (coding->dst_object)) { @@ -6459,9 +6463,9 @@ decode_eol (struct coding_system *coding) } else { - int pos_byte = coding->dst_pos_byte; - int pos = coding->dst_pos; - int pos_end = pos + coding->produced_char - 1; + EMACS_INT pos_byte = coding->dst_pos_byte; + EMACS_INT pos = coding->dst_pos; + EMACS_INT pos_end = pos + coding->produced_char - 1; while (pos < pos_end) { @@ -6646,7 +6650,7 @@ produce_chars (struct coding_system *coding, Lisp_Object translation_table, if (c >= 0) { - int from_nchars = 1, to_nchars = 1; + EMACS_INT from_nchars = 1, to_nchars = 1; Lisp_Object trans = Qnil; LOOKUP_TRANSLATION_TABLE (translation_table, c, trans); @@ -7526,30 +7530,6 @@ decode_coding_gap (struct coding_system *coding, return coding->result; } -int -encode_coding_gap (struct coding_system *coding, - EMACS_INT chars, EMACS_INT bytes) -{ - int count = SPECPDL_INDEX (); - - code_conversion_save (0, 0); - - coding->src_object = Fcurrent_buffer (); - coding->src_chars = chars; - coding->src_bytes = bytes; - coding->src_pos = -chars; - coding->src_pos_byte = -bytes; - coding->src_multibyte = chars < bytes; - coding->dst_object = coding->src_object; - coding->dst_pos = PT; - coding->dst_pos_byte = PT_BYTE; - - encode_coding (coding); - - unbind_to (count, Qnil); - return coding->result; -} - /* Decode the text in the range FROM/FROM_BYTE and TO/TO_BYTE in SRC_OBJECT into DST_OBJECT by coding context CODING. @@ -8830,7 +8810,7 @@ is nil. */) } -Lisp_Object +static Lisp_Object code_convert_region (Lisp_Object start, Lisp_Object end, Lisp_Object coding_system, Lisp_Object dst_object, int encodep, int norecord) @@ -9023,14 +9003,15 @@ Return the corresponding character. */) { Lisp_Object spec, attrs, val; struct charset *charset_roman, *charset_kanji, *charset_kana, *charset; - EMACS_INT c; + EMACS_INT ch; + int c; CHECK_NATNUM (code); - c = XFASTINT (code); + ch = XFASTINT (code); CHECK_CODING_SYSTEM_GET_SPEC (Vsjis_coding_system, spec); attrs = AREF (spec, 0); - if (ASCII_BYTE_P (c) + if (ASCII_BYTE_P (ch) && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs))) return code; @@ -9039,27 +9020,31 @@ Return the corresponding character. */) charset_kana = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val); charset_kanji = CHARSET_FROM_ID (XINT (XCAR (val))); - if (c <= 0x7F) - charset = charset_roman; - else if (c >= 0xA0 && c < 0xDF) + if (ch <= 0x7F) + { + c = ch; + charset = charset_roman; + } + else if (ch >= 0xA0 && ch < 0xDF) { + c = ch - 0x80; charset = charset_kana; - c -= 0x80; } else { - EMACS_INT c1 = c >> 8; - int c2 = c & 0xFF; + EMACS_INT c1 = ch >> 8; + int c2 = ch & 0xFF; if (c1 < 0x81 || (c1 > 0x9F && c1 < 0xE0) || c1 > 0xEF || c2 < 0x40 || c2 == 0x7F || c2 > 0xFC) - error ("Invalid code: %d", code); + error ("Invalid code: %"pI"d", ch); + c = ch; SJIS_TO_JIS (c); charset = charset_kanji; } c = DECODE_CHAR (charset, c); if (c < 0) - error ("Invalid code: %d", code); + error ("Invalid code: %"pI"d", ch); return make_number (c); } @@ -9099,14 +9084,15 @@ Return the corresponding character. */) { Lisp_Object spec, attrs, val; struct charset *charset_roman, *charset_big5, *charset; + EMACS_INT ch; int c; CHECK_NATNUM (code); - c = XFASTINT (code); + ch = XFASTINT (code); CHECK_CODING_SYSTEM_GET_SPEC (Vbig5_coding_system, spec); attrs = AREF (spec, 0); - if (ASCII_BYTE_P (c) + if (ASCII_BYTE_P (ch) && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs))) return code; @@ -9114,19 +9100,24 @@ Return the corresponding character. */) charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val); charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val))); - if (c <= 0x7F) - charset = charset_roman; + if (ch <= 0x7F) + { + c = ch; + charset = charset_roman; + } else { - int b1 = c >> 8, b2 = c & 0x7F; + EMACS_INT b1 = ch >> 8; + int b2 = ch & 0x7F; if (b1 < 0xA1 || b1 > 0xFE || b2 < 0x40 || (b2 > 0x7E && b2 < 0xA1) || b2 > 0xFE) - error ("Invalid code: %d", code); + error ("Invalid code: %"pI"d", ch); + c = ch; charset = charset_big5; } - c = DECODE_CHAR (charset, (unsigned )c); + c = DECODE_CHAR (charset, c); if (c < 0) - error ("Invalid code: %d", code); + error ("Invalid code: %"pI"d", ch); return make_number (c); } @@ -9298,7 +9289,7 @@ usage: (find-operation-coding-system OPERATION ARGUMENTS...) */) || (EQ (operation, Qinsert_file_contents) && CONSP (target) && STRINGP (XCAR (target)) && BUFFERP (XCDR (target))) || (EQ (operation, Qopen_network_stream) && INTEGERP (target)))) - error ("Invalid %dth argument", XFASTINT (target_idx) + 1); + error ("Invalid %"pI"dth argument", XFASTINT (target_idx) + 1); if (CONSP (target)) target = XCAR (target); @@ -9774,7 +9765,7 @@ usage: (define-coding-system-internal ...) */) CHECK_CHARSET_GET_ID (tmp1, id); CHECK_NATNUM_CDR (val); if (XINT (XCDR (val)) >= 4) - error ("Invalid graphic register number: %d", XINT (XCDR (val))); + error ("Invalid graphic register number: %"pI"d", XINT (XCDR (val))); XSETCAR (val, make_number (id)); }