aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/regex-emacs.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index fea34df991b..9e298b81ebb 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -1716,7 +1716,8 @@ regex_compile (re_char *pattern, ptrdiff_t size,
1716 1716
1717 /* Address of start of the most recently finished expression. 1717 /* Address of start of the most recently finished expression.
1718 This tells, e.g., postfix * where to find the start of its 1718 This tells, e.g., postfix * where to find the start of its
1719 operand. Reset at the beginning of groups and alternatives. */ 1719 operand. Reset at the beginning of groups and alternatives,
1720 and after ^ and \` for dusty-deck compatibility. */
1720 unsigned char *laststart = 0; 1721 unsigned char *laststart = 0;
1721 1722
1722 /* Address of beginning of regexp, or inside of last group. */ 1723 /* Address of beginning of regexp, or inside of last group. */
@@ -1847,12 +1848,16 @@ regex_compile (re_char *pattern, ptrdiff_t size,
1847 case '^': 1848 case '^':
1848 if (! (p == pattern + 1 || at_begline_loc_p (pattern, p))) 1849 if (! (p == pattern + 1 || at_begline_loc_p (pattern, p)))
1849 goto normal_char; 1850 goto normal_char;
1851 /* Special case for compatibility: postfix ops after ^ become
1852 literals. */
1853 laststart = 0;
1850 BUF_PUSH (begline); 1854 BUF_PUSH (begline);
1851 break; 1855 break;
1852 1856
1853 case '$': 1857 case '$':
1854 if (! (p == pend || at_endline_loc_p (p, pend))) 1858 if (! (p == pend || at_endline_loc_p (p, pend)))
1855 goto normal_char; 1859 goto normal_char;
1860 laststart = b;
1856 BUF_PUSH (endline); 1861 BUF_PUSH (endline);
1857 break; 1862 break;
1858 1863
@@ -1892,7 +1897,7 @@ regex_compile (re_char *pattern, ptrdiff_t size,
1892 1897
1893 /* Star, etc. applied to an empty pattern is equivalent 1898 /* Star, etc. applied to an empty pattern is equivalent
1894 to an empty pattern. */ 1899 to an empty pattern. */
1895 if (!laststart || laststart == b) 1900 if (laststart == b)
1896 break; 1901 break;
1897 1902
1898 /* Now we know whether or not zero matches is allowed 1903 /* Now we know whether or not zero matches is allowed
@@ -2544,18 +2549,24 @@ regex_compile (re_char *pattern, ptrdiff_t size,
2544 break; 2549 break;
2545 2550
2546 case 'b': 2551 case 'b':
2552 laststart = b;
2547 BUF_PUSH (wordbound); 2553 BUF_PUSH (wordbound);
2548 break; 2554 break;
2549 2555
2550 case 'B': 2556 case 'B':
2557 laststart = b;
2551 BUF_PUSH (notwordbound); 2558 BUF_PUSH (notwordbound);
2552 break; 2559 break;
2553 2560
2554 case '`': 2561 case '`':
2562 /* Special case for compatibility: postfix ops after \` become
2563 literals, as for ^ (see above). */
2564 laststart = 0;
2555 BUF_PUSH (begbuf); 2565 BUF_PUSH (begbuf);
2556 break; 2566 break;
2557 2567
2558 case '\'': 2568 case '\'':
2569 laststart = b;
2559 BUF_PUSH (endbuf); 2570 BUF_PUSH (endbuf);
2560 break; 2571 break;
2561 2572