| Index: third_party/re2/re2/regexp.cc
|
| diff --git a/third_party/re2/re2/regexp.cc b/third_party/re2/re2/regexp.cc
|
| index ed4c3a0616a0166f8600a35cf609ab8a06d9b450..99e72e50d55f350ace2ad9162365ac198e1b09a8 100644
|
| --- a/third_party/re2/re2/regexp.cc
|
| +++ b/third_party/re2/re2/regexp.cc
|
| @@ -14,7 +14,7 @@ namespace re2 {
|
|
|
| // Constructor. Allocates vectors as appropriate for operator.
|
| Regexp::Regexp(RegexpOp op, ParseFlags parse_flags)
|
| - : op_(op),
|
| + : op_(static_cast<uint8>(op)),
|
| simple_(false),
|
| parse_flags_(static_cast<uint16>(parse_flags)),
|
| ref_(1),
|
| @@ -43,7 +43,8 @@ Regexp::~Regexp() {
|
| delete[] runes_;
|
| break;
|
| case kRegexpCharClass:
|
| - cc_->Delete();
|
| + if (cc_)
|
| + cc_->Delete();
|
| delete ccb_;
|
| break;
|
| }
|
| @@ -106,7 +107,7 @@ void Regexp::Decref() {
|
| GLOBAL_MUTEX_LOCK(ref_mutex);
|
| int r = (*ref_map)[this] - 1;
|
| if (r < kMaxRef) {
|
| - ref_ = r;
|
| + ref_ = static_cast<uint16>(r);
|
| ref_map->erase(this);
|
| } else {
|
| (*ref_map)[this] = r;
|
| @@ -211,6 +212,13 @@ Regexp* Regexp::ConcatOrAlternate(RegexpOp op, Regexp** sub, int nsub,
|
| if (nsub == 1)
|
| return sub[0];
|
|
|
| + if (nsub == 0) {
|
| + if (op == kRegexpAlternate)
|
| + return new Regexp(kRegexpNoMatch, flags);
|
| + else
|
| + return new Regexp(kRegexpEmptyMatch, flags);
|
| + }
|
| +
|
| Regexp** subcopy = NULL;
|
| if (op == kRegexpAlternate && can_factor) {
|
| // Going to edit sub; make a copy so we don't step on caller.
|
| @@ -445,10 +453,11 @@ bool Regexp::Equal(Regexp* a, Regexp* b) {
|
| continue;
|
| }
|
|
|
| - int n = stk.size();
|
| + size_t n = stk.size();
|
| if (n == 0)
|
| break;
|
|
|
| + DCHECK_GE(n, 2);
|
| a = stk[n-2];
|
| b = stk[n-1];
|
| stk.resize(n-2);
|
| @@ -517,7 +526,7 @@ class NumCapturesWalker : public Regexp::Walker<Ignored> {
|
|
|
| private:
|
| int ncapture_;
|
| - DISALLOW_EVIL_CONSTRUCTORS(NumCapturesWalker);
|
| + DISALLOW_COPY_AND_ASSIGN(NumCapturesWalker);
|
| };
|
|
|
| int Regexp::NumCaptures() {
|
| @@ -561,7 +570,7 @@ class NamedCapturesWalker : public Regexp::Walker<Ignored> {
|
|
|
| private:
|
| map<string, int>* map_;
|
| - DISALLOW_EVIL_CONSTRUCTORS(NamedCapturesWalker);
|
| + DISALLOW_COPY_AND_ASSIGN(NamedCapturesWalker);
|
| };
|
|
|
| map<string, int>* Regexp::NamedCaptures() {
|
| @@ -601,7 +610,7 @@ class CaptureNamesWalker : public Regexp::Walker<Ignored> {
|
|
|
| private:
|
| map<int, string>* map_;
|
| - DISALLOW_EVIL_CONSTRUCTORS(CaptureNamesWalker);
|
| + DISALLOW_COPY_AND_ASSIGN(CaptureNamesWalker);
|
| };
|
|
|
| map<int, string>* Regexp::CaptureNames() {
|
| @@ -643,7 +652,7 @@ bool Regexp::RequiredPrefix(string *prefix, bool *foldcase, Regexp** suffix) {
|
| if (re->parse_flags() & Latin1) {
|
| prefix->resize(re->nrunes_);
|
| for (int j = 0; j < re->nrunes_; j++)
|
| - (*prefix)[j] = re->runes_[j];
|
| + (*prefix)[j] = static_cast<char>(re->runes_[j]);
|
| } else {
|
| // Convert to UTF-8 in place.
|
| // Assume worst-case space and then trim.
|
| @@ -652,7 +661,7 @@ bool Regexp::RequiredPrefix(string *prefix, bool *foldcase, Regexp** suffix) {
|
| for (int j = 0; j < re->nrunes_; j++) {
|
| Rune r = re->runes_[j];
|
| if (r < Runeself)
|
| - *p++ = r;
|
| + *p++ = static_cast<char>(r);
|
| else
|
| p += runetochar(p, &r);
|
| }
|
| @@ -662,14 +671,14 @@ bool Regexp::RequiredPrefix(string *prefix, bool *foldcase, Regexp** suffix) {
|
|
|
| case kRegexpLiteral:
|
| if ((re->parse_flags() & Latin1) || re->rune_ < Runeself) {
|
| - prefix->append(1, re->rune_);
|
| + prefix->append(1, static_cast<char>(re->rune_));
|
| } else {
|
| char buf[UTFmax];
|
| prefix->append(buf, runetochar(buf, &re->rune_));
|
| }
|
| break;
|
| }
|
| - *foldcase = (sub[i]->parse_flags() & FoldCase);
|
| + *foldcase = (sub[i]->parse_flags() & FoldCase) != 0;
|
| i++;
|
|
|
| // The rest.
|
| @@ -849,7 +858,7 @@ void CharClassBuilder::Negate() {
|
| }
|
|
|
| ranges_.clear();
|
| - for (int i = 0; i < v.size(); i++)
|
| + for (size_t i = 0; i < v.size(); i++)
|
| ranges_.insert(v[i]);
|
|
|
| upper_ = AlphaMask & ~upper_;
|
| @@ -915,12 +924,12 @@ bool CharClass::Contains(Rune r) {
|
| }
|
|
|
| CharClass* CharClassBuilder::GetCharClass() {
|
| - CharClass* cc = CharClass::New(ranges_.size());
|
| + CharClass* cc = CharClass::New(static_cast<int>(ranges_.size()));
|
| int n = 0;
|
| for (iterator it = begin(); it != end(); ++it)
|
| cc->ranges_[n++] = *it;
|
| cc->nranges_ = n;
|
| - DCHECK_LE(n, ranges_.size());
|
| + DCHECK_LE(n, static_cast<int>(ranges_.size()));
|
| cc->nrunes_ = nrunes_;
|
| cc->folds_ascii_ = FoldsASCII();
|
| return cc;
|
|
|