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

Diff of /code/trunk/pcre_jit_compile.c

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

revision 1447 by zherczeg, Mon Jan 13 20:18:33 2014 UTC revision 1474 by zherczeg, Thu Apr 24 06:43:50 2014 UTC
# Line 398  typedef struct compiler_common { Line 398  typedef struct compiler_common {
398    struct sljit_label *quit_label;    struct sljit_label *quit_label;
399    struct sljit_label *forced_quit_label;    struct sljit_label *forced_quit_label;
400    struct sljit_label *accept_label;    struct sljit_label *accept_label;
401      struct sljit_label *ff_newline_shortcut;
402    stub_list *stubs;    stub_list *stubs;
403    label_addr_list *label_addrs;    label_addr_list *label_addrs;
404    recurse_entry *entries;    recurse_entry *entries;
# Line 3234  while (TRUE) Line 3235  while (TRUE)
3235      cc = bracketend(cc);      cc = bracketend(cc);
3236      continue;      continue;
3237    
3238        case OP_PLUSI:
3239        case OP_MINPLUSI:
3240        case OP_POSPLUSI:
3241        caseless = TRUE;
3242      case OP_PLUS:      case OP_PLUS:
3243      case OP_MINPLUS:      case OP_MINPLUS:
3244      case OP_POSPLUS:      case OP_POSPLUS:
# Line 3248  while (TRUE) Line 3253  while (TRUE)
3253      cc += 1 + IMM2_SIZE;      cc += 1 + IMM2_SIZE;
3254      break;      break;
3255    
3256      case OP_PLUSI:      case OP_QUERYI:
3257      case OP_MINPLUSI:      case OP_MINQUERYI:
3258      case OP_POSPLUSI:      case OP_POSQUERYI:
3259      caseless = TRUE;      caseless = TRUE;
3260        case OP_QUERY:
3261        case OP_MINQUERY:
3262        case OP_POSQUERY:
3263        len = 1;
3264      cc++;      cc++;
3265    #ifdef SUPPORT_UTF
3266        if (common->utf && HAS_EXTRALEN(*cc)) len += GET_EXTRALEN(*cc);
3267    #endif
3268        max_chars = scan_prefix(common, cc + len, chars, bytes, max_chars);
3269        if (max_chars == 0)
3270          return consumed;
3271        last = FALSE;
3272      break;      break;
3273    
3274      case OP_KET:      case OP_KET:
# Line 3336  while (TRUE) Line 3352  while (TRUE)
3352      cc++;      cc++;
3353      break;      break;
3354    
3355        case OP_NOT:
3356        case OP_NOTI:
3357        cc++;
3358        /* Fall through. */
3359      case OP_NOT_DIGIT:      case OP_NOT_DIGIT:
3360      case OP_NOT_WHITESPACE:      case OP_NOT_WHITESPACE:
3361      case OP_NOT_WORDCHAR:      case OP_NOT_WORDCHAR:
# Line 3364  while (TRUE) Line 3384  while (TRUE)
3384      cc += 1 + IMM2_SIZE;      cc += 1 + IMM2_SIZE;
3385      continue;      continue;
3386    
3387        case OP_NOTEXACT:
3388        case OP_NOTEXACTI:
3389    #if defined SUPPORT_UTF && !defined COMPILE_PCRE32
3390        if (common->utf) return consumed;
3391    #endif
3392        any = TRUE;
3393        repeat = GET2(cc, 1);
3394        cc += 1 + IMM2_SIZE + 1;
3395        break;
3396    
3397      default:      default:
3398      return consumed;      return consumed;
3399      }      }
# Line 3497  int offsets[3]; Line 3527  int offsets[3];
3527  pcre_uint32 mask;  pcre_uint32 mask;
3528  pcre_uint8 *byte_set, *byte_set_end;  pcre_uint8 *byte_set, *byte_set_end;
3529  int i, max, from;  int i, max, from;
3530  int range_right = -1, range_len = 4 - 1;  int range_right = -1, range_len = 3 - 1;
3531  sljit_ub *update_table = NULL;  sljit_ub *update_table = NULL;
3532  BOOL in_range;  BOOL in_range;
3533    
# Line 3529  for (i = 0; i < max; i++) Line 3559  for (i = 0; i < max; i++)
3559    }    }
3560    
3561  in_range = FALSE;  in_range = FALSE;
3562    from = 0;   /* Prevent compiler "uninitialized" warning */
3563  for (i = 0; i <= max; i++)  for (i = 0; i <= max; i++)
3564    {    {
3565    if (in_range && (i - from) > range_len && (bytes[(i - 1) * MAX_N_BYTES] <= 4))    if (in_range && (i - from) > range_len && (bytes[(i - 1) * MAX_N_BYTES] <= 4))
# Line 3842  if (common->nltype == NLTYPE_FIXED && co Line 3873  if (common->nltype == NLTYPE_FIXED && co
3873    JUMPHERE(lastchar);    JUMPHERE(lastchar);
3874    
3875    if (firstline)    if (firstline)
3876      OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE0);      OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);
3877    return;    return;
3878    }    }
3879    
# Line 3852  firstchar = CMP(SLJIT_C_LESS_EQUAL, STR_ Line 3883  firstchar = CMP(SLJIT_C_LESS_EQUAL, STR_
3883  skip_char_back(common);  skip_char_back(common);
3884    
3885  loop = LABEL();  loop = LABEL();
3886    common->ff_newline_shortcut = loop;
3887    
3888  read_char_range(common, common->nlmin, common->nlmax, TRUE);  read_char_range(common, common->nlmin, common->nlmax, TRUE);
3889  lastchar = CMP(SLJIT_C_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);  lastchar = CMP(SLJIT_C_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
3890  if (common->nltype == NLTYPE_ANY || common->nltype == NLTYPE_ANYCRLF)  if (common->nltype == NLTYPE_ANY || common->nltype == NLTYPE_ANYCRLF)
# Line 7383  if (ket == OP_KETRMAX) Line 7416  if (ket == OP_KETRMAX)
7416    
7417  if (repeat_type == OP_EXACT)  if (repeat_type == OP_EXACT)
7418    {    {
7419      count_match(common);
7420    OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_IMM, 1);    OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_IMM, 1);
7421    JUMPTO(SLJIT_C_NOT_ZERO, rmax_label);    JUMPTO(SLJIT_C_NOT_ZERO, rmax_label);
7422    }    }
# Line 10104  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SL Line 10138  OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SL
10138    
10139  if ((re->options & PCRE_ANCHORED) == 0)  if ((re->options & PCRE_ANCHORED) == 0)
10140    {    {
10141    if ((re->options & PCRE_FIRSTLINE) == 0)    if (common->ff_newline_shortcut != NULL)
10142      CMPTO(SLJIT_C_LESS, STR_PTR, 0, STR_END, 0, mainloop_label);      {
10143        if ((re->options & PCRE_FIRSTLINE) == 0)
10144          CMPTO(SLJIT_C_LESS, STR_PTR, 0, STR_END, 0, common->ff_newline_shortcut);
10145        /* There cannot be more newlines here. */
10146        }
10147    else    else
10148      CMPTO(SLJIT_C_LESS, STR_PTR, 0, TMP1, 0, mainloop_label);      {
10149        if ((re->options & PCRE_FIRSTLINE) == 0)
10150          CMPTO(SLJIT_C_LESS, STR_PTR, 0, STR_END, 0, mainloop_label);
10151        else
10152          CMPTO(SLJIT_C_LESS, STR_PTR, 0, TMP1, 0, mainloop_label);
10153        }
10154    }    }
10155    
10156  /* No more remaining characters. */  /* No more remaining characters. */

Legend:
Removed from v.1447  
changed lines
  Added in v.1474

  ViewVC Help
Powered by ViewVC 1.1.5