diff options
Diffstat (limited to 're2/tostring.cc')
-rw-r--r-- | re2/tostring.cc | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/re2/tostring.cc b/re2/tostring.cc index 555524f..278c310 100644 --- a/re2/tostring.cc +++ b/re2/tostring.cc @@ -5,7 +5,13 @@ // Format a regular expression structure as a string. // Tested by parse_test.cc +#include <string.h> +#include <string> + #include "util/util.h" +#include "util/logging.h" +#include "util/strutil.h" +#include "util/utf.h" #include "re2/regexp.h" #include "re2/walker-inl.h" @@ -42,7 +48,8 @@ class ToStringWalker : public Regexp::Walker<int> { private: string* t_; // The string the walker appends to. - DISALLOW_EVIL_CONSTRUCTORS(ToStringWalker); + ToStringWalker(const ToStringWalker&) = delete; + ToStringWalker& operator=(const ToStringWalker&) = delete; }; string Regexp::ToString() { @@ -94,6 +101,8 @@ int ToStringWalker::PreVisit(Regexp* re, int parent_arg, bool* stop) { case kRegexpCapture: t_->append("("); + if (re->cap() == 0) + LOG(DFATAL) << "kRegexpCapture cap() == 0"; if (re->name()) { t_->append("?P<"); t_->append(*re->name()); @@ -120,13 +129,12 @@ int ToStringWalker::PreVisit(Regexp* re, int parent_arg, bool* stop) { static void AppendLiteral(string *t, Rune r, bool foldcase) { if (r != 0 && r < 0x80 && strchr("(){}[]*+?|.^$\\", r)) { t->append(1, '\\'); - t->append(1, r); + t->append(1, static_cast<char>(r)); } else if (foldcase && 'a' <= r && r <= 'z') { - if ('a' <= r && r <= 'z') - r += 'A' - 'a'; + r -= 'a' - 'A'; t->append(1, '['); - t->append(1, r); - t->append(1, r + 'a' - 'A'); + t->append(1, static_cast<char>(r)); + t->append(1, static_cast<char>(r) + 'a' - 'A'); t->append(1, ']'); } else { AppendCCRange(t, r, r); @@ -154,12 +162,14 @@ int ToStringWalker::PostVisit(Regexp* re, int parent_arg, int pre_arg, break; case kRegexpLiteral: - AppendLiteral(t_, re->rune(), re->parse_flags() & Regexp::FoldCase); + AppendLiteral(t_, re->rune(), + (re->parse_flags() & Regexp::FoldCase) != 0); break; case kRegexpLiteralString: for (int i = 0; i < re->nrunes(); i++) - AppendLiteral(t_, re->runes()[i], re->parse_flags() & Regexp::FoldCase); + AppendLiteral(t_, re->runes()[i], + (re->parse_flags() & Regexp::FoldCase) != 0); if (prec < PrecConcat) t_->append(")"); break; @@ -297,7 +307,7 @@ static void AppendCCChar(string* t, Rune r) { if (0x20 <= r && r <= 0x7E) { if (strchr("[]^-\\", r)) t->append("\\"); - t->append(1, r); + t->append(1, static_cast<char>(r)); return; } switch (r) { |