Index: third_party/re2/util/pcre.cc |
diff --git a/third_party/re2/util/pcre.cc b/third_party/re2/util/pcre.cc |
index 9a3f32d25a370d65193e4f0a68e6de106903a9d9..160213335ea12f3f46e85604d8efd053afd7d3f6 100644 |
--- a/third_party/re2/util/pcre.cc |
+++ b/third_party/re2/util/pcre.cc |
@@ -7,10 +7,14 @@ |
// compilation as PCRE in namespace re2. |
#include <errno.h> |
-#include <limits> |
#include "util/util.h" |
#include "util/flags.h" |
#include "util/pcre.h" |
+ |
+#ifdef WIN32 |
+#define strtoll _strtoi64 |
+#define strtoull _strtoui64 |
+#endif |
#define PCREPORT(level) LOG(level) |
@@ -22,42 +26,6 @@ |
DEFINE_int32(regexp_stack_limit, 256<<10, "default PCRE stack limit (bytes)"); |
DEFINE_int32(regexp_match_limit, 1000000, |
"default PCRE match limit (function calls)"); |
- |
-#ifndef USEPCRE |
- |
-// Fake just enough of the PCRE API to allow this file to build. :) |
- |
-struct pcre_extra { |
- int flags; |
- int match_limit; |
- int match_limit_recursion; |
-}; |
- |
-#define PCRE_EXTRA_MATCH_LIMIT 0 |
-#define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0 |
-#define PCRE_ANCHORED 0 |
-#define PCRE_NOTEMPTY 0 |
-#define PCRE_ERROR_NOMATCH 1 |
-#define PCRE_ERROR_MATCHLIMIT 2 |
-#define PCRE_ERROR_RECURSIONLIMIT 3 |
-#define PCRE_INFO_CAPTURECOUNT 0 |
- |
-void pcre_free(void*) { |
-} |
- |
-pcre* pcre_compile(const char*, int, const char**, int*, const unsigned char*) { |
- return NULL; |
-} |
- |
-int pcre_exec(const pcre*, const pcre_extra*, const char*, int, int, int, int*, int) { |
- return 0; |
-} |
- |
-int pcre_fullinfo(const pcre*, const pcre_extra*, int, void*) { |
- return 0; |
-} |
- |
-#endif |
namespace re2 { |
@@ -150,7 +118,7 @@ |
// ANCHOR_BOTH Tack a "\z" to the end of the original pattern |
// and use a pcre anchored match. |
- const char* error = ""; |
+ const char* error; |
int eoffset; |
pcre* re; |
if (anchor != ANCHOR_BOTH) { |
@@ -215,7 +183,7 @@ |
done: |
int consumed; |
- int vec[kVecSize] = {}; |
+ int vec[kVecSize]; |
return re.DoMatchImpl(text, ANCHOR_BOTH, &consumed, args, n, vec, kVecSize); |
} |
@@ -258,7 +226,7 @@ |
done: |
int consumed; |
- int vec[kVecSize] = {}; |
+ int vec[kVecSize]; |
return re.DoMatchImpl(text, UNANCHORED, &consumed, args, n, vec, kVecSize); |
} |
@@ -301,7 +269,7 @@ |
done: |
int consumed; |
- int vec[kVecSize] = {}; |
+ int vec[kVecSize]; |
if (pattern.DoMatchImpl(*input, ANCHOR_START, &consumed, |
args, n, vec, kVecSize)) { |
input->remove_prefix(consumed); |
@@ -350,7 +318,7 @@ |
done: |
int consumed; |
- int vec[kVecSize] = {}; |
+ int vec[kVecSize]; |
if (pattern.DoMatchImpl(*input, UNANCHORED, &consumed, |
args, n, vec, kVecSize)) { |
input->remove_prefix(consumed); |
@@ -363,7 +331,7 @@ |
bool PCRE::Replace(string *str, |
const PCRE& pattern, |
const StringPiece& rewrite) { |
- int vec[kVecSize] = {}; |
+ int vec[kVecSize]; |
int matches = pattern.TryMatch(*str, 0, UNANCHORED, true, vec, kVecSize); |
if (matches == 0) |
return false; |
@@ -382,12 +350,12 @@ |
const PCRE& pattern, |
const StringPiece& rewrite) { |
int count = 0; |
- int vec[kVecSize] = {}; |
+ int vec[kVecSize]; |
string out; |
int start = 0; |
bool last_match_was_empty_string = false; |
- while (start <= static_cast<int>(str->size())) { |
+ for (; start <= str->length();) { |
// If the previous match was for the empty string, we shouldn't |
// just match again: we'll match in the same way and get an |
// infinite loop. Instead, we do the match in a special way: |
@@ -403,15 +371,14 @@ |
matches = pattern.TryMatch(*str, start, ANCHOR_START, false, |
vec, kVecSize); |
if (matches <= 0) { |
- if (start < static_cast<int>(str->size())) |
+ if (start < str->length()) |
out.push_back((*str)[start]); |
start++; |
last_match_was_empty_string = false; |
continue; |
} |
} else { |
- matches = pattern.TryMatch(*str, start, UNANCHORED, true, |
- vec, kVecSize); |
+ matches = pattern.TryMatch(*str, start, UNANCHORED, true, vec, kVecSize); |
if (matches <= 0) |
break; |
} |
@@ -429,8 +396,8 @@ |
if (count == 0) |
return 0; |
- if (start < static_cast<int>(str->size())) |
- out.append(*str, start, static_cast<int>(str->size()) - start); |
+ if (start < str->length()) |
+ out.append(*str, start, str->length() - start); |
swap(out, *str); |
return count; |
} |
@@ -439,7 +406,7 @@ |
const PCRE& pattern, |
const StringPiece &rewrite, |
string *out) { |
- int vec[kVecSize] = {}; |
+ int vec[kVecSize]; |
int matches = pattern.TryMatch(text, 0, UNANCHORED, true, vec, kVecSize); |
if (matches == 0) |
return false; |
@@ -485,7 +452,7 @@ |
/***** Actual matching and rewriting code *****/ |
bool PCRE::HitLimit() { |
- return hit_limit_ != 0; |
+ return hit_limit_; |
} |
void PCRE::ClearHitLimit() { |
@@ -633,9 +600,9 @@ |
const Arg* const args[], |
int n) const { |
assert(n >= 0); |
- const int vecsize = (1 + n) * 3; // results + PCRE workspace |
- // (as for kVecSize) |
- int* vec = new int[vecsize]; |
+ size_t const vecsize = (1 + n) * 3; // results + PCRE workspace |
+ // (as for kVecSize) |
+ int *vec = new int[vecsize]; |
bool b = DoMatchImpl(text, anchor, consumed, args, n, vec, vecsize); |
delete[] vec; |
return b; |
@@ -841,7 +808,7 @@ |
if (!parse_long_radix(str, n, &r, radix)) return false; // Could not parse |
if ((short)r != r) return false; // Out of range |
if (dest == NULL) return true; |
- *(reinterpret_cast<short*>(dest)) = (short)r; |
+ *(reinterpret_cast<short*>(dest)) = r; |
return true; |
} |
@@ -853,7 +820,7 @@ |
if (!parse_ulong_radix(str, n, &r, radix)) return false; // Could not parse |
if ((ushort)r != r) return false; // Out of range |
if (dest == NULL) return true; |
- *(reinterpret_cast<unsigned short*>(dest)) = (ushort)r; |
+ *(reinterpret_cast<unsigned short*>(dest)) = r; |
return true; |
} |
@@ -931,7 +898,7 @@ |
char* end; |
double r = strtod(buf, &end); |
if (end != buf + n) { |
-#ifdef _WIN32 |
+#ifdef COMPILER_MSVC |
// Microsoft's strtod() doesn't handle inf and nan, so we have to |
// handle it explicitly. Speed is not important here because this |
// code is only called in unit tests. |
@@ -944,11 +911,11 @@ |
++i; |
} |
if (0 == stricmp(i, "inf") || 0 == stricmp(i, "infinity")) { |
- r = std::numeric_limits<double>::infinity(); |
+ r = numeric_limits<double>::infinity(); |
if (!pos) |
r = -r; |
} else if (0 == stricmp(i, "nan")) { |
- r = std::numeric_limits<double>::quiet_NaN(); |
+ r = numeric_limits<double>::quiet_NaN(); |
} else { |
return false; |
} |