Index: third_party/re2/re2/testing/dump.cc |
diff --git a/third_party/re2/re2/testing/dump.cc b/third_party/re2/re2/testing/dump.cc |
deleted file mode 100644 |
index 97030390df5e3396b52d7450e0ddbf16e99e715f..0000000000000000000000000000000000000000 |
--- a/third_party/re2/re2/testing/dump.cc |
+++ /dev/null |
@@ -1,166 +0,0 @@ |
-// Copyright 2006 The RE2 Authors. All Rights Reserved. |
-// Use of this source code is governed by a BSD-style |
-// license that can be found in the LICENSE file. |
- |
-// Dump the regexp into a string showing structure. |
-// Tested by parse_unittest.cc |
- |
-// This function traverses the regexp recursively, |
-// meaning that on inputs like Regexp::Simplify of |
-// a{100}{100}{100}{100}{100}{100}{100}{100}{100}{100}, |
-// it takes time and space exponential in the size of the |
-// original regular expression. It can also use stack space |
-// linear in the size of the regular expression for inputs |
-// like ((((((((((((((((a*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*. |
-// IT IS NOT SAFE TO CALL FROM PRODUCTION CODE. |
-// As a result, Dump is provided only in the testing |
-// library (see BUILD). |
- |
-#include <string> |
-#include <vector> |
-#include "util/test.h" |
-#include "re2/stringpiece.h" |
-#include "re2/regexp.h" |
- |
-// Cause a link error if this file is used outside of testing. |
-DECLARE_string(test_tmpdir); |
- |
-namespace re2 { |
- |
-static const char* kOpcodeNames[] = { |
- "bad", |
- "no", |
- "emp", |
- "lit", |
- "str", |
- "cat", |
- "alt", |
- "star", |
- "plus", |
- "que", |
- "rep", |
- "cap", |
- "dot", |
- "byte", |
- "bol", |
- "eol", |
- "wb", // kRegexpWordBoundary |
- "nwb", // kRegexpNoWordBoundary |
- "bot", |
- "eot", |
- "cc", |
- "match", |
-}; |
- |
-// Create string representation of regexp with explicit structure. |
-// Nothing pretty, just for testing. |
-static void DumpRegexpAppending(Regexp* re, string* s) { |
- if (re->op() < 0 || re->op() >= arraysize(kOpcodeNames)) { |
- StringAppendF(s, "op%d", re->op()); |
- } else { |
- switch (re->op()) { |
- default: |
- break; |
- case kRegexpStar: |
- case kRegexpPlus: |
- case kRegexpQuest: |
- case kRegexpRepeat: |
- if (re->parse_flags() & Regexp::NonGreedy) |
- s->append("n"); |
- break; |
- } |
- s->append(kOpcodeNames[re->op()]); |
- if (re->op() == kRegexpLiteral && (re->parse_flags() & Regexp::FoldCase)) { |
- Rune r = re->rune(); |
- if ('a' <= r && r <= 'z') |
- s->append("fold"); |
- } |
- if (re->op() == kRegexpLiteralString && (re->parse_flags() & Regexp::FoldCase)) { |
- for (int i = 0; i < re->nrunes(); i++) { |
- Rune r = re->runes()[i]; |
- if ('a' <= r && r <= 'z') { |
- s->append("fold"); |
- break; |
- } |
- } |
- } |
- } |
- s->append("{"); |
- switch (re->op()) { |
- default: |
- break; |
- case kRegexpEndText: |
- if (!(re->parse_flags() & Regexp::WasDollar)) { |
- s->append("\\z"); |
- } |
- break; |
- case kRegexpLiteral: { |
- Rune r = re->rune(); |
- char buf[UTFmax+1]; |
- buf[runetochar(buf, &r)] = 0; |
- s->append(buf); |
- break; |
- } |
- case kRegexpLiteralString: |
- for (int i = 0; i < re->nrunes(); i++) { |
- Rune r = re->runes()[i]; |
- char buf[UTFmax+1]; |
- buf[runetochar(buf, &r)] = 0; |
- s->append(buf); |
- } |
- break; |
- case kRegexpConcat: |
- case kRegexpAlternate: |
- for (int i = 0; i < re->nsub(); i++) |
- DumpRegexpAppending(re->sub()[i], s); |
- break; |
- case kRegexpStar: |
- case kRegexpPlus: |
- case kRegexpQuest: |
- DumpRegexpAppending(re->sub()[0], s); |
- break; |
- case kRegexpCapture: |
- if (re->cap() == 0) |
- LOG(DFATAL) << "kRegexpCapture cap() == 0"; |
- if (re->name()) { |
- s->append(*re->name()); |
- s->append(":"); |
- } |
- DumpRegexpAppending(re->sub()[0], s); |
- break; |
- case kRegexpRepeat: |
- s->append(StringPrintf("%d,%d ", re->min(), re->max())); |
- DumpRegexpAppending(re->sub()[0], s); |
- break; |
- case kRegexpCharClass: { |
- string sep; |
- for (CharClass::iterator it = re->cc()->begin(); |
- it != re->cc()->end(); ++it) { |
- RuneRange rr = *it; |
- s->append(sep); |
- if (rr.lo == rr.hi) |
- s->append(StringPrintf("%#x", rr.lo)); |
- else |
- s->append(StringPrintf("%#x-%#x", rr.lo, rr.hi)); |
- sep = " "; |
- } |
- break; |
- } |
- } |
- s->append("}"); |
-} |
- |
-string Regexp::Dump() { |
- string s; |
- |
- // Make sure being called from a unit test. |
- if (FLAGS_test_tmpdir.empty()) { |
- LOG(ERROR) << "Cannot use except for testing."; |
- return s; |
- } |
- |
- DumpRegexpAppending(this, &s); |
- return s; |
-} |
- |
-} // namespace re2 |