diff options
| author | Stefan Monnier | 2011-03-31 00:24:03 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2011-03-31 00:24:03 -0400 |
| commit | 40d83b412f584cc02e68d4eac8fd5e6eb769e2fe (patch) | |
| tree | b56f27a7e6d75a8c1fd27b00179a27b5efea0a32 /src/search.c | |
| parent | f488fb6528738131ef41859e1f04125f2e50efce (diff) | |
| parent | 44f230aa043ebb222aa0876b44d70484d5dd38db (diff) | |
| download | emacs-40d83b412f584cc02e68d4eac8fd5e6eb769e2fe.tar.gz emacs-40d83b412f584cc02e68d4eac8fd5e6eb769e2fe.zip | |
Merge from trunk
Diffstat (limited to 'src/search.c')
| -rw-r--r-- | src/search.c | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/src/search.c b/src/search.c index bf93a7fe442..682fa185bbb 100644 --- a/src/search.c +++ b/src/search.c | |||
| @@ -95,10 +95,9 @@ static void save_search_regs (void); | |||
| 95 | static EMACS_INT simple_search (EMACS_INT, unsigned char *, EMACS_INT, | 95 | static EMACS_INT simple_search (EMACS_INT, unsigned char *, EMACS_INT, |
| 96 | EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT, | 96 | EMACS_INT, Lisp_Object, EMACS_INT, EMACS_INT, |
| 97 | EMACS_INT, EMACS_INT); | 97 | EMACS_INT, EMACS_INT); |
| 98 | static EMACS_INT boyer_moore (EMACS_INT, unsigned char *, EMACS_INT, EMACS_INT, | 98 | static EMACS_INT boyer_moore (EMACS_INT, unsigned char *, EMACS_INT, |
| 99 | Lisp_Object, Lisp_Object, | 99 | Lisp_Object, Lisp_Object, EMACS_INT, |
| 100 | EMACS_INT, EMACS_INT, | 100 | EMACS_INT, int); |
| 101 | EMACS_INT, EMACS_INT, int); | ||
| 102 | static EMACS_INT search_buffer (Lisp_Object, EMACS_INT, EMACS_INT, | 101 | static EMACS_INT search_buffer (Lisp_Object, EMACS_INT, EMACS_INT, |
| 103 | EMACS_INT, EMACS_INT, EMACS_INT, int, | 102 | EMACS_INT, EMACS_INT, EMACS_INT, int, |
| 104 | Lisp_Object, Lisp_Object, int); | 103 | Lisp_Object, Lisp_Object, int); |
| @@ -1416,15 +1415,14 @@ search_buffer (Lisp_Object string, EMACS_INT pos, EMACS_INT pos_byte, | |||
| 1416 | } | 1415 | } |
| 1417 | 1416 | ||
| 1418 | len_byte = pat - patbuf; | 1417 | len_byte = pat - patbuf; |
| 1419 | len = raw_pattern_size; | ||
| 1420 | pat = base_pat = patbuf; | 1418 | pat = base_pat = patbuf; |
| 1421 | 1419 | ||
| 1422 | if (boyer_moore_ok) | 1420 | if (boyer_moore_ok) |
| 1423 | return boyer_moore (n, pat, len, len_byte, trt, inverse_trt, | 1421 | return boyer_moore (n, pat, len_byte, trt, inverse_trt, |
| 1424 | pos, pos_byte, lim, lim_byte, | 1422 | pos_byte, lim_byte, |
| 1425 | char_base); | 1423 | char_base); |
| 1426 | else | 1424 | else |
| 1427 | return simple_search (n, pat, len, len_byte, trt, | 1425 | return simple_search (n, pat, raw_pattern_size, len_byte, trt, |
| 1428 | pos, pos_byte, lim, lim_byte); | 1426 | pos, pos_byte, lim, lim_byte); |
| 1429 | } | 1427 | } |
| 1430 | } | 1428 | } |
| @@ -1636,8 +1634,8 @@ simple_search (EMACS_INT n, unsigned char *pat, | |||
| 1636 | } | 1634 | } |
| 1637 | 1635 | ||
| 1638 | /* Do Boyer-Moore search N times for the string BASE_PAT, | 1636 | /* Do Boyer-Moore search N times for the string BASE_PAT, |
| 1639 | whose length is LEN/LEN_BYTE, | 1637 | whose length is LEN_BYTE, |
| 1640 | from buffer position POS/POS_BYTE until LIM/LIM_BYTE. | 1638 | from buffer position POS_BYTE until LIM_BYTE. |
| 1641 | DIRECTION says which direction we search in. | 1639 | DIRECTION says which direction we search in. |
| 1642 | TRT and INVERSE_TRT are translation tables. | 1640 | TRT and INVERSE_TRT are translation tables. |
| 1643 | Characters in PAT are already translated by TRT. | 1641 | Characters in PAT are already translated by TRT. |
| @@ -1652,10 +1650,10 @@ simple_search (EMACS_INT n, unsigned char *pat, | |||
| 1652 | 1650 | ||
| 1653 | static EMACS_INT | 1651 | static EMACS_INT |
| 1654 | boyer_moore (EMACS_INT n, unsigned char *base_pat, | 1652 | boyer_moore (EMACS_INT n, unsigned char *base_pat, |
| 1655 | EMACS_INT len, EMACS_INT len_byte, | 1653 | EMACS_INT len_byte, |
| 1656 | Lisp_Object trt, Lisp_Object inverse_trt, | 1654 | Lisp_Object trt, Lisp_Object inverse_trt, |
| 1657 | EMACS_INT pos, EMACS_INT pos_byte, | 1655 | EMACS_INT pos_byte, EMACS_INT lim_byte, |
| 1658 | EMACS_INT lim, EMACS_INT lim_byte, int char_base) | 1656 | int char_base) |
| 1659 | { | 1657 | { |
| 1660 | int direction = ((n > 0) ? 1 : -1); | 1658 | int direction = ((n > 0) ? 1 : -1); |
| 1661 | register EMACS_INT dirlen; | 1659 | register EMACS_INT dirlen; |
| @@ -1776,8 +1774,8 @@ boyer_moore (EMACS_INT n, unsigned char *base_pat, | |||
| 1776 | stride_for_teases = BM_tab[j]; | 1774 | stride_for_teases = BM_tab[j]; |
| 1777 | 1775 | ||
| 1778 | BM_tab[j] = dirlen - i; | 1776 | BM_tab[j] = dirlen - i; |
| 1779 | /* A translation table is accompanied by its inverse -- see */ | 1777 | /* A translation table is accompanied by its inverse -- see |
| 1780 | /* comment following downcase_table for details */ | 1778 | comment following downcase_table for details. */ |
| 1781 | if (ch >= 0) | 1779 | if (ch >= 0) |
| 1782 | { | 1780 | { |
| 1783 | int starting_ch = ch; | 1781 | int starting_ch = ch; |
| @@ -2636,11 +2634,8 @@ since only regular expressions have distinguished subexpressions. */) | |||
| 2636 | EMACS_INT substed_alloc_size, substed_len; | 2634 | EMACS_INT substed_alloc_size, substed_len; |
| 2637 | int buf_multibyte = !NILP (BVAR (current_buffer, enable_multibyte_characters)); | 2635 | int buf_multibyte = !NILP (BVAR (current_buffer, enable_multibyte_characters)); |
| 2638 | int str_multibyte = STRING_MULTIBYTE (newtext); | 2636 | int str_multibyte = STRING_MULTIBYTE (newtext); |
| 2639 | Lisp_Object rev_tbl; | ||
| 2640 | int really_changed = 0; | 2637 | int really_changed = 0; |
| 2641 | 2638 | ||
| 2642 | rev_tbl = Qnil; | ||
| 2643 | |||
| 2644 | substed_alloc_size = length * 2 + 100; | 2639 | substed_alloc_size = length * 2 + 100; |
| 2645 | substed = (unsigned char *) xmalloc (substed_alloc_size + 1); | 2640 | substed = (unsigned char *) xmalloc (substed_alloc_size + 1); |
| 2646 | substed_len = 0; | 2641 | substed_len = 0; |
| @@ -2660,7 +2655,7 @@ since only regular expressions have distinguished subexpressions. */) | |||
| 2660 | { | 2655 | { |
| 2661 | FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, newtext, pos, pos_byte); | 2656 | FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, newtext, pos, pos_byte); |
| 2662 | if (!buf_multibyte) | 2657 | if (!buf_multibyte) |
| 2663 | c = multibyte_char_to_unibyte (c, rev_tbl); | 2658 | c = multibyte_char_to_unibyte (c); |
| 2664 | } | 2659 | } |
| 2665 | else | 2660 | else |
| 2666 | { | 2661 | { |
| @@ -2683,7 +2678,7 @@ since only regular expressions have distinguished subexpressions. */) | |||
| 2683 | FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, newtext, | 2678 | FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, newtext, |
| 2684 | pos, pos_byte); | 2679 | pos, pos_byte); |
| 2685 | if (!buf_multibyte && !ASCII_CHAR_P (c)) | 2680 | if (!buf_multibyte && !ASCII_CHAR_P (c)) |
| 2686 | c = multibyte_char_to_unibyte (c, rev_tbl); | 2681 | c = multibyte_char_to_unibyte (c); |
| 2687 | } | 2682 | } |
| 2688 | else | 2683 | else |
| 2689 | { | 2684 | { |