2007-11-24 Eric Seidel <eric@webkit.org>
[WebKit-https.git] / JavaScriptCore / pcre / pcre_exec.cpp
index c66261bf4580bed6c44dfbcb58dd6601e07ee441..bf217d280d7dd5f193cfe4939865f8b326333288 100644 (file)
@@ -117,13 +117,13 @@ struct MatchFrame {
 /* Structure for passing "static" information around between the functions
 doing traditional NFA matching, so that they are thread-safe. */
 
-typedef struct match_data {
+struct MatchData {
   unsigned long int match_call_count;      /* As it says */
-  int   *offset_vector;         /* Offset vector */
+  int*   offset_vector;         /* Offset vector */
   int    offset_end;            /* One past the end */
   int    offset_max;            /* The maximum usable for return data */
-  const uschar *lcc;            /* Points to lower casing table */
-  const uschar *ctypes;         /* Points to table of type maps */
+  const uscharlcc;            /* Points to lower casing table */
+  const uscharctypes;         /* Points to table of type maps */
   bool   offset_overflow;       /* Set if too many extractions */
   UChar*  start_subject;         /* Start of the subject string */
   UChar*  end_subject;           /* End of the subject string */
@@ -131,7 +131,7 @@ typedef struct match_data {
   int    end_offset_top;        /* Highwater mark at end of match */
   bool   multiline;
   bool   caseless;
-} match_data;
+};
 
 #define match_isgroup      true    /* Set if start of bracketed group */
 
@@ -165,15 +165,19 @@ Arguments:
 Returns:     nothing
 */
 
-static void
-pchars(const UChar* p, int length, bool is_subject, match_data *md)
+static void pchars(const UChar* p, int length, bool is_subject, MatchData *md)
 {
-int c;
-if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
-while (length-- > 0)
-  if (isprint(c = *(p++))) printf("%c", c);
-  else if (c < 256) printf("\\x%02x", c);
-  else printf("\\x{%x}", c);
+    if (is_subject && length > md->end_subject - p)
+        length = md->end_subject - p;
+    while (length-- > 0) {
+        int c;
+        if (isprint(c = *(p++)))
+            printf("%c", c);
+        else if (c < 256)
+            printf("\\x%02x", c);
+        else
+            printf("\\x{%x}", c);
+    }
 }
 #endif
 
@@ -196,7 +200,7 @@ Returns:      true if matched
 */
 
 static bool
-match_ref(int offset, UChar* eptr, int length, match_data *md)
+match_ref(int offset, UChar* eptr, int length, MatchData *md)
 {
 UChar* p = md->start_subject + md->offset_vector[offset];
 
@@ -403,7 +407,7 @@ static inline void getUTF8CharAndIncrementLength(int& c, const uschar* eptr, int
     }
 }
 
-static int match(UChar* eptr, const uschar* ecode, int offset_top, match_data* md)
+static int match(UChar* eptr, const uschar* ecode, int offset_top, MatchData* md)
 {
     int is_match = false;
     int i;
@@ -2067,7 +2071,7 @@ int jsRegExpExecute(const JSRegExp* re,
     ASSERT(offsetcount >= 0);
     ASSERT(offsets || offsetcount == 0);
     
-    match_data match_block;
+    MatchData match_block;
     match_block.start_subject = (UChar*)subject;
     match_block.end_subject = match_block.start_subject + length;
     UChar* end_subject = match_block.end_subject;
@@ -2075,8 +2079,8 @@ int jsRegExpExecute(const JSRegExp* re,
     match_block.lcc = _pcre_default_tables + lcc_offset;
     match_block.ctypes = _pcre_default_tables + ctypes_offset;
     
-    match_block.multiline = (re->options & PCRE_MULTILINE) != 0;
-    match_block.caseless = (re->options & PCRE_CASELESS) != 0;
+    match_block.multiline = (re->options & PCRE_MULTILINE);
+    match_block.caseless = (re->options & PCRE_CASELESS);
     
     /* If the expression has got more back references than the offsets supplied can
      hold, we get a temporary chunk of working store to use during the matching.
@@ -2149,7 +2153,7 @@ int jsRegExpExecute(const JSRegExp* re,
     
     UChar* start_match = (UChar*)subject + start_offset;
     UChar* req_byte_ptr = start_match - 1;
-    bool startline = re->options & PCRE_STARTLINE;
+    bool useMultiLineFirstCharOptimization = re->options & OptionUseMultiLineFirstCharOptimization;
     
     do {
         UChar* save_end_subject = end_subject;
@@ -2188,8 +2192,7 @@ int jsRegExpExecute(const JSRegExp* re,
         }
         
         /* Or to just after \n for a multiline match if possible */
-        
-        else if (startline) {
+        else if (useMultiLineFirstCharOptimization) {
             if (start_match > match_block.start_subject + start_offset) {
                 while (start_match < end_subject && !isNewline(start_match[-1]))
                     start_match++;