aboutsummaryrefslogtreecommitdiff
path: root/re2/tostring.cc
diff options
context:
space:
mode:
Diffstat (limited to 're2/tostring.cc')
-rw-r--r--re2/tostring.cc28
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) {