forked from OSchip/llvm-project
Make llvm::Regex non-copyable but movable.
Based on a patch by Maciej Piechotka. llvm-svn: 198334
This commit is contained in:
parent
fd3279f27f
commit
7a2380486c
|
@ -17,6 +17,7 @@
|
|||
#ifndef LLVM_SUPPORT_REGEX_H
|
||||
#define LLVM_SUPPORT_REGEX_H
|
||||
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include <string>
|
||||
|
||||
struct llvm_regex;
|
||||
|
@ -45,6 +46,19 @@ namespace llvm {
|
|||
|
||||
/// Compiles the given regular expression \p Regex.
|
||||
Regex(StringRef Regex, unsigned Flags = NoFlags);
|
||||
Regex(const Regex &) LLVM_DELETED_FUNCTION;
|
||||
Regex &operator=(Regex regex) {
|
||||
std::swap(preg, regex.preg);
|
||||
std::swap(error, regex.error);
|
||||
return *this;
|
||||
}
|
||||
#if LLVM_HAS_RVALUE_REFERENCES
|
||||
Regex(Regex &®ex) {
|
||||
preg = regex.preg;
|
||||
error = regex.error;
|
||||
regex.preg = NULL;
|
||||
}
|
||||
#endif
|
||||
~Regex();
|
||||
|
||||
/// isValid - returns the error encountered during regex compilation, or
|
||||
|
|
|
@ -33,9 +33,11 @@ Regex::Regex(StringRef regex, unsigned Flags) {
|
|||
}
|
||||
|
||||
Regex::~Regex() {
|
||||
if (preg) {
|
||||
llvm_regfree(preg);
|
||||
delete preg;
|
||||
}
|
||||
}
|
||||
|
||||
bool Regex::isValid(std::string &Error) {
|
||||
if (!error)
|
||||
|
|
|
@ -140,4 +140,19 @@ TEST_F(RegexTest, IsValid) {
|
|||
EXPECT_EQ("invalid character range", Error);
|
||||
}
|
||||
|
||||
#if LLVM_HAS_RVALUE_REFERENCES
|
||||
TEST_F(RegexTest, MoveConstruct) {
|
||||
Regex r1("^[0-9]+$");
|
||||
Regex r2(std::move(r1));
|
||||
EXPECT_TRUE(r2.match("916"));
|
||||
}
|
||||
|
||||
TEST_F(RegexTest, MoveAssign) {
|
||||
Regex r1("^[0-9]+$");
|
||||
Regex r2("abc");
|
||||
r2 = std::move(r1);
|
||||
EXPECT_TRUE(r2.match("916"));
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue