X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FSupport%2FRegex.cpp;h=f7fe1e4c7925d635f82e7fa6fb4c016fb233550f;hb=f359f7ef8c8cccea0c830308289fe7fe2c148bdc;hp=3e112df6c77be6f082467f865e44d948344b247c;hpb=76eb77dd52c4ec215e79e25992f04e3095afe5df;p=oota-llvm.git diff --git a/lib/Support/Regex.cpp b/lib/Support/Regex.cpp index 3e112df6c77..f7fe1e4c792 100644 --- a/lib/Support/Regex.cpp +++ b/lib/Support/Regex.cpp @@ -33,15 +33,17 @@ Regex::Regex(StringRef regex, unsigned Flags) { } Regex::~Regex() { - llvm_regfree(preg); - delete preg; + if (preg) { + llvm_regfree(preg); + delete preg; + } } bool Regex::isValid(std::string &Error) { if (!error) return true; - size_t len = llvm_regerror(error, preg, NULL, 0); + size_t len = llvm_regerror(error, preg, nullptr, 0); Error.resize(len - 1); llvm_regerror(error, preg, &Error[0], len); @@ -169,37 +171,22 @@ std::string Regex::sub(StringRef Repl, StringRef String, return Res; } +// These are the special characters matched in functions like "p_ere_exp". +static const char RegexMetachars[] = "()^$|*+?.[]\\{}"; + bool Regex::isLiteralERE(StringRef Str) { // Check for regex metacharacters. This list was derived from our regex // implementation in regcomp.c and double checked against the POSIX extended // regular expression specification. - return Str.find_first_of("()^$|*+?.[]\\{}") == StringRef::npos; + return Str.find_first_of(RegexMetachars) == StringRef::npos; } std::string Regex::escape(StringRef String) { std::string RegexStr; - for (unsigned i = 0, e = String.size(); i != e; ++i) { - switch (String[i]) { - // These are the special characters matched in "p_ere_exp". - case '(': - case ')': - case '^': - case '$': - case '|': - case '*': - case '+': - case '?': - case '.': - case '[': - case '\\': - case '{': + if (strchr(RegexMetachars, String[i])) RegexStr += '\\'; - // FALL THROUGH. - default: - RegexStr += String[i]; - break; - } + RegexStr += String[i]; } return RegexStr;