GNUregex.c
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:140k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /* Pops what PUSH_FAIL_STACK pushes.
  2.  * 
  3.  * We restore into the parameters, all of which should be lvalues:
  4.  * STR -- the saved data position.
  5.  * PAT -- the saved pattern position.
  6.  * LOW_REG, HIGH_REG -- the highest and lowest active registers.
  7.  * REGSTART, REGEND -- arrays of string positions.
  8.  * REG_INFO -- array of information about each subexpression.
  9.  * 
  10.  * Also assumes the variables `fail_stack' and (if debugging), `bufp',
  11.  * `pend', `string1', `size1', `string2', and `size2'.  */
  12. #define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)
  13. {
  14.   DEBUG_STATEMENT (fail_stack_elt_t failure_id;)
  15.   int this_reg;
  16.   const unsigned char *string_temp;
  17.   assert (!FAIL_STACK_EMPTY ());
  18.   /* Remove failure points and point to how many regs pushed.  */
  19.   DEBUG_PRINT1 ("POP_FAILURE_POINT:n");
  20.   DEBUG_PRINT2 ("  Before pop, next avail: %dn", fail_stack.avail);
  21.   DEBUG_PRINT2 ("                    size: %dn", fail_stack.size);
  22.   assert (fail_stack.avail >= NUM_NONREG_ITEMS);
  23.   DEBUG_POP (&failure_id);
  24.   DEBUG_PRINT2 ("  Popping failure id: %un", failure_id);
  25.   /* If the saved string location is NULL, it came from an
  26.      on_failure_keep_string_jump opcode, and we want to throw away the
  27.      saved NULL, thus retaining our current position in the string.  */
  28.   string_temp = POP_FAILURE_ITEM ();
  29.   if (string_temp != NULL)
  30.     str = (const char *) string_temp;
  31.   DEBUG_PRINT2 ("  Popping string 0x%x: `", str);
  32.   DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);
  33.   DEBUG_PRINT1 ("'n");
  34.   pat = (unsigned char *) POP_FAILURE_ITEM ();
  35.   DEBUG_PRINT2 ("  Popping pattern 0x%x: ", pat);
  36.   DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);
  37.   /* Restore register info.  */
  38.   high_reg = (unsigned long) POP_FAILURE_ITEM ();
  39.   DEBUG_PRINT2 ("  Popping high active reg: %dn", high_reg);
  40.   low_reg = (unsigned long) POP_FAILURE_ITEM ();
  41.   DEBUG_PRINT2 ("  Popping  low active reg: %dn", low_reg);
  42.   for (this_reg = high_reg; this_reg >= low_reg; this_reg--)
  43.     {
  44.       DEBUG_PRINT2 ("    Popping reg: %dn", this_reg);
  45.       reg_info[this_reg].word = POP_FAILURE_ITEM ();
  46.       DEBUG_PRINT2 ("      info: 0x%xn", reg_info[this_reg]);
  47.       regend[this_reg] = (const char *) POP_FAILURE_ITEM ();
  48.       DEBUG_PRINT2 ("      end: 0x%xn", regend[this_reg]);
  49.       regstart[this_reg] = (const char *) POP_FAILURE_ITEM ();
  50.       DEBUG_PRINT2 ("      start: 0x%xn", regstart[this_reg]);
  51.     }
  52.   DEBUG_STATEMENT (nfailure_points_popped++);
  53. } /* POP_FAILURE_POINT */
  54. /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
  55.  * BUFP.  A fastmap records which of the (1 << BYTEWIDTH) possible
  56.  * characters can start a string that matches the pattern.  This fastmap
  57.  * is used by re_search to skip quickly over impossible starting points.
  58.  * 
  59.  * The caller must supply the address of a (1 << BYTEWIDTH)-byte data
  60.  * area as BUFP->fastmap.
  61.  * 
  62.  * We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
  63.  * the pattern buffer.
  64.  * 
  65.  * Returns 0 if we succeed, -2 if an internal error.   */
  66. int
  67. re_compile_fastmap(bufp)
  68.      struct re_pattern_buffer *bufp;
  69. {
  70.     int j, k;
  71.     fail_stack_type fail_stack;
  72. #ifndef REGEX_MALLOC
  73.     char *destination;
  74. #endif
  75.     /* We don't push any register information onto the failure stack.  */
  76.     unsigned num_regs = 0;
  77.     register char *fastmap = bufp->fastmap;
  78.     unsigned char *pattern = bufp->buffer;
  79.     unsigned long size = bufp->used;
  80.     const unsigned char *p = pattern;
  81.     register unsigned char *pend = pattern + size;
  82.     /* Assume that each path through the pattern can be null until
  83.      * proven otherwise.  We set this false at the bottom of switch
  84.      * statement, to which we get only if a particular path doesn't
  85.      * match the empty string.  */
  86.     boolean path_can_be_null = true;
  87.     /* We aren't doing a `succeed_n' to begin with.  */
  88.     boolean succeed_n_p = false;
  89.     assert(fastmap != NULL && p != NULL);
  90.     INIT_FAIL_STACK();
  91.     memset(fastmap, 0, 1 << BYTEWIDTH); /* Assume nothing's valid.  */
  92.     bufp->fastmap_accurate = 1; /* It will be when we're done.  */
  93.     bufp->can_be_null = 0;
  94.     while (p != pend || !FAIL_STACK_EMPTY()) {
  95. if (p == pend) {
  96.     bufp->can_be_null |= path_can_be_null;
  97.     /* Reset for next path.  */
  98.     path_can_be_null = true;
  99.     p = fail_stack.stack[--fail_stack.avail];
  100. }
  101. /* We should never be about to go beyond the end of the pattern.  */
  102. assert(p < pend);
  103. #ifdef SWITCH_ENUM_BUG
  104. switch ((int) ((re_opcode_t) * p++))
  105. #else
  106. switch ((re_opcode_t) * p++)
  107. #endif
  108. {
  109.     /* I guess the idea here is to simply not bother with a fastmap
  110.      * if a backreference is used, since it's too hard to figure out
  111.      * the fastmap for the corresponding group.  Setting
  112.      * `can_be_null' stops `re_search_2' from using the fastmap, so
  113.      * that is all we do.  */
  114. case duplicate:
  115.     bufp->can_be_null = 1;
  116.     return 0;
  117.     /* Following are the cases which match a character.  These end
  118.      * with `break'.  */
  119. case exactn:
  120.     fastmap[p[1]] = 1;
  121.     break;
  122. case charset:
  123.     for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
  124. if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
  125.     fastmap[j] = 1;
  126.     break;
  127. case charset_not:
  128.     /* Chars beyond end of map must be allowed.  */
  129.     for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
  130. fastmap[j] = 1;
  131.     for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
  132. if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
  133.     fastmap[j] = 1;
  134.     break;
  135. case wordchar:
  136.     for (j = 0; j < (1 << BYTEWIDTH); j++)
  137. if (SYNTAX(j) == Sword)
  138.     fastmap[j] = 1;
  139.     break;
  140. case notwordchar:
  141.     for (j = 0; j < (1 << BYTEWIDTH); j++)
  142. if (SYNTAX(j) != Sword)
  143.     fastmap[j] = 1;
  144.     break;
  145. case anychar:
  146.     /* `.' matches anything ...  */
  147.     for (j = 0; j < (1 << BYTEWIDTH); j++)
  148. fastmap[j] = 1;
  149.     /* ... except perhaps newline.  */
  150.     if (!(bufp->syntax & RE_DOT_NEWLINE))
  151. fastmap['n'] = 0;
  152.     /* Return if we have already set `can_be_null'; if we have,
  153.      * then the fastmap is irrelevant.  Something's wrong here.  */
  154.     else if (bufp->can_be_null)
  155. return 0;
  156.     /* Otherwise, have to check alternative paths.  */
  157.     break;
  158. #ifdef emacs
  159. case syntaxspec:
  160.     k = *p++;
  161.     for (j = 0; j < (1 << BYTEWIDTH); j++)
  162. if (SYNTAX(j) == (enum syntaxcode) k)
  163.     fastmap[j] = 1;
  164.     break;
  165. case notsyntaxspec:
  166.     k = *p++;
  167.     for (j = 0; j < (1 << BYTEWIDTH); j++)
  168. if (SYNTAX(j) != (enum syntaxcode) k)
  169.     fastmap[j] = 1;
  170.     break;
  171.     /* All cases after this match the empty string.  These end with
  172.      * `continue'.  */
  173. case before_dot:
  174. case at_dot:
  175. case after_dot:
  176.     continue;
  177. #endif /* not emacs */
  178. case no_op:
  179. case begline:
  180. case endline:
  181. case begbuf:
  182. case endbuf:
  183. case wordbound:
  184. case notwordbound:
  185. case wordbeg:
  186. case wordend:
  187. case push_dummy_failure:
  188.     continue;
  189. case jump_n:
  190. case pop_failure_jump:
  191. case maybe_pop_jump:
  192. case jump:
  193. case jump_past_alt:
  194. case dummy_failure_jump:
  195.     EXTRACT_NUMBER_AND_INCR(j, p);
  196.     p += j;
  197.     if (j > 0)
  198. continue;
  199.     /* Jump backward implies we just went through the body of a
  200.      * loop and matched nothing.  Opcode jumped to should be
  201.      * `on_failure_jump' or `succeed_n'.  Just treat it like an
  202.      * ordinary jump.  For a * loop, it has pushed its failure
  203.      * point already; if so, discard that as redundant.  */
  204.     if ((re_opcode_t) * p != on_failure_jump
  205. && (re_opcode_t) * p != succeed_n)
  206. continue;
  207.     p++;
  208.     EXTRACT_NUMBER_AND_INCR(j, p);
  209.     p += j;
  210.     /* If what's on the stack is where we are now, pop it.  */
  211.     if (!FAIL_STACK_EMPTY()
  212. && fail_stack.stack[fail_stack.avail - 1] == p)
  213. fail_stack.avail--;
  214.     continue;
  215. case on_failure_jump:
  216. case on_failure_keep_string_jump:
  217.   handle_on_failure_jump:
  218.     EXTRACT_NUMBER_AND_INCR(j, p);
  219.     /* For some patterns, e.g., `(a?)?', `p+j' here points to the
  220.      * end of the pattern.  We don't want to push such a point,
  221.      * since when we restore it above, entering the switch will
  222.      * increment `p' past the end of the pattern.  We don't need
  223.      * to push such a point since we obviously won't find any more
  224.      * fastmap entries beyond `pend'.  Such a pattern can match
  225.      * the null string, though.  */
  226.     if (p + j < pend) {
  227. if (!PUSH_PATTERN_OP(p + j, fail_stack))
  228.     return -2;
  229.     } else
  230. bufp->can_be_null = 1;
  231.     if (succeed_n_p) {
  232. EXTRACT_NUMBER_AND_INCR(k, p); /* Skip the n.  */
  233. succeed_n_p = false;
  234.     }
  235.     continue;
  236. case succeed_n:
  237.     /* Get to the number of times to succeed.  */
  238.     p += 2;
  239.     /* Increment p past the n for when k != 0.  */
  240.     EXTRACT_NUMBER_AND_INCR(k, p);
  241.     if (k == 0) {
  242. p -= 4;
  243. succeed_n_p = true; /* Spaghetti code alert.  */
  244. goto handle_on_failure_jump;
  245.     }
  246.     continue;
  247. case set_number_at:
  248.     p += 4;
  249.     continue;
  250. case start_memory:
  251. case stop_memory:
  252.     p += 2;
  253.     continue;
  254. default:
  255.     abort(); /* We have listed all the cases.  */
  256. } /* switch *p++ */
  257. /* Getting here means we have found the possible starting
  258.  * characters for one path of the pattern -- and that the empty
  259.  * string does not match.  We need not follow this path further.
  260.  * Instead, look at the next alternative (remembered on the
  261.  * stack), or quit if no more.  The test at the top of the loop
  262.  * does these things.  */
  263. path_can_be_null = false;
  264. p = pend;
  265.     } /* while p */
  266.     /* Set `can_be_null' for the last path (also the first path, if the
  267.      * pattern is empty).  */
  268.     bufp->can_be_null |= path_can_be_null;
  269.     return 0;
  270. } /* re_compile_fastmap */
  271. /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
  272.  * ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
  273.  * this memory for recording register information.  STARTS and ENDS
  274.  * must be allocated using the malloc library routine, and must each
  275.  * be at least NUM_REGS * sizeof (regoff_t) bytes long.
  276.  * 
  277.  * If NUM_REGS == 0, then subsequent matches should allocate their own
  278.  * register data.
  279.  * 
  280.  * Unless this function is called, the first search or match using
  281.  * PATTERN_BUFFER will allocate its own register data, without
  282.  * freeing the old data.  */
  283. void
  284. re_set_registers(bufp, regs, num_regs, starts, ends)
  285.      struct re_pattern_buffer *bufp;
  286.      struct re_registers *regs;
  287.      unsigned num_regs;
  288.      regoff_t *starts, *ends;
  289. {
  290.     if (num_regs) {
  291. bufp->regs_allocated = REGS_REALLOCATE;
  292. regs->num_regs = num_regs;
  293. regs->start = starts;
  294. regs->end = ends;
  295.     } else {
  296. bufp->regs_allocated = REGS_UNALLOCATED;
  297. regs->num_regs = 0;
  298. regs->start = regs->end = (regoff_t) 0;
  299.     }
  300. }
  301. /* Searching routines.  */
  302. /* Like re_search_2, below, but only one string is specified, and
  303.  * doesn't let you say where to stop matching. */
  304. int
  305. re_search(bufp, string, size, startpos, range, regs)
  306.      struct re_pattern_buffer *bufp;
  307.      const char *string;
  308.      int size, startpos, range;
  309.      struct re_registers *regs;
  310. {
  311.     return re_search_2(bufp, NULL, 0, string, size, startpos, range,
  312. regs, size);
  313. }
  314. /* Using the compiled pattern in BUFP->buffer, first tries to match the
  315.  * virtual concatenation of STRING1 and STRING2, starting first at index
  316.  * STARTPOS, then at STARTPOS + 1, and so on.
  317.  * 
  318.  * STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
  319.  * 
  320.  * RANGE is how far to scan while trying to match.  RANGE = 0 means try
  321.  * only at STARTPOS; in general, the last start tried is STARTPOS +
  322.  * RANGE.
  323.  * 
  324.  * In REGS, return the indices of the virtual concatenation of STRING1
  325.  * and STRING2 that matched the entire BUFP->buffer and its contained
  326.  * subexpressions.
  327.  * 
  328.  * Do not consider matching one past the index STOP in the virtual
  329.  * concatenation of STRING1 and STRING2.
  330.  * 
  331.  * We return either the position in the strings at which the match was
  332.  * found, -1 if no match, or -2 if error (such as failure
  333.  * stack overflow).  */
  334. int
  335. re_search_2(bufp, string1, size1, string2, size2, startpos, range, regs, stop)
  336.      struct re_pattern_buffer *bufp;
  337.      const char *string1, *string2;
  338.      int size1, size2;
  339.      int startpos;
  340.      int range;
  341.      struct re_registers *regs;
  342.      int stop;
  343. {
  344.     int val;
  345.     register char *fastmap = bufp->fastmap;
  346.     register char *translate = bufp->translate;
  347.     int total_size = size1 + size2;
  348.     int endpos = startpos + range;
  349.     /* Check for out-of-range STARTPOS.  */
  350.     if (startpos < 0 || startpos > total_size)
  351. return -1;
  352.     /* Fix up RANGE if it might eventually take us outside
  353.      * the virtual concatenation of STRING1 and STRING2.  */
  354.     if (endpos < -1)
  355. range = -1 - startpos;
  356.     else if (endpos > total_size)
  357. range = total_size - startpos;
  358.     /* If the search isn't to be a backwards one, don't waste time in a
  359.      * search for a pattern that must be anchored.  */
  360.     if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0) {
  361. if (startpos > 0)
  362.     return -1;
  363. else
  364.     range = 1;
  365.     }
  366.     /* Update the fastmap now if not correct already.  */
  367.     if (fastmap && !bufp->fastmap_accurate)
  368. if (re_compile_fastmap(bufp) == -2)
  369.     return -2;
  370.     /* Loop through the string, looking for a place to start matching.  */
  371.     for (;;) {
  372. /* If a fastmap is supplied, skip quickly over characters that
  373.  * cannot be the start of a match.  If the pattern can match the
  374.  * null string, however, we don't need to skip characters; we want
  375.  * the first null string.  */
  376. if (fastmap && startpos < total_size && !bufp->can_be_null) {
  377.     if (range > 0) { /* Searching forwards.  */
  378. register const char *d;
  379. register int lim = 0;
  380. int irange = range;
  381. if (startpos < size1 && startpos + range >= size1)
  382.     lim = range - (size1 - startpos);
  383. d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
  384. /* Written out as an if-else to avoid testing `translate'
  385.  * inside the loop.  */
  386. if (translate)
  387.     while (range > lim
  388. && !fastmap[(unsigned char)
  389.     translate[(unsigned char) *d++]])
  390. range--;
  391. else
  392.     while (range > lim && !fastmap[(unsigned char) *d++])
  393. range--;
  394. startpos += irange - range;
  395.     } else { /* Searching backwards.  */
  396. register char c = (size1 == 0 || startpos >= size1
  397.     ? string2[startpos - size1]
  398.     : string1[startpos]);
  399. if (!fastmap[(unsigned char) TRANSLATE(c)])
  400.     goto advance;
  401.     }
  402. }
  403. /* If can't match the null string, and that's all we have left, fail.  */
  404. if (range >= 0 && startpos == total_size && fastmap
  405.     && !bufp->can_be_null)
  406.     return -1;
  407. val = re_match_2(bufp, string1, size1, string2, size2,
  408.     startpos, regs, stop);
  409. if (val >= 0)
  410.     return startpos;
  411. if (val == -2)
  412.     return -2;
  413.       advance:
  414. if (!range)
  415.     break;
  416. else if (range > 0) {
  417.     range--;
  418.     startpos++;
  419. } else {
  420.     range++;
  421.     startpos--;
  422. }
  423.     }
  424.     return -1;
  425. } /* re_search_2 */
  426. /* Declarations and macros for re_match_2.  */
  427. static int bcmp_translate();
  428. static boolean alt_match_null_string_p(), common_op_match_null_string_p(),
  429.         group_match_null_string_p();
  430. /* Structure for per-register (a.k.a. per-group) information.
  431.  * This must not be longer than one word, because we push this value
  432.  * onto the failure stack.  Other register information, such as the
  433.  * starting and ending positions (which are addresses), and the list of
  434.  * inner groups (which is a bits list) are maintained in separate
  435.  * variables.  
  436.  * 
  437.  * We are making a (strictly speaking) nonportable assumption here: that
  438.  * the compiler will pack our bit fields into something that fits into
  439.  * the type of `word', i.e., is something that fits into one item on the
  440.  * failure stack.  */
  441. typedef union {
  442.     fail_stack_elt_t word;
  443.     struct {
  444. /* This field is one if this group can match the empty string,
  445.  * zero if not.  If not yet determined,  `MATCH_NULL_UNSET_VALUE'.  */
  446. #define MATCH_NULL_UNSET_VALUE 3
  447. unsigned match_null_string_p:2;
  448. unsigned is_active:1;
  449. unsigned matched_something:1;
  450. unsigned ever_matched_something:1;
  451.     } bits;
  452. } register_info_type;
  453. #define REG_MATCH_NULL_STRING_P(R)  ((R).bits.match_null_string_p)
  454. #define IS_ACTIVE(R)  ((R).bits.is_active)
  455. #define MATCHED_SOMETHING(R)  ((R).bits.matched_something)
  456. #define EVER_MATCHED_SOMETHING(R)  ((R).bits.ever_matched_something)
  457. /* Call this when have matched a real character; it sets `matched' flags
  458.  * for the subexpressions which we are currently inside.  Also records
  459.  * that those subexprs have matched.  */
  460. #define SET_REGS_MATCHED()
  461.   do
  462.     {
  463.       unsigned r;
  464.       for (r = lowest_active_reg; r <= highest_active_reg; r++)
  465.         {
  466.           MATCHED_SOMETHING (reg_info[r])
  467.             = EVER_MATCHED_SOMETHING (reg_info[r])
  468.             = 1;
  469.         }
  470.     }
  471.   while (0)
  472. /* This converts PTR, a pointer into one of the search strings `string1'
  473.  * and `string2' into an offset from the beginning of that string.  */
  474. #define POINTER_TO_OFFSET(ptr)
  475.   (FIRST_STRING_P (ptr) ? (ptr) - string1 : (ptr) - string2 + size1)
  476. /* Registers are set to a sentinel when they haven't yet matched.  */
  477. #define REG_UNSET_VALUE ((char *) -1)
  478. #define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
  479. /* Macros for dealing with the split strings in re_match_2.  */
  480. #define MATCHING_IN_FIRST_STRING  (dend == end_match_1)
  481. /* Call before fetching a character with *d.  This switches over to
  482.  * string2 if necessary.  */
  483. #define PREFETCH()
  484.   while (d == dend)     
  485.     {
  486.       /* End of string2 => fail.  */
  487.       if (dend == end_match_2) 
  488.         goto fail;
  489.       /* End of string1 => advance to string2.  */ 
  490.       d = string2;         
  491.       dend = end_match_2;
  492.     }
  493. /* Test if at very beginning or at very end of the virtual concatenation
  494.  * of `string1' and `string2'.  If only one string, it's `string2'.  */
  495. #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
  496. #define AT_STRINGS_END(d) ((d) == end2)
  497. /* Test if D points to a character which is word-constituent.  We have
  498.  * two special cases to check for: if past the end of string1, look at
  499.  * the first character in string2; and if before the beginning of
  500.  * string2, look at the last character in string1.  */
  501. #define WORDCHAR_P(d)
  502.   (SYNTAX ((d) == end1 ? *string2
  503.            : (d) == string2 - 1 ? *(end1 - 1) : *(d))
  504.    == Sword)
  505. /* Test if the character before D and the one at D differ with respect
  506.  * to being word-constituent.  */
  507. #define AT_WORD_BOUNDARY(d)
  508.   (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)
  509.    || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
  510. /* Free everything we malloc.  */
  511. #ifdef REGEX_MALLOC
  512. #define FREE_VAR(var) if (var) free (var); var = NULL
  513. #define FREE_VARIABLES()
  514.   do {
  515.     FREE_VAR (fail_stack.stack);
  516.     FREE_VAR (regstart);
  517.     FREE_VAR (regend);
  518.     FREE_VAR (old_regstart);
  519.     FREE_VAR (old_regend);
  520.     FREE_VAR (best_regstart);
  521.     FREE_VAR (best_regend);
  522.     FREE_VAR (reg_info);
  523.     FREE_VAR (reg_dummy);
  524.     FREE_VAR (reg_info_dummy);
  525.   } while (0)
  526. #else /* not REGEX_MALLOC */
  527. /* Some MIPS systems (at least) want this to free alloca'd storage.  */
  528. #define FREE_VARIABLES() alloca (0)
  529. #endif /* not REGEX_MALLOC */
  530. /* These values must meet several constraints.  They must not be valid
  531.  * register values; since we have a limit of 255 registers (because
  532.  * we use only one byte in the pattern for the register number), we can
  533.  * use numbers larger than 255.  They must differ by 1, because of
  534.  * NUM_FAILURE_ITEMS above.  And the value for the lowest register must
  535.  * be larger than the value for the highest register, so we do not try
  536.  * to actually save any registers when none are active.  */
  537. #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
  538. #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
  539. /* Matching routines.  */
  540. #ifndef emacs /* Emacs never uses this.  */
  541. /* re_match is like re_match_2 except it takes only a single string.  */
  542. int
  543. re_match(bufp, string, size, pos, regs)
  544.      struct re_pattern_buffer *bufp;
  545.      const char *string;
  546.      int size, pos;
  547.      struct re_registers *regs;
  548. {
  549.     return re_match_2(bufp, NULL, 0, string, size, pos, regs, size);
  550. }
  551. #endif /* not emacs */
  552. /* re_match_2 matches the compiled pattern in BUFP against the
  553.  * the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
  554.  * and SIZE2, respectively).  We start matching at POS, and stop
  555.  * matching at STOP.
  556.  * 
  557.  * If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
  558.  * store offsets for the substring each group matched in REGS.  See the
  559.  * documentation for exactly how many groups we fill.
  560.  * 
  561.  * We return -1 if no match, -2 if an internal error (such as the
  562.  * failure stack overflowing).  Otherwise, we return the length of the
  563.  * matched substring.  */
  564. int
  565. re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop)
  566.      struct re_pattern_buffer *bufp;
  567.      const char *string1, *string2;
  568.      int size1, size2;
  569.      int pos;
  570.      struct re_registers *regs;
  571.      int stop;
  572. {
  573.     /* General temporaries.  */
  574.     int mcnt;
  575.     unsigned char *p1;
  576.     /* Just past the end of the corresponding string.  */
  577.     const char *end1, *end2;
  578.     /* Pointers into string1 and string2, just past the last characters in
  579.      * each to consider matching.  */
  580.     const char *end_match_1, *end_match_2;
  581.     /* Where we are in the data, and the end of the current string.  */
  582.     const char *d, *dend;
  583.     /* Where we are in the pattern, and the end of the pattern.  */
  584.     unsigned char *p = bufp->buffer;
  585.     register unsigned char *pend = p + bufp->used;
  586.     /* We use this to map every character in the string.  */
  587.     char *translate = bufp->translate;
  588.     /* Failure point stack.  Each place that can handle a failure further
  589.      * down the line pushes a failure point on this stack.  It consists of
  590.      * restart, regend, and reg_info for all registers corresponding to
  591.      * the subexpressions we're currently inside, plus the number of such
  592.      * registers, and, finally, two char *'s.  The first char * is where
  593.      * to resume scanning the pattern; the second one is where to resume
  594.      * scanning the strings.  If the latter is zero, the failure point is
  595.      * a ``dummy''; if a failure happens and the failure point is a dummy,
  596.      * it gets discarded and the next next one is tried.  */
  597.     fail_stack_type fail_stack;
  598. #ifdef DEBUG
  599.     static unsigned failure_id = 0;
  600.     unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
  601. #endif
  602.     /* We fill all the registers internally, independent of what we
  603.      * return, for use in backreferences.  The number here includes
  604.      * an element for register zero.  */
  605.     unsigned num_regs = bufp->re_nsub + 1;
  606.     /* The currently active registers.  */
  607.     unsigned long lowest_active_reg = NO_LOWEST_ACTIVE_REG;
  608.     unsigned long highest_active_reg = NO_HIGHEST_ACTIVE_REG;
  609.     /* Information on the contents of registers. These are pointers into
  610.      * the input strings; they record just what was matched (on this
  611.      * attempt) by a subexpression part of the pattern, that is, the
  612.      * regnum-th regstart pointer points to where in the pattern we began
  613.      * matching and the regnum-th regend points to right after where we
  614.      * stopped matching the regnum-th subexpression.  (The zeroth register
  615.      * keeps track of what the whole pattern matches.)  */
  616.     const char **regstart = NULL, **regend = NULL;
  617.     /* If a group that's operated upon by a repetition operator fails to
  618.      * match anything, then the register for its start will need to be
  619.      * restored because it will have been set to wherever in the string we
  620.      * are when we last see its open-group operator.  Similarly for a
  621.      * register's end.  */
  622.     const char **old_regstart = NULL, **old_regend = NULL;
  623.     /* The is_active field of reg_info helps us keep track of which (possibly
  624.      * nested) subexpressions we are currently in. The matched_something
  625.      * field of reg_info[reg_num] helps us tell whether or not we have
  626.      * matched any of the pattern so far this time through the reg_num-th
  627.      * subexpression.  These two fields get reset each time through any
  628.      * loop their register is in.  */
  629.     register_info_type *reg_info = NULL;
  630.     /* The following record the register info as found in the above
  631.      * variables when we find a match better than any we've seen before. 
  632.      * This happens as we backtrack through the failure points, which in
  633.      * turn happens only if we have not yet matched the entire string. */
  634.     unsigned best_regs_set = false;
  635.     const char **best_regstart = NULL, **best_regend = NULL;
  636.     /* Logically, this is `best_regend[0]'.  But we don't want to have to
  637.      * allocate space for that if we're not allocating space for anything
  638.      * else (see below).  Also, we never need info about register 0 for
  639.      * any of the other register vectors, and it seems rather a kludge to
  640.      * treat `best_regend' differently than the rest.  So we keep track of
  641.      * the end of the best match so far in a separate variable.  We
  642.      * initialize this to NULL so that when we backtrack the first time
  643.      * and need to test it, it's not garbage.  */
  644.     const char *match_end = NULL;
  645.     /* Used when we pop values we don't care about.  */
  646.     const char **reg_dummy = NULL;
  647.     register_info_type *reg_info_dummy = NULL;
  648. #ifdef DEBUG
  649.     /* Counts the total number of registers pushed.  */
  650.     unsigned num_regs_pushed = 0;
  651. #endif
  652.     DEBUG_PRINT1("nnEntering re_match_2.n");
  653.     INIT_FAIL_STACK();
  654.     /* Do not bother to initialize all the register variables if there are
  655.      * no groups in the pattern, as it takes a fair amount of time.  If
  656.      * there are groups, we include space for register 0 (the whole
  657.      * pattern), even though we never use it, since it simplifies the
  658.      * array indexing.  We should fix this.  */
  659.     if (bufp->re_nsub) {
  660. regstart = REGEX_TALLOC(num_regs, const char *);
  661. regend = REGEX_TALLOC(num_regs, const char *);
  662. old_regstart = REGEX_TALLOC(num_regs, const char *);
  663. old_regend = REGEX_TALLOC(num_regs, const char *);
  664. best_regstart = REGEX_TALLOC(num_regs, const char *);
  665. best_regend = REGEX_TALLOC(num_regs, const char *);
  666. reg_info = REGEX_TALLOC(num_regs, register_info_type);
  667. reg_dummy = REGEX_TALLOC(num_regs, const char *);
  668. reg_info_dummy = REGEX_TALLOC(num_regs, register_info_type);
  669. if (!(regstart && regend && old_regstart && old_regend && reg_info
  670. && best_regstart && best_regend && reg_dummy && reg_info_dummy)) {
  671.     FREE_VARIABLES();
  672.     return -2;
  673. }
  674.     }
  675. #ifdef REGEX_MALLOC
  676.     else {
  677. /* We must initialize all our variables to NULL, so that
  678.  * `FREE_VARIABLES' doesn't try to free them.  */
  679. regstart = regend = old_regstart = old_regend = best_regstart
  680.     = best_regend = reg_dummy = NULL;
  681. reg_info = reg_info_dummy = (register_info_type *) NULL;
  682.     }
  683. #endif /* REGEX_MALLOC */
  684.     /* The starting position is bogus.  */
  685.     if (pos < 0 || pos > size1 + size2) {
  686. FREE_VARIABLES();
  687. return -1;
  688.     }
  689.     /* Initialize subexpression text positions to -1 to mark ones that no
  690.      * start_memory/stop_memory has been seen for. Also initialize the
  691.      * register information struct.  */
  692.     for (mcnt = 1; mcnt < num_regs; mcnt++) {
  693. regstart[mcnt] = regend[mcnt]
  694.     = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
  695. REG_MATCH_NULL_STRING_P(reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
  696. IS_ACTIVE(reg_info[mcnt]) = 0;
  697. MATCHED_SOMETHING(reg_info[mcnt]) = 0;
  698. EVER_MATCHED_SOMETHING(reg_info[mcnt]) = 0;
  699.     }
  700.     /* We move `string1' into `string2' if the latter's empty -- but not if
  701.      * `string1' is null.  */
  702.     if (size2 == 0 && string1 != NULL) {
  703. string2 = string1;
  704. size2 = size1;
  705. string1 = 0;
  706. size1 = 0;
  707.     }
  708.     end1 = string1 + size1;
  709.     end2 = string2 + size2;
  710.     /* Compute where to stop matching, within the two strings.  */
  711.     if (stop <= size1) {
  712. end_match_1 = string1 + stop;
  713. end_match_2 = string2;
  714.     } else {
  715. end_match_1 = end1;
  716. end_match_2 = string2 + stop - size1;
  717.     }
  718.     /* `p' scans through the pattern as `d' scans through the data. 
  719.      * `dend' is the end of the input string that `d' points within.  `d'
  720.      * is advanced into the following input string whenever necessary, but
  721.      * this happens before fetching; therefore, at the beginning of the
  722.      * loop, `d' can be pointing at the end of a string, but it cannot
  723.      * equal `string2'.  */
  724.     if (size1 > 0 && pos <= size1) {
  725. d = string1 + pos;
  726. dend = end_match_1;
  727.     } else {
  728. d = string2 + pos - size1;
  729. dend = end_match_2;
  730.     }
  731.     DEBUG_PRINT1("The compiled pattern is: ");
  732.     DEBUG_PRINT_COMPILED_PATTERN(bufp, p, pend);
  733.     DEBUG_PRINT1("The string to match is: `");
  734.     DEBUG_PRINT_DOUBLE_STRING(d, string1, size1, string2, size2);
  735.     DEBUG_PRINT1("'n");
  736.     /* This loops over pattern commands.  It exits by returning from the
  737.      * function if the match is complete, or it drops through if the match
  738.      * fails at this starting point in the input data.  */
  739.     for (;;) {
  740. DEBUG_PRINT2("n0x%x: ", p);
  741. if (p == pend) { /* End of pattern means we might have succeeded.  */
  742.     DEBUG_PRINT1("end of pattern ... ");
  743.     /* If we haven't matched the entire string, and we want the
  744.      * longest match, try backtracking.  */
  745.     if (d != end_match_2) {
  746. DEBUG_PRINT1("backtracking.n");
  747. if (!FAIL_STACK_EMPTY()) { /* More failure points to try.  */
  748.     boolean same_str_p = (FIRST_STRING_P(match_end)
  749. == MATCHING_IN_FIRST_STRING);
  750.     /* If exceeds best match so far, save it.  */
  751.     if (!best_regs_set
  752. || (same_str_p && d > match_end)
  753. || (!same_str_p && !MATCHING_IN_FIRST_STRING)) {
  754. best_regs_set = true;
  755. match_end = d;
  756. DEBUG_PRINT1("nSAVING match as best so far.n");
  757. for (mcnt = 1; mcnt < num_regs; mcnt++) {
  758.     best_regstart[mcnt] = regstart[mcnt];
  759.     best_regend[mcnt] = regend[mcnt];
  760. }
  761.     }
  762.     goto fail;
  763. }
  764. /* If no failure points, don't restore garbage.  */
  765. else if (best_regs_set) {
  766.   restore_best_regs:
  767.     /* Restore best match.  It may happen that `dend ==
  768.      * end_match_1' while the restored d is in string2.
  769.      * For example, the pattern `x.*y.*z' against the
  770.      * strings `x-' and `y-z-', if the two strings are
  771.      * not consecutive in memory.  */
  772.     DEBUG_PRINT1("Restoring best registers.n");
  773.     d = match_end;
  774.     dend = ((d >= string1 && d <= end1)
  775. ? end_match_1 : end_match_2);
  776.     for (mcnt = 1; mcnt < num_regs; mcnt++) {
  777. regstart[mcnt] = best_regstart[mcnt];
  778. regend[mcnt] = best_regend[mcnt];
  779.     }
  780. }
  781.     } /* d != end_match_2 */
  782.     DEBUG_PRINT1("Accepting match.n");
  783.     /* If caller wants register contents data back, do it.  */
  784.     if (regs && !bufp->no_sub) {
  785. /* Have the register data arrays been allocated?  */
  786. if (bufp->regs_allocated == REGS_UNALLOCATED) { /* No.  So allocate them with malloc.  We need one
  787.  * extra element beyond `num_regs' for the `-1' marker
  788.  * GNU code uses.  */
  789.     regs->num_regs = MAX(RE_NREGS, num_regs + 1);
  790.     regs->start = TALLOC(regs->num_regs, regoff_t);
  791.     regs->end = TALLOC(regs->num_regs, regoff_t);
  792.     if (regs->start == NULL || regs->end == NULL)
  793. return -2;
  794.     bufp->regs_allocated = REGS_REALLOCATE;
  795. } else if (bufp->regs_allocated == REGS_REALLOCATE) { /* Yes.  If we need more elements than were already
  796.  * allocated, reallocate them.  If we need fewer, just
  797.  * leave it alone.  */
  798.     if (regs->num_regs < num_regs + 1) {
  799. regs->num_regs = num_regs + 1;
  800. RETALLOC(regs->start, regs->num_regs, regoff_t);
  801. RETALLOC(regs->end, regs->num_regs, regoff_t);
  802. if (regs->start == NULL || regs->end == NULL)
  803.     return -2;
  804.     }
  805. } else
  806.     assert(bufp->regs_allocated == REGS_FIXED);
  807. /* Convert the pointer data in `regstart' and `regend' to
  808.  * indices.  Register zero has to be set differently,
  809.  * since we haven't kept track of any info for it.  */
  810. if (regs->num_regs > 0) {
  811.     regs->start[0] = pos;
  812.     regs->end[0] = (MATCHING_IN_FIRST_STRING ? d - string1
  813. : d - string2 + size1);
  814. }
  815. /* Go through the first `min (num_regs, regs->num_regs)'
  816.  * registers, since that is all we initialized.  */
  817. for (mcnt = 1; mcnt < MIN(num_regs, regs->num_regs); mcnt++) {
  818.     if (REG_UNSET(regstart[mcnt]) || REG_UNSET(regend[mcnt]))
  819. regs->start[mcnt] = regs->end[mcnt] = -1;
  820.     else {
  821. regs->start[mcnt] = POINTER_TO_OFFSET(regstart[mcnt]);
  822. regs->end[mcnt] = POINTER_TO_OFFSET(regend[mcnt]);
  823.     }
  824. }
  825. /* If the regs structure we return has more elements than
  826.  * were in the pattern, set the extra elements to -1.  If
  827.  * we (re)allocated the registers, this is the case,
  828.  * because we always allocate enough to have at least one
  829.  * -1 at the end.  */
  830. for (mcnt = num_regs; mcnt < regs->num_regs; mcnt++)
  831.     regs->start[mcnt] = regs->end[mcnt] = -1;
  832.     } /* regs && !bufp->no_sub */
  833.     FREE_VARIABLES();
  834.     DEBUG_PRINT4("%u failure points pushed, %u popped (%u remain).n",
  835. nfailure_points_pushed, nfailure_points_popped,
  836. nfailure_points_pushed - nfailure_points_popped);
  837.     DEBUG_PRINT2("%u registers pushed.n", num_regs_pushed);
  838.     mcnt = d - pos - (MATCHING_IN_FIRST_STRING
  839. ? string1
  840. : string2 - size1);
  841.     DEBUG_PRINT2("Returning %d from re_match_2.n", mcnt);
  842.     return mcnt;
  843. }
  844. /* Otherwise match next pattern command.  */
  845. #ifdef SWITCH_ENUM_BUG
  846. switch ((int) ((re_opcode_t) * p++))
  847. #else
  848. switch ((re_opcode_t) * p++)
  849. #endif
  850. {
  851.     /* Ignore these.  Used to ignore the n of succeed_n's which
  852.      * currently have n == 0.  */
  853. case no_op:
  854.     DEBUG_PRINT1("EXECUTING no_op.n");
  855.     break;
  856.     /* Match the next n pattern characters exactly.  The following
  857.      * byte in the pattern defines n, and the n bytes after that
  858.      * are the characters to match.  */
  859. case exactn:
  860.     mcnt = *p++;
  861.     DEBUG_PRINT2("EXECUTING exactn %d.n", mcnt);
  862.     /* This is written out as an if-else so we don't waste time
  863.      * testing `translate' inside the loop.  */
  864.     if (translate) {
  865. do {
  866.     PREFETCH();
  867.     if (translate[(unsigned char) *d++] != (char) *p++)
  868. goto fail;
  869. }
  870. while (--mcnt);
  871.     } else {
  872. do {
  873.     PREFETCH();
  874.     if (*d++ != (char) *p++)
  875. goto fail;
  876. }
  877. while (--mcnt);
  878.     }
  879.     SET_REGS_MATCHED();
  880.     break;
  881.     /* Match any character except possibly a newline or a null.  */
  882. case anychar:
  883.     DEBUG_PRINT1("EXECUTING anychar.n");
  884.     PREFETCH();
  885.     if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE(*d) == 'n')
  886. || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE(*d) == '00'))
  887. goto fail;
  888.     SET_REGS_MATCHED();
  889.     DEBUG_PRINT2("  Matched `%d'.n", *d);
  890.     d++;
  891.     break;
  892. case charset:
  893. case charset_not:
  894.     {
  895. register unsigned char c;
  896. boolean not = (re_opcode_t) * (p - 1) == charset_not;
  897. DEBUG_PRINT2("EXECUTING charset%s.n", not ? "_not" : "");
  898. PREFETCH();
  899. c = TRANSLATE(*d); /* The character to match.  */
  900. /* Cast to `unsigned' instead of `unsigned char' in case the
  901.  * bit list is a full 32 bytes long.  */
  902. if (c < (unsigned) (*p * BYTEWIDTH)
  903.     && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
  904.     not = !not;
  905. p += 1 + *p;
  906. if (!not)
  907.     goto fail;
  908. SET_REGS_MATCHED();
  909. d++;
  910. break;
  911.     }
  912.     /* The beginning of a group is represented by start_memory.
  913.      * The arguments are the register number in the next byte, and the
  914.      * number of groups inner to this one in the next.  The text
  915.      * matched within the group is recorded (in the internal
  916.      * registers data structure) under the register number.  */
  917. case start_memory:
  918.     DEBUG_PRINT3("EXECUTING start_memory %d (%d):n", *p, p[1]);
  919.     /* Find out if this group can match the empty string.  */
  920.     p1 = p; /* To send to group_match_null_string_p.  */
  921.     if (REG_MATCH_NULL_STRING_P(reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
  922. REG_MATCH_NULL_STRING_P(reg_info[*p])
  923.     = group_match_null_string_p(&p1, pend, reg_info);
  924.     /* Save the position in the string where we were the last time
  925.      * we were at this open-group operator in case the group is
  926.      * operated upon by a repetition operator, e.g., with `(a*)*b'
  927.      * against `ab'; then we want to ignore where we are now in
  928.      * the string in case this attempt to match fails.  */
  929.     old_regstart[*p] = REG_MATCH_NULL_STRING_P(reg_info[*p])
  930. ? REG_UNSET(regstart[*p]) ? d : regstart[*p]
  931. : regstart[*p];
  932.     DEBUG_PRINT2("  old_regstart: %dn",
  933. POINTER_TO_OFFSET(old_regstart[*p]));
  934.     regstart[*p] = d;
  935.     DEBUG_PRINT2("  regstart: %dn", POINTER_TO_OFFSET(regstart[*p]));
  936.     IS_ACTIVE(reg_info[*p]) = 1;
  937.     MATCHED_SOMETHING(reg_info[*p]) = 0;
  938.     /* This is the new highest active register.  */
  939.     highest_active_reg = *p;
  940.     /* If nothing was active before, this is the new lowest active
  941.      * register.  */
  942.     if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
  943. lowest_active_reg = *p;
  944.     /* Move past the register number and inner group count.  */
  945.     p += 2;
  946.     break;
  947.     /* The stop_memory opcode represents the end of a group.  Its
  948.      * arguments are the same as start_memory's: the register
  949.      * number, and the number of inner groups.  */
  950. case stop_memory:
  951.     DEBUG_PRINT3("EXECUTING stop_memory %d (%d):n", *p, p[1]);
  952.     /* We need to save the string position the last time we were at
  953.      * this close-group operator in case the group is operated
  954.      * upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
  955.      * against `aba'; then we want to ignore where we are now in
  956.      * the string in case this attempt to match fails.  */
  957.     old_regend[*p] = REG_MATCH_NULL_STRING_P(reg_info[*p])
  958. ? REG_UNSET(regend[*p]) ? d : regend[*p]
  959. : regend[*p];
  960.     DEBUG_PRINT2("      old_regend: %dn",
  961. POINTER_TO_OFFSET(old_regend[*p]));
  962.     regend[*p] = d;
  963.     DEBUG_PRINT2("      regend: %dn", POINTER_TO_OFFSET(regend[*p]));
  964.     /* This register isn't active anymore.  */
  965.     IS_ACTIVE(reg_info[*p]) = 0;
  966.     /* If this was the only register active, nothing is active
  967.      * anymore.  */
  968.     if (lowest_active_reg == highest_active_reg) {
  969. lowest_active_reg = NO_LOWEST_ACTIVE_REG;
  970. highest_active_reg = NO_HIGHEST_ACTIVE_REG;
  971.     } else { /* We must scan for the new highest active register, since
  972.  * it isn't necessarily one less than now: consider
  973.  * (a(b)c(d(e)f)g).  When group 3 ends, after the f), the
  974.  * new highest active register is 1.  */
  975. unsigned char r = *p - 1;
  976. while (r > 0 && !IS_ACTIVE(reg_info[r]))
  977.     r--;
  978. /* If we end up at register zero, that means that we saved
  979.  * the registers as the result of an `on_failure_jump', not
  980.  * a `start_memory', and we jumped to past the innermost
  981.  * `stop_memory'.  For example, in ((.)*) we save
  982.  * registers 1 and 2 as a result of the *, but when we pop
  983.  * back to the second ), we are at the stop_memory 1.
  984.  * Thus, nothing is active.  */
  985. if (r == 0) {
  986.     lowest_active_reg = NO_LOWEST_ACTIVE_REG;
  987.     highest_active_reg = NO_HIGHEST_ACTIVE_REG;
  988. } else
  989.     highest_active_reg = r;
  990.     }
  991.     /* If just failed to match something this time around with a
  992.      * group that's operated on by a repetition operator, try to
  993.      * force exit from the ``loop'', and restore the register
  994.      * information for this group that we had before trying this
  995.      * last match.  */
  996.     if ((!MATCHED_SOMETHING(reg_info[*p])
  997.     || (re_opcode_t) p[-3] == start_memory)
  998. && (p + 2) < pend) {
  999. boolean is_a_jump_n = false;
  1000. p1 = p + 2;
  1001. mcnt = 0;
  1002. switch ((re_opcode_t) * p1++) {
  1003. case jump_n:
  1004.     is_a_jump_n = true;
  1005. case pop_failure_jump:
  1006. case maybe_pop_jump:
  1007. case jump:
  1008. case dummy_failure_jump:
  1009.     EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1010.     if (is_a_jump_n)
  1011. p1 += 2;
  1012.     break;
  1013. default:
  1014.     /* do nothing */ ;
  1015. }
  1016. p1 += mcnt;
  1017. /* If the next operation is a jump backwards in the pattern
  1018.  * to an on_failure_jump right before the start_memory
  1019.  * corresponding to this stop_memory, exit from the loop
  1020.  * by forcing a failure after pushing on the stack the
  1021.  * on_failure_jump's jump in the pattern, and d.  */
  1022. if (mcnt < 0 && (re_opcode_t) * p1 == on_failure_jump
  1023.     && (re_opcode_t) p1[3] == start_memory && p1[4] == *p) {
  1024.     /* If this group ever matched anything, then restore
  1025.      * what its registers were before trying this last
  1026.      * failed match, e.g., with `(a*)*b' against `ab' for
  1027.      * regstart[1], and, e.g., with `((a*)*(b*)*)*'
  1028.      * against `aba' for regend[3].
  1029.      * 
  1030.      * Also restore the registers for inner groups for,
  1031.      * e.g., `((a*)(b*))*' against `aba' (register 3 would
  1032.      * otherwise get trashed).  */
  1033.     if (EVER_MATCHED_SOMETHING(reg_info[*p])) {
  1034. unsigned r;
  1035. EVER_MATCHED_SOMETHING(reg_info[*p]) = 0;
  1036. /* Restore this and inner groups' (if any) registers.  */
  1037. for (r = *p; r < *p + *(p + 1); r++) {
  1038.     regstart[r] = old_regstart[r];
  1039.     /* xx why this test?  */
  1040.     if ((long) old_regend[r] >= (long) regstart[r])
  1041. regend[r] = old_regend[r];
  1042. }
  1043.     }
  1044.     p1++;
  1045.     EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1046.     PUSH_FAILURE_POINT(p1 + mcnt, d, -2);
  1047.     goto fail;
  1048. }
  1049.     }
  1050.     /* Move past the register number and the inner group count.  */
  1051.     p += 2;
  1052.     break;
  1053.     /* <digit> has been turned into a `duplicate' command which is
  1054.      * followed by the numeric value of <digit> as the register number.  */
  1055. case duplicate:
  1056.     {
  1057. register const char *d2, *dend2;
  1058. int regno = *p++; /* Get which register to match against.  */
  1059. DEBUG_PRINT2("EXECUTING duplicate %d.n", regno);
  1060. /* Can't back reference a group which we've never matched.  */
  1061. if (REG_UNSET(regstart[regno]) || REG_UNSET(regend[regno]))
  1062.     goto fail;
  1063. /* Where in input to try to start matching.  */
  1064. d2 = regstart[regno];
  1065. /* Where to stop matching; if both the place to start and
  1066.  * the place to stop matching are in the same string, then
  1067.  * set to the place to stop, otherwise, for now have to use
  1068.  * the end of the first string.  */
  1069. dend2 = ((FIRST_STRING_P(regstart[regno])
  1070. == FIRST_STRING_P(regend[regno]))
  1071.     ? regend[regno] : end_match_1);
  1072. for (;;) {
  1073.     /* If necessary, advance to next segment in register
  1074.      * contents.  */
  1075.     while (d2 == dend2) {
  1076. if (dend2 == end_match_2)
  1077.     break;
  1078. if (dend2 == regend[regno])
  1079.     break;
  1080. /* End of string1 => advance to string2. */
  1081. d2 = string2;
  1082. dend2 = regend[regno];
  1083.     }
  1084.     /* At end of register contents => success */
  1085.     if (d2 == dend2)
  1086. break;
  1087.     /* If necessary, advance to next segment in data.  */
  1088.     PREFETCH();
  1089.     /* How many characters left in this segment to match.  */
  1090.     mcnt = dend - d;
  1091.     /* Want how many consecutive characters we can match in
  1092.      * one shot, so, if necessary, adjust the count.  */
  1093.     if (mcnt > dend2 - d2)
  1094. mcnt = dend2 - d2;
  1095.     /* Compare that many; failure if mismatch, else move
  1096.      * past them.  */
  1097.     if (translate
  1098. ? bcmp_translate(d, d2, mcnt, translate)
  1099. : memcmp(d, d2, mcnt))
  1100. goto fail;
  1101.     d += mcnt, d2 += mcnt;
  1102. }
  1103.     }
  1104.     break;
  1105.     /* begline matches the empty string at the beginning of the string
  1106.      * (unless `not_bol' is set in `bufp'), and, if
  1107.      * `newline_anchor' is set, after newlines.  */
  1108. case begline:
  1109.     DEBUG_PRINT1("EXECUTING begline.n");
  1110.     if (AT_STRINGS_BEG(d)) {
  1111. if (!bufp->not_bol)
  1112.     break;
  1113.     } else if (d[-1] == 'n' && bufp->newline_anchor) {
  1114. break;
  1115.     }
  1116.     /* In all other cases, we fail.  */
  1117.     goto fail;
  1118.     /* endline is the dual of begline.  */
  1119. case endline:
  1120.     DEBUG_PRINT1("EXECUTING endline.n");
  1121.     if (AT_STRINGS_END(d)) {
  1122. if (!bufp->not_eol)
  1123.     break;
  1124.     }
  1125.     /* We have to ``prefetch'' the next character.  */
  1126.     else if ((d == end1 ? *string2 : *d) == 'n'
  1127. && bufp->newline_anchor) {
  1128. break;
  1129.     }
  1130.     goto fail;
  1131.     /* Match at the very beginning of the data.  */
  1132. case begbuf:
  1133.     DEBUG_PRINT1("EXECUTING begbuf.n");
  1134.     if (AT_STRINGS_BEG(d))
  1135. break;
  1136.     goto fail;
  1137.     /* Match at the very end of the data.  */
  1138. case endbuf:
  1139.     DEBUG_PRINT1("EXECUTING endbuf.n");
  1140.     if (AT_STRINGS_END(d))
  1141. break;
  1142.     goto fail;
  1143.     /* on_failure_keep_string_jump is used to optimize `.*n'.  It
  1144.      * pushes NULL as the value for the string on the stack.  Then
  1145.      * `pop_failure_point' will keep the current value for the
  1146.      * string, instead of restoring it.  To see why, consider
  1147.      * matching `foonbar' against `.*n'.  The .* matches the foo;
  1148.      * then the . fails against the n.  But the next thing we want
  1149.      * to do is match the n against the n; if we restored the
  1150.      * string value, we would be back at the foo.
  1151.      * 
  1152.      * Because this is used only in specific cases, we don't need to
  1153.      * check all the things that `on_failure_jump' does, to make
  1154.      * sure the right things get saved on the stack.  Hence we don't
  1155.      * share its code.  The only reason to push anything on the
  1156.      * stack at all is that otherwise we would have to change
  1157.      * `anychar's code to do something besides goto fail in this
  1158.      * case; that seems worse than this.  */
  1159. case on_failure_keep_string_jump:
  1160.     DEBUG_PRINT1("EXECUTING on_failure_keep_string_jump");
  1161.     EXTRACT_NUMBER_AND_INCR(mcnt, p);
  1162.     DEBUG_PRINT3(" %d (to 0x%x):n", mcnt, p + mcnt);
  1163.     PUSH_FAILURE_POINT(p + mcnt, NULL, -2);
  1164.     break;
  1165.     /* Uses of on_failure_jump:
  1166.      * 
  1167.      * Each alternative starts with an on_failure_jump that points
  1168.      * to the beginning of the next alternative.  Each alternative
  1169.      * except the last ends with a jump that in effect jumps past
  1170.      * the rest of the alternatives.  (They really jump to the
  1171.      * ending jump of the following alternative, because tensioning
  1172.      * these jumps is a hassle.)
  1173.      * 
  1174.      * Repeats start with an on_failure_jump that points past both
  1175.      * the repetition text and either the following jump or
  1176.      * pop_failure_jump back to this on_failure_jump.  */
  1177. case on_failure_jump:
  1178.   on_failure:
  1179.     DEBUG_PRINT1("EXECUTING on_failure_jump");
  1180.     EXTRACT_NUMBER_AND_INCR(mcnt, p);
  1181.     DEBUG_PRINT3(" %d (to 0x%x)", mcnt, p + mcnt);
  1182.     /* If this on_failure_jump comes right before a group (i.e.,
  1183.      * the original * applied to a group), save the information
  1184.      * for that group and all inner ones, so that if we fail back
  1185.      * to this point, the group's information will be correct.
  1186.      * For example, in (a*)*1, we need the preceding group,
  1187.      * and in ((a*)b*)2, we need the inner group.  */
  1188.     /* We can't use `p' to check ahead because we push
  1189.      * a failure point to `p + mcnt' after we do this.  */
  1190.     p1 = p;
  1191.     /* We need to skip no_op's before we look for the
  1192.      * start_memory in case this on_failure_jump is happening as
  1193.      * the result of a completed succeed_n, as in (a){1,3}b1
  1194.      * against aba.  */
  1195.     while (p1 < pend && (re_opcode_t) * p1 == no_op)
  1196. p1++;
  1197.     if (p1 < pend && (re_opcode_t) * p1 == start_memory) {
  1198. /* We have a new highest active register now.  This will
  1199.  * get reset at the start_memory we are about to get to,
  1200.  * but we will have saved all the registers relevant to
  1201.  * this repetition op, as described above.  */
  1202. highest_active_reg = *(p1 + 1) + *(p1 + 2);
  1203. if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
  1204.     lowest_active_reg = *(p1 + 1);
  1205.     }
  1206.     DEBUG_PRINT1(":n");
  1207.     PUSH_FAILURE_POINT(p + mcnt, d, -2);
  1208.     break;
  1209.     /* A smart repeat ends with `maybe_pop_jump'.
  1210.      * We change it to either `pop_failure_jump' or `jump'.  */
  1211. case maybe_pop_jump:
  1212.     EXTRACT_NUMBER_AND_INCR(mcnt, p);
  1213.     DEBUG_PRINT2("EXECUTING maybe_pop_jump %d.n", mcnt);
  1214.     {
  1215. register unsigned char *p2 = p;
  1216. /* Compare the beginning of the repeat with what in the
  1217.  * pattern follows its end. If we can establish that there
  1218.  * is nothing that they would both match, i.e., that we
  1219.  * would have to backtrack because of (as in, e.g., `a*a')
  1220.  * then we can change to pop_failure_jump, because we'll
  1221.  * never have to backtrack.
  1222.  * 
  1223.  * This is not true in the case of alternatives: in
  1224.  * `(a|ab)*' we do need to backtrack to the `ab' alternative
  1225.  * (e.g., if the string was `ab').  But instead of trying to
  1226.  * detect that here, the alternative has put on a dummy
  1227.  * failure point which is what we will end up popping.  */
  1228. /* Skip over open/close-group commands.  */
  1229. while (p2 + 2 < pend
  1230.     && ((re_opcode_t) * p2 == stop_memory
  1231. || (re_opcode_t) * p2 == start_memory))
  1232.     p2 += 3; /* Skip over args, too.  */
  1233. /* If we're at the end of the pattern, we can change.  */
  1234. if (p2 == pend) {
  1235.     /* Consider what happens when matching ":(.*)"
  1236.      * against ":/".  I don't really understand this code
  1237.      * yet.  */
  1238.     p[-3] = (unsigned char) pop_failure_jump;
  1239.     DEBUG_PRINT1
  1240. ("  End of pattern: change to `pop_failure_jump'.n");
  1241. } else if ((re_opcode_t) * p2 == exactn
  1242.     || (bufp->newline_anchor && (re_opcode_t) * p2 == endline)) {
  1243.     register unsigned char c
  1244.     = *p2 == (unsigned char) endline ? 'n' : p2[2];
  1245.     p1 = p + mcnt;
  1246.     /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
  1247.      * to the `maybe_finalize_jump' of this case.  Examine what 
  1248.      * follows.  */
  1249.     if ((re_opcode_t) p1[3] == exactn && p1[5] != c) {
  1250. p[-3] = (unsigned char) pop_failure_jump;
  1251. DEBUG_PRINT3("  %c != %c => pop_failure_jump.n",
  1252.     c, p1[5]);
  1253.     } else if ((re_opcode_t) p1[3] == charset
  1254. || (re_opcode_t) p1[3] == charset_not) {
  1255. int not = (re_opcode_t) p1[3] == charset_not;
  1256. if (c < (unsigned char) (p1[4] * BYTEWIDTH)
  1257.     && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
  1258.     not = !not;
  1259. /* `not' is equal to 1 if c would match, which means
  1260.  * that we can't change to pop_failure_jump.  */
  1261. if (!not) {
  1262.     p[-3] = (unsigned char) pop_failure_jump;
  1263.     DEBUG_PRINT1("  No match => pop_failure_jump.n");
  1264. }
  1265.     }
  1266. }
  1267.     }
  1268.     p -= 2; /* Point at relative address again.  */
  1269.     if ((re_opcode_t) p[-1] != pop_failure_jump) {
  1270. p[-1] = (unsigned char) jump;
  1271. DEBUG_PRINT1("  Match => jump.n");
  1272. goto unconditional_jump;
  1273.     }
  1274.     /* Note fall through.  */
  1275.     /* The end of a simple repeat has a pop_failure_jump back to
  1276.      * its matching on_failure_jump, where the latter will push a
  1277.      * failure point.  The pop_failure_jump takes off failure
  1278.      * points put on by this pop_failure_jump's matching
  1279.      * on_failure_jump; we got through the pattern to here from the
  1280.      * matching on_failure_jump, so didn't fail.  */
  1281. case pop_failure_jump:
  1282.     {
  1283. /* We need to pass separate storage for the lowest and
  1284.  * highest registers, even though we don't care about the
  1285.  * actual values.  Otherwise, we will restore only one
  1286.  * register from the stack, since lowest will == highest in
  1287.  * `pop_failure_point'.  */
  1288. unsigned long dummy_low_reg, dummy_high_reg;
  1289. unsigned char *pdummy;
  1290. const char *sdummy;
  1291. DEBUG_PRINT1("EXECUTING pop_failure_jump.n");
  1292. POP_FAILURE_POINT(sdummy, pdummy,
  1293.     dummy_low_reg, dummy_high_reg,
  1294.     reg_dummy, reg_dummy, reg_info_dummy);
  1295.     }
  1296.     /* Note fall through.  */
  1297.     /* Unconditionally jump (without popping any failure points).  */
  1298. case jump:
  1299.   unconditional_jump:
  1300.     EXTRACT_NUMBER_AND_INCR(mcnt, p); /* Get the amount to jump.  */
  1301.     DEBUG_PRINT2("EXECUTING jump %d ", mcnt);
  1302.     p += mcnt; /* Do the jump.  */
  1303.     DEBUG_PRINT2("(to 0x%x).n", p);
  1304.     break;
  1305.     /* We need this opcode so we can detect where alternatives end
  1306.      * in `group_match_null_string_p' et al.  */
  1307. case jump_past_alt:
  1308.     DEBUG_PRINT1("EXECUTING jump_past_alt.n");
  1309.     goto unconditional_jump;
  1310.     /* Normally, the on_failure_jump pushes a failure point, which
  1311.      * then gets popped at pop_failure_jump.  We will end up at
  1312.      * pop_failure_jump, also, and with a pattern of, say, `a+', we
  1313.      * are skipping over the on_failure_jump, so we have to push
  1314.      * something meaningless for pop_failure_jump to pop.  */
  1315. case dummy_failure_jump:
  1316.     DEBUG_PRINT1("EXECUTING dummy_failure_jump.n");
  1317.     /* It doesn't matter what we push for the string here.  What
  1318.      * the code at `fail' tests is the value for the pattern.  */
  1319.     PUSH_FAILURE_POINT(0, 0, -2);
  1320.     goto unconditional_jump;
  1321.     /* At the end of an alternative, we need to push a dummy failure
  1322.      * point in case we are followed by a `pop_failure_jump', because
  1323.      * we don't want the failure point for the alternative to be
  1324.      * popped.  For example, matching `(a|ab)*' against `aab'
  1325.      * requires that we match the `ab' alternative.  */
  1326. case push_dummy_failure:
  1327.     DEBUG_PRINT1("EXECUTING push_dummy_failure.n");
  1328.     /* See comments just above at `dummy_failure_jump' about the
  1329.      * two zeroes.  */
  1330.     PUSH_FAILURE_POINT(0, 0, -2);
  1331.     break;
  1332.     /* Have to succeed matching what follows at least n times.
  1333.      * After that, handle like `on_failure_jump'.  */
  1334. case succeed_n:
  1335.     EXTRACT_NUMBER(mcnt, p + 2);
  1336.     DEBUG_PRINT2("EXECUTING succeed_n %d.n", mcnt);
  1337.     assert(mcnt >= 0);
  1338.     /* Originally, this is how many times we HAVE to succeed.  */
  1339.     if (mcnt > 0) {
  1340. mcnt--;
  1341. p += 2;
  1342. STORE_NUMBER_AND_INCR(p, mcnt);
  1343. DEBUG_PRINT3("  Setting 0x%x to %d.n", p, mcnt);
  1344.     } else if (mcnt == 0) {
  1345. DEBUG_PRINT2("  Setting two bytes from 0x%x to no_op.n", p + 2);
  1346. p[2] = (unsigned char) no_op;
  1347. p[3] = (unsigned char) no_op;
  1348. goto on_failure;
  1349.     }
  1350.     break;
  1351. case jump_n:
  1352.     EXTRACT_NUMBER(mcnt, p + 2);
  1353.     DEBUG_PRINT2("EXECUTING jump_n %d.n", mcnt);
  1354.     /* Originally, this is how many times we CAN jump.  */
  1355.     if (mcnt) {
  1356. mcnt--;
  1357. STORE_NUMBER(p + 2, mcnt);
  1358. goto unconditional_jump;
  1359.     }
  1360.     /* If don't have to jump any more, skip over the rest of command.  */
  1361.     else
  1362. p += 4;
  1363.     break;
  1364. case set_number_at:
  1365.     {
  1366. DEBUG_PRINT1("EXECUTING set_number_at.n");
  1367. EXTRACT_NUMBER_AND_INCR(mcnt, p);
  1368. p1 = p + mcnt;
  1369. EXTRACT_NUMBER_AND_INCR(mcnt, p);
  1370. DEBUG_PRINT3("  Setting 0x%x to %d.n", p1, mcnt);
  1371. STORE_NUMBER(p1, mcnt);
  1372. break;
  1373.     }
  1374. case wordbound:
  1375.     DEBUG_PRINT1("EXECUTING wordbound.n");
  1376.     if (AT_WORD_BOUNDARY(d))
  1377. break;
  1378.     goto fail;
  1379. case notwordbound:
  1380.     DEBUG_PRINT1("EXECUTING notwordbound.n");
  1381.     if (AT_WORD_BOUNDARY(d))
  1382. goto fail;
  1383.     break;
  1384. case wordbeg:
  1385.     DEBUG_PRINT1("EXECUTING wordbeg.n");
  1386.     if (WORDCHAR_P(d) && (AT_STRINGS_BEG(d) || !WORDCHAR_P(d - 1)))
  1387. break;
  1388.     goto fail;
  1389. case wordend:
  1390.     DEBUG_PRINT1("EXECUTING wordend.n");
  1391.     if (!AT_STRINGS_BEG(d) && WORDCHAR_P(d - 1)
  1392. && (!WORDCHAR_P(d) || AT_STRINGS_END(d)))
  1393. break;
  1394.     goto fail;
  1395. #ifdef emacs
  1396. #ifdef emacs19
  1397. case before_dot:
  1398.     DEBUG_PRINT1("EXECUTING before_dot.n");
  1399.     if (PTR_CHAR_POS((unsigned char *) d) >= point)
  1400. goto fail;
  1401.     break;
  1402. case at_dot:
  1403.     DEBUG_PRINT1("EXECUTING at_dot.n");
  1404.     if (PTR_CHAR_POS((unsigned char *) d) != point)
  1405. goto fail;
  1406.     break;
  1407. case after_dot:
  1408.     DEBUG_PRINT1("EXECUTING after_dot.n");
  1409.     if (PTR_CHAR_POS((unsigned char *) d) <= point)
  1410. goto fail;
  1411.     break;
  1412. #else /* not emacs19 */
  1413. case at_dot:
  1414.     DEBUG_PRINT1("EXECUTING at_dot.n");
  1415.     if (PTR_CHAR_POS((unsigned char *) d) + 1 != point)
  1416. goto fail;
  1417.     break;
  1418. #endif /* not emacs19 */
  1419. case syntaxspec:
  1420.     DEBUG_PRINT2("EXECUTING syntaxspec %d.n", mcnt);
  1421.     mcnt = *p++;
  1422.     goto matchsyntax;
  1423. case wordchar:
  1424.     DEBUG_PRINT1("EXECUTING Emacs wordchar.n");
  1425.     mcnt = (int) Sword;
  1426.   matchsyntax:
  1427.     PREFETCH();
  1428.     if (SYNTAX(*d++) != (enum syntaxcode) mcnt)
  1429. goto fail;
  1430.     SET_REGS_MATCHED();
  1431.     break;
  1432. case notsyntaxspec:
  1433.     DEBUG_PRINT2("EXECUTING notsyntaxspec %d.n", mcnt);
  1434.     mcnt = *p++;
  1435.     goto matchnotsyntax;
  1436. case notwordchar:
  1437.     DEBUG_PRINT1("EXECUTING Emacs notwordchar.n");
  1438.     mcnt = (int) Sword;
  1439.   matchnotsyntax:
  1440.     PREFETCH();
  1441.     if (SYNTAX(*d++) == (enum syntaxcode) mcnt)
  1442. goto fail;
  1443.     SET_REGS_MATCHED();
  1444.     break;
  1445. #else /* not emacs */
  1446. case wordchar:
  1447.     DEBUG_PRINT1("EXECUTING non-Emacs wordchar.n");
  1448.     PREFETCH();
  1449.     if (!WORDCHAR_P(d))
  1450. goto fail;
  1451.     SET_REGS_MATCHED();
  1452.     d++;
  1453.     break;
  1454. case notwordchar:
  1455.     DEBUG_PRINT1("EXECUTING non-Emacs notwordchar.n");
  1456.     PREFETCH();
  1457.     if (WORDCHAR_P(d))
  1458. goto fail;
  1459.     SET_REGS_MATCHED();
  1460.     d++;
  1461.     break;
  1462. #endif /* not emacs */
  1463. default:
  1464.     abort();
  1465. }
  1466. continue; /* Successfully executed one pattern command; keep going.  */
  1467. /* We goto here if a matching operation fails. */
  1468.       fail:
  1469. if (!FAIL_STACK_EMPTY()) { /* A restart point is known.  Restore to that state.  */
  1470.     DEBUG_PRINT1("nFAIL:n");
  1471.     POP_FAILURE_POINT(d, p,
  1472. lowest_active_reg, highest_active_reg,
  1473. regstart, regend, reg_info);
  1474.     /* If this failure point is a dummy, try the next one.  */
  1475.     if (!p)
  1476. goto fail;
  1477.     /* If we failed to the end of the pattern, don't examine *p.  */
  1478.     assert(p <= pend);
  1479.     if (p < pend) {
  1480. boolean is_a_jump_n = false;
  1481. /* If failed to a backwards jump that's part of a repetition
  1482.  * loop, need to pop this failure point and use the next one.  */
  1483. switch ((re_opcode_t) * p) {
  1484. case jump_n:
  1485.     is_a_jump_n = true;
  1486. case maybe_pop_jump:
  1487. case pop_failure_jump:
  1488. case jump:
  1489.     p1 = p + 1;
  1490.     EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1491.     p1 += mcnt;
  1492.     if ((is_a_jump_n && (re_opcode_t) * p1 == succeed_n)
  1493. || (!is_a_jump_n
  1494.     && (re_opcode_t) * p1 == on_failure_jump))
  1495. goto fail;
  1496.     break;
  1497. default:
  1498.     /* do nothing */ ;
  1499. }
  1500.     }
  1501.     if (d >= string1 && d <= end1)
  1502. dend = end_match_1;
  1503. } else
  1504.     break; /* Matching at this starting point really fails.  */
  1505.     } /* for (;;) */
  1506.     if (best_regs_set)
  1507. goto restore_best_regs;
  1508.     FREE_VARIABLES();
  1509.     return -1; /* Failure to match.  */
  1510. } /* re_match_2 */
  1511. /* Subroutine definitions for re_match_2.  */
  1512. /* We are passed P pointing to a register number after a start_memory.
  1513.  * 
  1514.  * Return true if the pattern up to the corresponding stop_memory can
  1515.  * match the empty string, and false otherwise.
  1516.  * 
  1517.  * If we find the matching stop_memory, sets P to point to one past its number.
  1518.  * Otherwise, sets P to an undefined byte less than or equal to END.
  1519.  * 
  1520.  * We don't handle duplicates properly (yet).  */
  1521. static boolean
  1522. group_match_null_string_p(p, end, reg_info)
  1523.      unsigned char **p, *end;
  1524.      register_info_type *reg_info;
  1525. {
  1526.     int mcnt;
  1527.     /* Point to after the args to the start_memory.  */
  1528.     unsigned char *p1 = *p + 2;
  1529.     while (p1 < end) {
  1530. /* Skip over opcodes that can match nothing, and return true or
  1531.  * false, as appropriate, when we get to one that can't, or to the
  1532.  * matching stop_memory.  */
  1533. switch ((re_opcode_t) * p1) {
  1534.     /* Could be either a loop or a series of alternatives.  */
  1535. case on_failure_jump:
  1536.     p1++;
  1537.     EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1538.     /* If the next operation is not a jump backwards in the
  1539.      * pattern.  */
  1540.     if (mcnt >= 0) {
  1541. /* Go through the on_failure_jumps of the alternatives,
  1542.  * seeing if any of the alternatives cannot match nothing.
  1543.  * The last alternative starts with only a jump,
  1544.  * whereas the rest start with on_failure_jump and end
  1545.  * with a jump, e.g., here is the pattern for `a|b|c':
  1546.  * 
  1547.  * /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
  1548.  * /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
  1549.  * /exactn/1/c                                            
  1550.  * 
  1551.  * So, we have to first go through the first (n-1)
  1552.  * alternatives and then deal with the last one separately.  */
  1553. /* Deal with the first (n-1) alternatives, which start
  1554.  * with an on_failure_jump (see above) that jumps to right
  1555.  * past a jump_past_alt.  */
  1556. while ((re_opcode_t) p1[mcnt - 3] == jump_past_alt) {
  1557.     /* `mcnt' holds how many bytes long the alternative
  1558.      * is, including the ending `jump_past_alt' and
  1559.      * its number.  */
  1560.     if (!alt_match_null_string_p(p1, p1 + mcnt - 3,
  1561.     reg_info))
  1562. return false;
  1563.     /* Move to right after this alternative, including the
  1564.      * jump_past_alt.  */
  1565.     p1 += mcnt;
  1566.     /* Break if it's the beginning of an n-th alternative
  1567.      * that doesn't begin with an on_failure_jump.  */
  1568.     if ((re_opcode_t) * p1 != on_failure_jump)
  1569. break;
  1570.     /* Still have to check that it's not an n-th
  1571.      * alternative that starts with an on_failure_jump.  */
  1572.     p1++;
  1573.     EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1574.     if ((re_opcode_t) p1[mcnt - 3] != jump_past_alt) {
  1575. /* Get to the beginning of the n-th alternative.  */
  1576. p1 -= 3;
  1577. break;
  1578.     }
  1579. }
  1580. /* Deal with the last alternative: go back and get number
  1581.  * of the `jump_past_alt' just before it.  `mcnt' contains
  1582.  * the length of the alternative.  */
  1583. EXTRACT_NUMBER(mcnt, p1 - 2);
  1584. if (!alt_match_null_string_p(p1, p1 + mcnt, reg_info))
  1585.     return false;
  1586. p1 += mcnt; /* Get past the n-th alternative.  */
  1587.     } /* if mcnt > 0 */
  1588.     break;
  1589. case stop_memory:
  1590.     assert(p1[1] == **p);
  1591.     *p = p1 + 2;
  1592.     return true;
  1593. default:
  1594.     if (!common_op_match_null_string_p(&p1, end, reg_info))
  1595. return false;
  1596. }
  1597.     } /* while p1 < end */
  1598.     return false;
  1599. } /* group_match_null_string_p */
  1600. /* Similar to group_match_null_string_p, but doesn't deal with alternatives:
  1601.  * It expects P to be the first byte of a single alternative and END one
  1602.  * byte past the last. The alternative can contain groups.  */
  1603. static boolean
  1604. alt_match_null_string_p(p, end, reg_info)
  1605.      unsigned char *p, *end;
  1606.      register_info_type *reg_info;
  1607. {
  1608.     int mcnt;
  1609.     unsigned char *p1 = p;
  1610.     while (p1 < end) {
  1611. /* Skip over opcodes that can match nothing, and break when we get 
  1612.  * to one that can't.  */
  1613. switch ((re_opcode_t) * p1) {
  1614.     /* It's a loop.  */
  1615. case on_failure_jump:
  1616.     p1++;
  1617.     EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1618.     p1 += mcnt;
  1619.     break;
  1620. default:
  1621.     if (!common_op_match_null_string_p(&p1, end, reg_info))
  1622. return false;
  1623. }
  1624.     } /* while p1 < end */
  1625.     return true;
  1626. } /* alt_match_null_string_p */
  1627. /* Deals with the ops common to group_match_null_string_p and
  1628.  * alt_match_null_string_p.  
  1629.  * 
  1630.  * Sets P to one after the op and its arguments, if any.  */
  1631. static boolean
  1632. common_op_match_null_string_p(p, end, reg_info)
  1633.      unsigned char **p, *end;
  1634.      register_info_type *reg_info;
  1635. {
  1636.     int mcnt;
  1637.     boolean ret;
  1638.     int reg_no;
  1639.     unsigned char *p1 = *p;
  1640.     switch ((re_opcode_t) * p1++) {
  1641.     case no_op:
  1642.     case begline:
  1643.     case endline:
  1644.     case begbuf:
  1645.     case endbuf:
  1646.     case wordbeg:
  1647.     case wordend:
  1648.     case wordbound:
  1649.     case notwordbound:
  1650. #ifdef emacs
  1651.     case before_dot:
  1652.     case at_dot:
  1653.     case after_dot:
  1654. #endif
  1655. break;
  1656.     case start_memory:
  1657. reg_no = *p1;
  1658. assert(reg_no > 0 && reg_no <= MAX_REGNUM);
  1659. ret = group_match_null_string_p(&p1, end, reg_info);
  1660. /* Have to set this here in case we're checking a group which
  1661.  * contains a group and a back reference to it.  */
  1662. if (REG_MATCH_NULL_STRING_P(reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
  1663.     REG_MATCH_NULL_STRING_P(reg_info[reg_no]) = ret;
  1664. if (!ret)
  1665.     return false;
  1666. break;
  1667. /* If this is an optimized succeed_n for zero times, make the jump.  */
  1668.     case jump:
  1669. EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1670. if (mcnt >= 0)
  1671.     p1 += mcnt;
  1672. else
  1673.     return false;
  1674. break;
  1675.     case succeed_n:
  1676. /* Get to the number of times to succeed.  */
  1677. p1 += 2;
  1678. EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1679. if (mcnt == 0) {
  1680.     p1 -= 4;
  1681.     EXTRACT_NUMBER_AND_INCR(mcnt, p1);
  1682.     p1 += mcnt;
  1683. } else
  1684.     return false;
  1685. break;
  1686.     case duplicate:
  1687. if (!REG_MATCH_NULL_STRING_P(reg_info[*p1]))
  1688.     return false;
  1689. break;
  1690.     case set_number_at:
  1691. p1 += 4;
  1692.     default:
  1693. /* All other opcodes mean we cannot match the empty string.  */
  1694. return false;
  1695.     }
  1696.     *p = p1;
  1697.     return true;
  1698. } /* common_op_match_null_string_p */
  1699. /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
  1700.  * bytes; nonzero otherwise.  */
  1701. static int
  1702. bcmp_translate(s1, s2, len, translate)
  1703.      unsigned char *s1, *s2;
  1704.      register int len;
  1705.      char *translate;
  1706. {
  1707.     register unsigned char *p1 = s1, *p2 = s2;
  1708.     while (len) {
  1709. if (translate[*p1++] != translate[*p2++])
  1710.     return 1;
  1711. len--;
  1712.     }
  1713.     return 0;
  1714. }
  1715. /* Entry points for GNU code.  */
  1716. /* re_compile_pattern is the GNU regular expression compiler: it
  1717.  * compiles PATTERN (of length SIZE) and puts the result in BUFP.
  1718.  * Returns 0 if the pattern was valid, otherwise an error string.
  1719.  * 
  1720.  * Assumes the `allocated' (and perhaps `buffer') and `translate' fields
  1721.  * are set in BUFP on entry.
  1722.  * 
  1723.  * We call regex_compile to do the actual compilation.  */
  1724. const char *
  1725. re_compile_pattern(pattern, length, bufp)
  1726.      const char *pattern;
  1727.      int length;
  1728.      struct re_pattern_buffer *bufp;
  1729. {
  1730.     reg_errcode_t ret;
  1731.     /* GNU code is written to assume at least RE_NREGS registers will be set
  1732.      * (and at least one extra will be -1).  */
  1733.     bufp->regs_allocated = REGS_UNALLOCATED;
  1734.     /* And GNU code determines whether or not to get register information
  1735.      * by passing null for the REGS argument to re_match, etc., not by
  1736.      * setting no_sub.  */
  1737.     bufp->no_sub = 0;
  1738.     /* Match anchors at newline.  */
  1739.     bufp->newline_anchor = 1;
  1740.     ret = regex_compile(pattern, length, re_syntax_options, bufp);
  1741.     return re_error_msg[(int) ret];
  1742. }
  1743. /* Entry points compatible with 4.2 BSD regex library.  We don't define
  1744.  * them if this is an Emacs or POSIX compilation.  */
  1745. #if !defined (emacs) && !defined (_POSIX_SOURCE)
  1746. /* BSD has one and only one pattern buffer.  */
  1747. static struct re_pattern_buffer re_comp_buf;
  1748. char *
  1749. re_comp(s)
  1750.      const char *s;
  1751. {
  1752.     reg_errcode_t ret;
  1753.     if (!s) {
  1754. if (!re_comp_buf.buffer)
  1755.     return "No previous regular expression";
  1756. return 0;
  1757.     }
  1758.     if (!re_comp_buf.buffer) {
  1759. re_comp_buf.buffer = (unsigned char *) malloc(200);
  1760. if (re_comp_buf.buffer == NULL)
  1761.     return "Memory exhausted";
  1762. re_comp_buf.allocated = 200;
  1763. re_comp_buf.fastmap = (char *) malloc(1 << BYTEWIDTH);
  1764. if (re_comp_buf.fastmap == NULL)
  1765.     return "Memory exhausted";
  1766.     }
  1767.     /* Since `re_exec' always passes NULL for the `regs' argument, we
  1768.      * don't need to initialize the pattern buffer fields which affect it.  */
  1769.     /* Match anchors at newlines.  */
  1770.     re_comp_buf.newline_anchor = 1;
  1771.     ret = regex_compile(s, strlen(s), re_syntax_options, &re_comp_buf);
  1772.     /* Yes, we're discarding `const' here.  */
  1773.     return (char *) re_error_msg[(int) ret];
  1774. }
  1775. int
  1776. re_exec(s)
  1777.      const char *s;
  1778. {
  1779.     const int len = strlen(s);
  1780.     return
  1781. 0 <= re_search(&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
  1782. }
  1783. #endif /* not emacs and not _POSIX_SOURCE */
  1784. /* POSIX.2 functions.  Don't define these for Emacs.  */
  1785. #ifndef emacs
  1786. /* regcomp takes a regular expression as a string and compiles it.
  1787.  * 
  1788.  * PREG is a regex_t *.  We do not expect any fields to be initialized,
  1789.  * since POSIX says we shouldn't.  Thus, we set
  1790.  * 
  1791.  * `buffer' to the compiled pattern;
  1792.  * `used' to the length of the compiled pattern;
  1793.  * `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
  1794.  * REG_EXTENDED bit in CFLAGS is set; otherwise, to
  1795.  * RE_SYNTAX_POSIX_BASIC;
  1796.  * `newline_anchor' to REG_NEWLINE being set in CFLAGS;
  1797.  * `fastmap' and `fastmap_accurate' to zero;
  1798.  * `re_nsub' to the number of subexpressions in PATTERN.
  1799.  * 
  1800.  * PATTERN is the address of the pattern string.
  1801.  * 
  1802.  * CFLAGS is a series of bits which affect compilation.
  1803.  * 
  1804.  * If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
  1805.  * use POSIX basic syntax.
  1806.  * 
  1807.  * If REG_NEWLINE is set, then . and [^...] don't match newline.
  1808.  * Also, regexec will try a match beginning after every newline.
  1809.  * 
  1810.  * If REG_ICASE is set, then we considers upper- and lowercase
  1811.  * versions of letters to be equivalent when matching.
  1812.  * 
  1813.  * If REG_NOSUB is set, then when PREG is passed to regexec, that
  1814.  * routine will report only success or failure, and nothing about the
  1815.  * registers.
  1816.  * 
  1817.  * It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
  1818.  * the return codes and their meanings.)  */
  1819. int
  1820. regcomp(preg, pattern, cflags)
  1821.      regex_t *preg;
  1822.      const char *pattern;
  1823.      int cflags;
  1824. {
  1825.     reg_errcode_t ret;
  1826.     unsigned syntax
  1827.     = (cflags & REG_EXTENDED) ?
  1828.     RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
  1829.     /* regex_compile will allocate the space for the compiled pattern.  */
  1830.     preg->buffer = 0;
  1831.     preg->allocated = 0;
  1832.     /* Don't bother to use a fastmap when searching.  This simplifies the
  1833.      * REG_NEWLINE case: if we used a fastmap, we'd have to put all the
  1834.      * characters after newlines into the fastmap.  This way, we just try
  1835.      * every character.  */
  1836.     preg->fastmap = 0;
  1837.     if (cflags & REG_ICASE) {
  1838. unsigned i;
  1839. preg->translate = (char *) malloc(CHAR_SET_SIZE);
  1840. if (preg->translate == NULL)
  1841.     return (int) REG_ESPACE;
  1842. /* Map uppercase characters to corresponding lowercase ones.  */
  1843. for (i = 0; i < CHAR_SET_SIZE; i++)
  1844.     preg->translate[i] = ISUPPER(i) ? tolower(i) : i;
  1845.     } else
  1846. preg->translate = NULL;
  1847.     /* If REG_NEWLINE is set, newlines are treated differently.  */
  1848.     if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
  1849. syntax &= ~RE_DOT_NEWLINE;
  1850. syntax |= RE_HAT_LISTS_NOT_NEWLINE;
  1851. /* It also changes the matching behavior.  */
  1852. preg->newline_anchor = 1;
  1853.     } else
  1854. preg->newline_anchor = 0;
  1855.     preg->no_sub = !!(cflags & REG_NOSUB);
  1856.     /* POSIX says a null character in the pattern terminates it, so we 
  1857.      * can use strlen here in compiling the pattern.  */
  1858.     ret = regex_compile(pattern, strlen(pattern), syntax, preg);
  1859.     /* POSIX doesn't distinguish between an unmatched open-group and an
  1860.      * unmatched close-group: both are REG_EPAREN.  */
  1861.     if (ret == REG_ERPAREN)
  1862. ret = REG_EPAREN;
  1863.     return (int) ret;
  1864. }
  1865. /* regexec searches for a given pattern, specified by PREG, in the
  1866.  * string STRING.
  1867.  * 
  1868.  * If NMATCH is zero or REG_NOSUB was set in the cflags argument to
  1869.  * `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
  1870.  * least NMATCH elements, and we set them to the offsets of the
  1871.  * corresponding matched substrings.
  1872.  * 
  1873.  * EFLAGS specifies `execution flags' which affect matching: if
  1874.  * REG_NOTBOL is set, then ^ does not match at the beginning of the
  1875.  * string; if REG_NOTEOL is set, then $ does not match at the end.
  1876.  * 
  1877.  * We return 0 if we find a match and REG_NOMATCH if not.  */
  1878. int
  1879. regexec(preg, string, nmatch, pmatch, eflags)
  1880.      const regex_t *preg;
  1881.      const char *string;
  1882.      size_t nmatch;
  1883.      regmatch_t pmatch[];
  1884.      int eflags;
  1885. {
  1886.     int ret;
  1887.     struct re_registers regs;
  1888.     regex_t private_preg;
  1889.     int len = strlen(string);
  1890.     boolean want_reg_info = !preg->no_sub && nmatch > 0;
  1891.     private_preg = *preg;
  1892.     private_preg.not_bol = !!(eflags & REG_NOTBOL);
  1893.     private_preg.not_eol = !!(eflags & REG_NOTEOL);
  1894.     /* The user has told us exactly how many registers to return
  1895.      * information about, via `nmatch'.  We have to pass that on to the
  1896.      * matching routines.  */
  1897.     private_preg.regs_allocated = REGS_FIXED;
  1898.     if (want_reg_info) {
  1899. regs.num_regs = nmatch;
  1900. regs.start = TALLOC(nmatch, regoff_t);
  1901. regs.end = TALLOC(nmatch, regoff_t);
  1902. if (regs.start == NULL || regs.end == NULL)
  1903.     return (int) REG_NOMATCH;
  1904.     }
  1905.     /* Perform the searching operation.  */
  1906.     ret = re_search(&private_preg, string, len,
  1907. /* start: */ 0, /* range: */ len,
  1908. want_reg_info ? &regs : (struct re_registers *) 0);
  1909.     /* Copy the register information to the POSIX structure.  */
  1910.     if (want_reg_info) {
  1911. if (ret >= 0) {
  1912.     unsigned r;
  1913.     for (r = 0; r < nmatch; r++) {
  1914. pmatch[r].rm_so = regs.start[r];
  1915. pmatch[r].rm_eo = regs.end[r];
  1916.     }
  1917. }
  1918. /* If we needed the temporary register info, free the space now.  */
  1919. free(regs.start);
  1920. free(regs.end);
  1921.     }
  1922.     /* We want zero return to mean success, unlike `re_search'.  */
  1923.     return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
  1924. }
  1925. /* Returns a message corresponding to an error code, ERRCODE, returned
  1926.  * from either regcomp or regexec.   We don't use PREG here.  */
  1927. size_t
  1928. regerror(errcode, preg, errbuf, errbuf_size)
  1929.      int errcode;
  1930.      const regex_t *preg;
  1931.      char *errbuf;
  1932.      size_t errbuf_size;
  1933. {
  1934.     const char *msg;
  1935.     size_t msg_size;
  1936.     if (errcode < 0
  1937. || errcode >= (sizeof(re_error_msg) / sizeof(re_error_msg[0])))
  1938. /* Only error codes returned by the rest of the code should be passed 
  1939.  * to this routine.  If we are given anything else, or if other regex
  1940.  * code generates an invalid error code, then the program has a bug.
  1941.  * Dump core so we can fix it.  */
  1942. abort();
  1943.     msg = re_error_msg[errcode];
  1944.     /* POSIX doesn't require that we do anything in this case, but why
  1945.      * not be nice.  */
  1946.     if (!msg)
  1947. msg = "Success";
  1948.     msg_size = strlen(msg) + 1; /* Includes the null.  */
  1949.     if (errbuf_size != 0) {
  1950. if (msg_size > errbuf_size) {
  1951.     strncpy(errbuf, msg, errbuf_size - 1);
  1952.     errbuf[errbuf_size - 1] = 0;
  1953. } else
  1954.     strcpy(errbuf, msg);
  1955.     }
  1956.     return msg_size;
  1957. }
  1958. /* Free dynamically allocated space used by PREG.  */
  1959. void
  1960. regfree(preg)
  1961.      regex_t *preg;
  1962. {
  1963.     if (preg->buffer != NULL)
  1964. free(preg->buffer);
  1965.     preg->buffer = NULL;
  1966.     preg->allocated = 0;
  1967.     preg->used = 0;
  1968.     if (preg->fastmap != NULL)
  1969. free(preg->fastmap);
  1970.     preg->fastmap = NULL;
  1971.     preg->fastmap_accurate = 0;
  1972.     if (preg->translate != NULL)
  1973. free(preg->translate);
  1974.     preg->translate = NULL;
  1975. }
  1976. #endif /* not emacs  */
  1977. /*
  1978.  * Local variables:
  1979.  * make-backup-files: t
  1980.  * version-control: t
  1981.  * trim-versions-without-asking: nil
  1982.  * End:
  1983.  */