Lines Matching refs:re
60 bool PushRegexp(Regexp* re);
180 for (Regexp* re = stacktop_; re != NULL; re = next) { in ~ParseState() local
181 next = re->down_; in ~ParseState()
182 re->down_ = NULL; in ~ParseState()
183 if (re->op() == kLeftParen) in ~ParseState()
184 delete re->name_; in ~ParseState()
185 re->Decref(); in ~ParseState()
192 Regexp* Regexp::ParseState::FinishRegexp(Regexp* re) { in FinishRegexp() argument
193 if (re == NULL) in FinishRegexp()
195 re->down_ = NULL; in FinishRegexp()
197 if (re->op_ == kRegexpCharClass && re->ccb_ != NULL) { in FinishRegexp()
198 CharClassBuilder* ccb = re->ccb_; in FinishRegexp()
199 re->ccb_ = NULL; in FinishRegexp()
200 re->cc_ = ccb->GetCharClass(); in FinishRegexp()
204 return re; in FinishRegexp()
209 bool Regexp::ParseState::PushRegexp(Regexp* re) { in PushRegexp() argument
217 if (re->op_ == kRegexpCharClass) { in PushRegexp()
218 if (re->ccb_->size() == 1) { in PushRegexp()
219 Rune r = re->ccb_->begin()->lo; in PushRegexp()
220 re->Decref(); in PushRegexp()
221 re = new Regexp(kRegexpLiteral, flags_); in PushRegexp()
222 re->rune_ = r; in PushRegexp()
223 } else if (re->ccb_->size() == 2) { in PushRegexp()
224 Rune r = re->ccb_->begin()->lo; in PushRegexp()
225 if ('A' <= r && r <= 'Z' && re->ccb_->Contains(r + 'a' - 'A')) { in PushRegexp()
226 re->Decref(); in PushRegexp()
227 re = new Regexp(kRegexpLiteral, flags_ | FoldCase); in PushRegexp()
228 re->rune_ = r + 'a' - 'A'; in PushRegexp()
233 if (!IsMarker(re->op())) in PushRegexp()
234 re->simple_ = re->ComputeSimple(); in PushRegexp()
235 re->down_ = stacktop_; in PushRegexp()
236 stacktop_ = re; in PushRegexp()
371 Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase); in PushLiteral() local
372 re->ccb_ = new CharClassBuilder; in PushLiteral()
376 re->ccb_->AddRange(r, r); in PushLiteral()
380 re->ccb_->RemoveAbove(rune_max_); in PushLiteral()
381 return PushRegexp(re); in PushLiteral()
392 Regexp* re = new Regexp(kRegexpLiteral, flags_); in PushLiteral() local
393 re->rune_ = r; in PushLiteral()
394 return PushRegexp(re); in PushLiteral()
431 Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase); in PushDot() local
432 re->ccb_ = new CharClassBuilder; in PushDot()
433 re->ccb_->AddRange(0, '\n' - 1); in PushDot()
434 re->ccb_->AddRange('\n' + 1, rune_max_); in PushDot()
435 return PushRegexp(re); in PushDot()
440 Regexp* re = new Regexp(op, flags_); in PushSimpleOp() local
441 return PushRegexp(re); in PushSimpleOp()
457 Regexp* re = new Regexp(op, fl); in PushRepeatOp() local
458 re->AllocSub(1); in PushRepeatOp()
459 re->down_ = stacktop_->down_; in PushRepeatOp()
460 re->sub()[0] = FinishRegexp(stacktop_); in PushRepeatOp()
461 re->simple_ = re->ComputeSimple(); in PushRepeatOp()
462 stacktop_ = re; in PushRepeatOp()
484 Regexp* re = new Regexp(kRegexpRepeat, fl); in PushRepetition() local
485 re->min_ = min; in PushRepetition()
486 re->max_ = max; in PushRepetition()
487 re->AllocSub(1); in PushRepetition()
488 re->down_ = stacktop_->down_; in PushRepetition()
489 re->sub()[0] = FinishRegexp(stacktop_); in PushRepetition()
490 re->simple_ = re->ComputeSimple(); in PushRepetition()
492 stacktop_ = re; in PushRepetition()
504 Regexp* re = new Regexp(kLeftParen, flags_); in DoLeftParen() local
505 re->cap_ = ++ncap_; in DoLeftParen()
507 re->name_ = new string(name.as_string()); in DoLeftParen()
508 return PushRegexp(re); in DoLeftParen()
513 Regexp* re = new Regexp(kLeftParen, flags_); in DoLeftParenNoCapture() local
514 re->cap_ = -1; in DoLeftParenNoCapture()
515 return PushRegexp(re); in DoLeftParenNoCapture()
609 Regexp* re = r2; in DoRightParen() local
610 flags_ = re->parse_flags(); in DoRightParen()
613 if (re->cap_ > 0) { in DoRightParen()
614 re->op_ = kRegexpCapture; in DoRightParen()
616 re->AllocSub(1); in DoRightParen()
617 re->sub()[0] = FinishRegexp(r1); in DoRightParen()
618 re->simple_ = re->ComputeSimple(); in DoRightParen()
620 re->Decref(); in DoRightParen()
621 re = r1; in DoRightParen()
623 return PushRegexp(re); in DoRightParen()
629 Regexp* re = stacktop_; in DoFinish() local
630 if (re != NULL && re->down_ != NULL) { in DoFinish()
636 return FinishRegexp(re); in DoFinish()
642 Regexp* Regexp::LeadingRegexp(Regexp* re) { in LeadingRegexp() argument
643 if (re->op() == kRegexpEmptyMatch) in LeadingRegexp()
645 if (re->op() == kRegexpConcat && re->nsub() >= 2) { in LeadingRegexp()
646 Regexp** sub = re->sub(); in LeadingRegexp()
651 return re; in LeadingRegexp()
658 Regexp* Regexp::RemoveLeadingRegexp(Regexp* re) { in RemoveLeadingRegexp() argument
659 if (re->op() == kRegexpEmptyMatch) in RemoveLeadingRegexp()
660 return re; in RemoveLeadingRegexp()
661 if (re->op() == kRegexpConcat && re->nsub() >= 2) { in RemoveLeadingRegexp()
662 Regexp** sub = re->sub(); in RemoveLeadingRegexp()
664 return re; in RemoveLeadingRegexp()
667 if (re->nsub() == 2) { in RemoveLeadingRegexp()
671 re->Decref(); in RemoveLeadingRegexp()
675 re->nsub_--; in RemoveLeadingRegexp()
676 memmove(sub, sub + 1, re->nsub_ * sizeof sub[0]); in RemoveLeadingRegexp()
677 return re; in RemoveLeadingRegexp()
679 Regexp::ParseFlags pf = re->parse_flags(); in RemoveLeadingRegexp()
680 re->Decref(); in RemoveLeadingRegexp()
687 Rune* Regexp::LeadingString(Regexp* re, int *nrune, in LeadingString() argument
689 while (re->op() == kRegexpConcat && re->nsub() > 0) in LeadingString()
690 re = re->sub()[0]; in LeadingString()
692 *flags = static_cast<Regexp::ParseFlags>(re->parse_flags_ & Regexp::FoldCase); in LeadingString()
694 if (re->op() == kRegexpLiteral) { in LeadingString()
696 return &re->rune_; in LeadingString()
699 if (re->op() == kRegexpLiteralString) { in LeadingString()
700 *nrune = re->nrunes_; in LeadingString()
701 return re->runes_; in LeadingString()
710 void Regexp::RemoveLeadingString(Regexp* re, int n) { in RemoveLeadingString() argument
718 while (re->op() == kRegexpConcat) { in RemoveLeadingString()
720 stk[d++] = re; in RemoveLeadingString()
721 re = re->sub()[0]; in RemoveLeadingString()
725 if (re->op() == kRegexpLiteral) { in RemoveLeadingString()
726 re->rune_ = 0; in RemoveLeadingString()
727 re->op_ = kRegexpEmptyMatch; in RemoveLeadingString()
728 } else if (re->op() == kRegexpLiteralString) { in RemoveLeadingString()
729 if (n >= re->nrunes_) { in RemoveLeadingString()
730 delete[] re->runes_; in RemoveLeadingString()
731 re->runes_ = NULL; in RemoveLeadingString()
732 re->nrunes_ = 0; in RemoveLeadingString()
733 re->op_ = kRegexpEmptyMatch; in RemoveLeadingString()
734 } else if (n == re->nrunes_ - 1) { in RemoveLeadingString()
735 Rune rune = re->runes_[re->nrunes_ - 1]; in RemoveLeadingString()
736 delete[] re->runes_; in RemoveLeadingString()
737 re->runes_ = NULL; in RemoveLeadingString()
738 re->nrunes_ = 0; in RemoveLeadingString()
739 re->rune_ = rune; in RemoveLeadingString()
740 re->op_ = kRegexpLiteral; in RemoveLeadingString()
742 re->nrunes_ -= n; in RemoveLeadingString()
743 memmove(re->runes_, re->runes_ + n, re->nrunes_ * sizeof re->runes_[0]); in RemoveLeadingString()
749 re = stk[d]; in RemoveLeadingString()
750 Regexp** sub = re->sub(); in RemoveLeadingString()
755 switch (re->nsub()) { in RemoveLeadingString()
759 LOG(DFATAL) << "Concat of " << re->nsub(); in RemoveLeadingString()
760 re->submany_ = NULL; in RemoveLeadingString()
761 re->op_ = kRegexpEmptyMatch; in RemoveLeadingString()
768 re->Swap(old); in RemoveLeadingString()
775 re->nsub_--; in RemoveLeadingString()
776 memmove(sub, sub + 1, re->nsub_ * sizeof sub[0]); in RemoveLeadingString()
954 Regexp* re = sub[j]; in FactorAlternationRecursive() local
955 if (re->op() == kRegexpCharClass) { in FactorAlternationRecursive()
956 CharClass* cc = re->cc(); in FactorAlternationRecursive()
959 } else if (re->op() == kRegexpLiteral) { in FactorAlternationRecursive()
960 ccb.AddRangeFlags(re->rune(), re->rune(), re->parse_flags()); in FactorAlternationRecursive()
962 LOG(DFATAL) << "RE2: unexpected op: " << re->op() << " " in FactorAlternationRecursive()
963 << re->ToString(); in FactorAlternationRecursive()
965 re->Decref(); in FactorAlternationRecursive()
1031 Regexp* re = ConcatOrAlternate(op, subs, n, flags_, true); in DoCollapse() local
1033 re->simple_ = re->ComputeSimple(); in DoCollapse()
1034 re->down_ = next; in DoCollapse()
1035 stacktop_ = re; in DoCollapse()
1044 Regexp* re = new Regexp(kRegexpEmptyMatch, flags_); in DoConcatenation() local
1045 PushRegexp(re); in DoConcatenation()
1673 Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase); in ParseCharClass() local
1674 re->ccb_ = new CharClassBuilder; in ParseCharClass()
1682 re->ccb_->AddRange('\n', '\n'); in ParseCharClass()
1696 re->Decref(); in ParseCharClass()
1701 re->Decref(); in ParseCharClass()
1708 switch (ParseCCName(s, flags_, re->ccb_, status)) { in ParseCharClass()
1712 re->Decref(); in ParseCharClass()
1723 switch (ParseUnicodeGroup(s, flags_, re->ccb_, status)) { in ParseCharClass()
1727 re->Decref(); in ParseCharClass()
1737 AddUGroup(re->ccb_, g, g->sign, flags_); in ParseCharClass()
1744 re->Decref(); in ParseCharClass()
1752 re->ccb_->AddRangeFlags(rr.lo, rr.hi, flags_ | Regexp::ClassNL); in ParseCharClass()
1757 re->Decref(); in ParseCharClass()
1763 re->ccb_->Negate(); in ParseCharClass()
1764 re->ccb_->RemoveAbove(rune_max_); in ParseCharClass()
1766 *out_re = re; in ParseCharClass()
2046 Regexp* re; in Parse() local
2047 if (!ps.ParseCharClass(&t, &re, status)) in Parse()
2049 if (!ps.PushRegexp(re)) in Parse()
2174 Regexp* re = new Regexp(kRegexpCharClass, ps.flags() & ~FoldCase); in Parse() local
2175 re->ccb_ = new CharClassBuilder; in Parse()
2176 switch (ParseUnicodeGroup(&t, ps.flags(), re->ccb_, status)) { in Parse()
2178 if (!ps.PushRegexp(re)) in Parse()
2182 re->Decref(); in Parse()
2185 re->Decref(); in Parse()
2192 Regexp* re = new Regexp(kRegexpCharClass, ps.flags() & ~FoldCase); in Parse() local
2193 re->ccb_ = new CharClassBuilder; in Parse()
2194 AddUGroup(re->ccb_, g, g->sign, ps.flags()); in Parse()
2195 if (!ps.PushRegexp(re)) in Parse()