# HG changeset patch # User Stefan Monnier # Date 1213302347 0 # Node ID f13a77e0e34f7a4f35e6294d32f9857a264eb13c # Parent 5bef95d2d50652d46966f211ea86a719a455cd9a * character.h (CHAR_TO_BYTE_SAFE): New macro. * character.c (Fmultibyte_char_to_unibyte): Obey the docstring. * regex.c (RE_CHAR_TO_UNIBYTE): Use the new macro. (WEAK_ALIAS): Simplify. * syntax.c (skip_chars): Don't mark non-byte chars in the fastmap when searching a unibyte buffer. diff -r 5bef95d2d506 -r f13a77e0e34f src/ChangeLog --- a/src/ChangeLog Thu Jun 12 17:28:00 2008 +0000 +++ b/src/ChangeLog Thu Jun 12 20:25:47 2008 +0000 @@ -1,3 +1,12 @@ +2008-06-12 Stefan Monnier + + * character.h (CHAR_TO_BYTE_SAFE): New macro. + * character.c (Fmultibyte_char_to_unibyte): Obey the docstring. + * regex.c (RE_CHAR_TO_UNIBYTE): Use the new macro. + (WEAK_ALIAS): Simplify. + * syntax.c (skip_chars): Don't mark non-byte chars in the fastmap + when searching a unibyte buffer. + 2008-06-12 Chong Yidong * xfns.c (Fx_select_font): Rename from x-font-dialog. @@ -8,10 +17,10 @@ 2008-06-11 Jason Rumney - * w32font.c (w32font_encode_char): Detect missing glyphs that are - misreported as space. - (add_font_entity_to_list): Support unicode-bmp and unicode-sip - as aliases for registry iso10646-1. + * w32font.c (w32font_encode_char): Detect missing glyphs that are + misreported as space. + (add_font_entity_to_list): Support unicode-bmp and unicode-sip + as aliases for registry iso10646-1. 2008-06-11 Stefan Monnier diff -r 5bef95d2d506 -r f13a77e0e34f src/character.c --- a/src/character.c Thu Jun 12 17:28:00 2008 +0000 +++ b/src/character.c Thu Jun 12 20:25:47 2008 +0000 @@ -359,7 +359,7 @@ return ch; else { - int cu = CHAR_TO_BYTE8 (cm); + int cu = CHAR_TO_BYTE_SAFE (cm); return make_number (cu); } } diff -r 5bef95d2d506 -r f13a77e0e34f src/character.h --- a/src/character.h Thu Jun 12 17:28:00 2008 +0000 +++ b/src/character.h Thu Jun 12 20:25:47 2008 +0000 @@ -68,6 +68,13 @@ ? (c) - 0x3FFF00 \ : multibyte_char_to_unibyte (c, Qnil)) +/* Return the raw 8-bit byte for character C, + or -1 if C doesn't correspond to a byte. */ +#define CHAR_TO_BYTE_SAFE(c) \ + (CHAR_BYTE8_P (c) \ + ? (c) - 0x3FFF00 \ + : multibyte_char_to_unibyte_safe (c, Qnil)) + /* Nonzero iff BYTE is the 1st byte of a multibyte form of a character that corresponds to a raw 8-bit byte. */ #define CHAR_BYTE8_HEAD_P(byte) ((byte) == 0xC0 || (byte) == 0xC1) diff -r 5bef95d2d506 -r f13a77e0e34f src/regex.c --- a/src/regex.c Thu Jun 12 17:28:00 2008 +0000 +++ b/src/regex.c Thu Jun 12 20:25:47 2008 +0000 @@ -153,10 +153,7 @@ # define RE_CHAR_TO_MULTIBYTE(c) unibyte_to_multibyte_table[(c)] -# define RE_CHAR_TO_UNIBYTE(c) \ - (ASCII_CHAR_P (c) ? (c) \ - : CHAR_BYTE8_P (c) ? CHAR_TO_BYTE8 (c) \ - : multibyte_char_to_unibyte_safe (c)) +# define RE_CHAR_TO_UNIBYTE(c) CHAR_TO_BYTE_SAFE (c) /* Set C a (possibly converted to multibyte) character before P. P points into a string which is the virtual concatenation of STR1 @@ -5574,10 +5571,7 @@ if (multibyte) { pat_ch = STRING_CHAR_AND_LENGTH (p, pend - p, pat_charlen); - if (CHAR_BYTE8_P (pat_ch)) - pat_ch = CHAR_TO_BYTE8 (pat_ch); - else - pat_ch = RE_CHAR_TO_UNIBYTE (pat_ch); + pat_ch = RE_CHAR_TO_UNIBYTE (pat_ch); } else { diff -r 5bef95d2d506 -r f13a77e0e34f src/syntax.c --- a/src/syntax.c Thu Jun 12 17:28:00 2008 +0000 +++ b/src/syntax.c Thu Jun 12 20:25:47 2008 +0000 @@ -1711,7 +1711,11 @@ int c2 = char_ranges[i + 1]; for (; c1 <= c2; c1++) - fastmap[CHAR_TO_BYTE8 (c1)] = 1; + { + int b = CHAR_TO_BYTE_SAFE (c1); + if (b >= 0) + fastmap[b] = 1; + } } } }