/[emacs]/emacs/src/regex.c
ViewVC logotype

Diff of /emacs/src/regex.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.174 by monnier, Fri Nov 2 16:06:54 2001 UTC revision 1.175 by rms, Thu Mar 21 09:44:14 2002 UTC
# Line 1518  do {                                                                   \ Line 1518  do {                                                                   \
1518      }                                                                   \      }                                                                   \
1519  } while (0)  } while (0)
1520    
1521    /* Discard a saved register off the stack.  */
1522    #define DISCARD_FAILURE_REG_OR_COUNT()                                  \
1523    do {                                                                    \
1524      int reg = POP_FAILURE_INT ();                                         \
1525      if (reg == -1)                                                        \
1526        {                                                                   \
1527          /* It's a counter.  */                                            \
1528          POP_FAILURE_POINTER ();                                           \
1529          reg = POP_FAILURE_INT ();                                         \
1530          DEBUG_PRINT3 ("     Discard counter %p = %d\n", ptr, reg);        \
1531        }                                                                   \
1532      else                                                                  \
1533        {                                                                   \
1534          POP_FAILURE_POINTER ();                                           \
1535          POP_FAILURE_POINTER ();                                           \
1536          DEBUG_PRINT4 ("     Discard reg %d (spanning %p -> %p)\n",        \
1537                        reg, regstart[reg], regend[reg]);                   \
1538        }                                                                   \
1539    } while (0)
1540    
1541  /* Check that we are not stuck in an infinite loop.  */  /* Check that we are not stuck in an infinite loop.  */
1542  #define CHECK_INFINITE_LOOP(pat_cur, string_place)                      \  #define CHECK_INFINITE_LOOP(pat_cur, string_place)                      \
1543  do {                                                                    \  do {                                                                    \
1544    int failure = TOP_FAILURE_HANDLE();                                   \    int failure = TOP_FAILURE_HANDLE ();                                  \
1545    /* Check for infinite matching loops */                               \    /* Check for infinite matching loops */                               \
1546    while (failure > 0 &&                                                 \    while (failure > 0                                                    \
1547           (FAILURE_STR (failure) == string_place                         \           && (FAILURE_STR (failure) == string_place                      \
1548            || FAILURE_STR (failure) == NULL))                            \               || FAILURE_STR (failure) == NULL))                         \
1549      {                                                                   \      {                                                                   \
1550        assert (FAILURE_PAT (failure) >= bufp->buffer                     \        assert (FAILURE_PAT (failure) >= bufp->buffer                     \
1551                && FAILURE_PAT (failure) <= bufp->buffer + bufp->used);   \                && FAILURE_PAT (failure) <= bufp->buffer + bufp->used);   \
1552        if (FAILURE_PAT (failure) == pat_cur)                             \        if (FAILURE_PAT (failure) == pat_cur)                             \
1553          goto fail;                                                      \          {                                                               \
1554              while (fail_stack.frame < fail_stack.avail)                   \
1555                DISCARD_FAILURE_REG_OR_COUNT ();                            \
1556              goto fail;                                                    \
1557            }                                                               \
1558        DEBUG_PRINT2 ("  Other pattern: %p\n", FAILURE_PAT (failure));    \        DEBUG_PRINT2 ("  Other pattern: %p\n", FAILURE_PAT (failure));    \
1559        failure = NEXT_FAILURE_HANDLE(failure);                           \        failure = NEXT_FAILURE_HANDLE(failure);                           \
1560      }                                                                   \      }                                                                   \
# Line 1920  struct range_table_work_area Line 1944  struct range_table_work_area
1944   do { if (p != pend)                                                    \   do { if (p != pend)                                                    \
1945       {                                                                  \       {                                                                  \
1946         PATFETCH (c);                                                    \         PATFETCH (c);                                                    \
1947           while (c == ' ') PATFETCH (c);                                   \
1948         while ('0' <= c && c <= '9')                                     \         while ('0' <= c && c <= '9')                                     \
1949           {                                                              \           {                                                              \
1950               int prev;                                                    \
1951             if (num < 0)                                                 \             if (num < 0)                                                 \
1952                num = 0;                                                  \               num = 0;                                                   \
1953               prev = num;                                                  \
1954             num = num * 10 + c - '0';                                    \             num = num * 10 + c - '0';                                    \
1955               if (num / 10 != prev)                                        \
1956                 FREE_STACK_RETURN (REG_BADBR);                             \
1957             if (p == pend)                                               \             if (p == pend)                                               \
1958                break;                                                    \               break;                                                     \
1959             PATFETCH (c);                                                \             PATFETCH (c);                                                \
1960           }                                                              \           }                                                              \
1961           while (c == ' ') PATFETCH (c);                                   \
1962         }                                                                \         }                                                                \
1963      } while (0)      } while (0)
1964    

Legend:
Removed from v.1.174  
changed lines
  Added in v.1.175

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26