/[pcre]/code/trunk/pcre_study.c
ViewVC logotype

Diff of /code/trunk/pcre_study.c

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

revision 90 by nigel, Sat Feb 24 21:41:21 2007 UTC revision 91 by nigel, Sat Feb 24 21:41:34 2007 UTC
# Line 95  set_start_bits(const uschar *code, uscha Line 95  set_start_bits(const uschar *code, uscha
95  {  {
96  register int c;  register int c;
97    
98    #if 0
99    /* ========================================================================= */
100    /* The following comment and code was inserted in January 1999. In May 2006,
101    when it was observed to cause compiler warnings about unused values, I took it
102    out again. If anybody is still using OS/2, they will have to put it back
103    manually. */
104    
105  /* This next statement and the later reference to dummy are here in order to  /* This next statement and the later reference to dummy are here in order to
106  trick the optimizer of the IBM C compiler for OS/2 into generating correct  trick the optimizer of the IBM C compiler for OS/2 into generating correct
107  code. Apparently IBM isn't going to fix the problem, and we would rather not  code. Apparently IBM isn't going to fix the problem, and we would rather not
# Line 102  disable optimization (in this module it Line 109  disable optimization (in this module it
109  the pcre module can use all the optimization it can get). */  the pcre module can use all the optimization it can get). */
110    
111  volatile int dummy;  volatile int dummy;
112    /* ========================================================================= */
113    #endif
114    
115  do  do
116    {    {
# Line 159  do Line 168  do
168        case OP_BRAMINZERO:        case OP_BRAMINZERO:
169        if (!set_start_bits(++tcode, start_bits, caseless, utf8, cd))        if (!set_start_bits(++tcode, start_bits, caseless, utf8, cd))
170          return FALSE;          return FALSE;
171    /* =========================================================================
172          See the comment at the head of this function concerning the next line,
173          which was an old fudge for the benefit of OS/2.
174        dummy = 1;        dummy = 1;
175      ========================================================================= */
176        do tcode += GET(tcode,1); while (*tcode == OP_ALT);        do tcode += GET(tcode,1); while (*tcode == OP_ALT);
177        tcode += 1+LINK_SIZE;        tcode += 1+LINK_SIZE;
178        break;        break;
# Line 215  do Line 228  do
228        try_next = FALSE;        try_next = FALSE;
229        break;        break;
230    
231          /* The cbit_space table has vertical tab as whitespace; we have to
232          discard it. */
233    
234        case OP_NOT_WHITESPACE:        case OP_NOT_WHITESPACE:
235        for (c = 0; c < 32; c++)        for (c = 0; c < 32; c++)
236          start_bits[c] |= ~cd->cbits[c+cbit_space];          {
237            int d = cd->cbits[c+cbit_space];
238            if (c == 1) d &= ~0x08;
239            start_bits[c] |= ~d;
240            }
241        try_next = FALSE;        try_next = FALSE;
242        break;        break;
243    
244          /* The cbit_space table has vertical tab as whitespace; we have to
245          discard it. */
246    
247        case OP_WHITESPACE:        case OP_WHITESPACE:
248        for (c = 0; c < 32; c++)        for (c = 0; c < 32; c++)
249          start_bits[c] |= cd->cbits[c+cbit_space];          {
250            int d = cd->cbits[c+cbit_space];
251            if (c == 1) d &= ~0x08;
252            start_bits[c] |= d;
253            }
254        try_next = FALSE;        try_next = FALSE;
255        break;        break;
256    
# Line 277  do Line 304  do
304            start_bits[c] |= cd->cbits[c+cbit_digit];            start_bits[c] |= cd->cbits[c+cbit_digit];
305          break;          break;
306    
307            /* The cbit_space table has vertical tab as whitespace; we have to
308            discard it. */
309    
310          case OP_NOT_WHITESPACE:          case OP_NOT_WHITESPACE:
311          for (c = 0; c < 32; c++)          for (c = 0; c < 32; c++)
312            start_bits[c] |= ~cd->cbits[c+cbit_space];            {
313              int d = cd->cbits[c+cbit_space];
314              if (c == 1) d &= ~0x08;
315              start_bits[c] |= ~d;
316              }
317          break;          break;
318    
319            /* The cbit_space table has vertical tab as whitespace; we have to
320            discard it. */
321    
322          case OP_WHITESPACE:          case OP_WHITESPACE:
323          for (c = 0; c < 32; c++)          for (c = 0; c < 32; c++)
324            start_bits[c] |= cd->cbits[c+cbit_space];            {
325              int d = cd->cbits[c+cbit_space];
326              if (c == 1) d &= ~0x08;
327              start_bits[c] |= d;
328              }
329          break;          break;
330    
331          case OP_NOT_WORDCHAR:          case OP_NOT_WORDCHAR:
# Line 408  uschar start_bits[32]; Line 449  uschar start_bits[32];
449  pcre_extra *extra;  pcre_extra *extra;
450  pcre_study_data *study;  pcre_study_data *study;
451  const uschar *tables;  const uschar *tables;
452  const real_pcre *re = (const real_pcre *)external_re;  uschar *code;
 uschar *code = (uschar *)re + re->name_table_offset +  
   (re->name_count * re->name_entry_size);  
453  compile_data compile_block;  compile_data compile_block;
454    const real_pcre *re = (const real_pcre *)external_re;
455    
456  *errorptr = NULL;  *errorptr = NULL;
457    
# Line 427  if ((options & ~PUBLIC_STUDY_OPTIONS) != Line 467  if ((options & ~PUBLIC_STUDY_OPTIONS) !=
467    return NULL;    return NULL;
468    }    }
469    
470    code = (uschar *)re + re->name_table_offset +
471      (re->name_count * re->name_entry_size);
472    
473  /* For an anchored pattern, or an unanchored pattern that has a first char, or  /* For an anchored pattern, or an unanchored pattern that has a first char, or
474  a multiline pattern that matches only at "line starts", no further processing  a multiline pattern that matches only at "line starts", no further processing
475  at present. */  at present. */

Legend:
Removed from v.90  
changed lines
  Added in v.91

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12