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

Diff of /code/trunk/pcre_compile.c

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

revision 1114 by chpe, Tue Oct 16 15:57:16 2012 UTC revision 1130 by chpe, Thu Oct 18 18:35:15 2012 UTC
# Line 1203  escape sequence. Line 1203  escape sequence.
1203  Argument:  Argument:
1204    ptrptr         points to the pattern position pointer    ptrptr         points to the pattern position pointer
1205    negptr         points to a boolean that is set TRUE for negation else FALSE    negptr         points to a boolean that is set TRUE for negation else FALSE
1206    dptr           points to an int that is set to the detailed property value    ptypeptr       points to an unsigned int that is set to the type value
1207      pdataptr       points to an unsigned int that is set to the detailed property value
1208    errorcodeptr   points to the error code variable    errorcodeptr   points to the error code variable
1209    
1210  Returns:         type value from ucp_type_table, or -1 for an invalid type  Returns:         TRUE if the type value was found, or FALSE for an invalid type
1211  */  */
1212    
1213  static int  static BOOL
1214  get_ucp(const pcre_uchar **ptrptr, BOOL *negptr, int *dptr, int *errorcodeptr)  get_ucp(const pcre_uchar **ptrptr, BOOL *negptr, unsigned int *ptypeptr,
1215      unsigned int *pdataptr, int *errorcodeptr)
1216  {  {
1217  pcre_uchar c;  pcre_uchar c;
1218  int i, bot, top;  int i, bot, top;
# Line 1265  while (bot < top) Line 1267  while (bot < top)
1267    r = STRCMP_UC_C8(name, PRIV(utt_names) + PRIV(utt)[i].name_offset);    r = STRCMP_UC_C8(name, PRIV(utt_names) + PRIV(utt)[i].name_offset);
1268    if (r == 0)    if (r == 0)
1269      {      {
1270      *dptr = PRIV(utt)[i].value;      *ptypeptr = PRIV(utt)[i].type;
1271      return PRIV(utt)[i].type;      *pdataptr = PRIV(utt)[i].value;
1272        return TRUE;
1273      }      }
1274    if (r > 0) bot = i + 1; else top = i;    if (r > 0) bot = i + 1; else top = i;
1275    }    }
1276    
1277  *errorcodeptr = ERR47;  *errorcodeptr = ERR47;
1278  *ptrptr = ptr;  *ptrptr = ptr;
1279  return -1;  return FALSE;
1280    
1281  ERROR_RETURN:  ERROR_RETURN:
1282  *errorcodeptr = ERR46;  *errorcodeptr = ERR46;
1283  *ptrptr = ptr;  *ptrptr = ptr;
1284  return -1;  return FALSE;
1285  }  }
1286  #endif  #endif
1287    
# Line 2966  Returns:       TRUE if auto-possessifyin Line 2969  Returns:       TRUE if auto-possessifyin
2969  */  */
2970    
2971  static BOOL  static BOOL
2972  check_char_prop(pcre_uint32 c, int ptype, int pdata, BOOL negated)  check_char_prop(pcre_uint32 c, unsigned int ptype, unsigned int pdata, BOOL negated)
2973  {  {
2974  #ifdef SUPPORT_UCP  #ifdef SUPPORT_UCP
2975  const pcre_uint32 *p;  const pcre_uint32 *p;
# Line 3133  if (*ptr == CHAR_ASTERISK || *ptr == CHA Line 3136  if (*ptr == CHAR_ASTERISK || *ptr == CHA
3136    
3137  if (op_code == OP_CHAR || op_code == OP_CHARI ||  if (op_code == OP_CHAR || op_code == OP_CHARI ||
3138      op_code == OP_NOT || op_code == OP_NOTI)      op_code == OP_NOT || op_code == OP_NOTI)
   //if (escape == 0) switch(op_code)  
3139    {    {
3140  #ifdef SUPPORT_UTF  #ifdef SUPPORT_UTF
3141    GETCHARTEST(c, previous);    GETCHARTEST(c, previous);
# Line 3253  if (escape == 0) Line 3255  if (escape == 0)
3255    
3256  #ifdef SUPPORT_UCP  #ifdef SUPPORT_UCP
3257      case OP_PROP:      case OP_PROP:
3258      return check_char_prop(next, (int)previous[0], (int)previous[1], FALSE);      return check_char_prop(next, previous[0], previous[1], FALSE);
3259    
3260      case OP_NOTPROP:      case OP_NOTPROP:
3261      return check_char_prop(next, (int)previous[0], (int)previous[1], TRUE);      return check_char_prop(next, previous[0], previous[1], TRUE);
3262  #endif  #endif
3263    
3264      default:      default:
# Line 3339  switch(op_code) Line 3341  switch(op_code)
3341      case ESC_p:      case ESC_p:
3342      case ESC_P:      case ESC_P:
3343        {        {
3344        int ptype, pdata, errorcodeptr;        unsigned int ptype = 0, pdata = 0;
3345          int errorcodeptr;
3346        BOOL negated;        BOOL negated;
3347    
3348        ptr--;      /* Make ptr point at the p or P */        ptr--;      /* Make ptr point at the p or P */
3349        ptype = get_ucp(&ptr, &negated, &pdata, &errorcodeptr);        if (!get_ucp(&ptr, &negated, &ptype, &pdata, &errorcodeptr))
3350        if (ptype < 0) return FALSE;          return FALSE;
3351        ptr++;      /* Point past the final curly ket */        ptr++;      /* Point past the final curly ket */
3352    
3353        /* If the property item is optional, we have to give up. (When generated        /* If the property item is optional, we have to give up. (When generated
# Line 3725  dynamically as we process the pattern. * Line 3728  dynamically as we process the pattern. *
3728  #ifdef SUPPORT_UTF  #ifdef SUPPORT_UTF
3729  /* PCRE_UTF[16|32] have the same value as PCRE_UTF8. */  /* PCRE_UTF[16|32] have the same value as PCRE_UTF8. */
3730  BOOL utf = (options & PCRE_UTF8) != 0;  BOOL utf = (options & PCRE_UTF8) != 0;
3731    #ifndef COMPILE_PCRE32
3732  pcre_uchar utf_chars[6];  pcre_uchar utf_chars[6];
3733    #endif
3734  #else  #else
3735  BOOL utf = FALSE;  BOOL utf = FALSE;
3736  #endif  #endif
# Line 4374  for (;; ptr++) Line 4379  for (;; ptr++)
4379              case ESC_P:              case ESC_P:
4380                {                {
4381                BOOL negated;                BOOL negated;
4382                int pdata;                unsigned int ptype = 0, pdata = 0;
4383                int ptype = get_ucp(&ptr, &negated, &pdata, errorcodeptr);                if (!get_ucp(&ptr, &negated, &ptype, &pdata, errorcodeptr))
4384                if (ptype < 0) goto FAILED;                  goto FAILED;
4385                *class_uchardata++ = ((escape == ESC_p) != negated)?                *class_uchardata++ = ((escape == ESC_p) != negated)?
4386                  XCL_PROP : XCL_NOTPROP;                  XCL_PROP : XCL_NOTPROP;
4387                *class_uchardata++ = ptype;                *class_uchardata++ = ptype;
# Line 6873  for (;; ptr++) Line 6878  for (;; ptr++)
6878        else if (escape == ESC_P || escape == ESC_p)        else if (escape == ESC_P || escape == ESC_p)
6879          {          {
6880          BOOL negated;          BOOL negated;
6881          int pdata;          unsigned int ptype = 0, pdata = 0;
6882          int ptype = get_ucp(&ptr, &negated, &pdata, errorcodeptr);          if (!get_ucp(&ptr, &negated, &ptype, &pdata, errorcodeptr))
6883          if (ptype < 0) goto FAILED;            goto FAILED;
6884          previous = code;          previous = code;
6885          *code++ = ((escape == ESC_p) != negated)? OP_PROP : OP_NOTPROP;          *code++ = ((escape == ESC_p) != negated)? OP_PROP : OP_NOTPROP;
6886          *code++ = ptype;          *code++ = ptype;

Legend:
Removed from v.1114  
changed lines
  Added in v.1130

  ViewVC Help
Powered by ViewVC 1.1.5