mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-29 22:50:55 +00:00
Make llvm::Regex non-copyable but movable.
Based on a patch by Maciej Piechotka. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198334 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f828e82891
commit
c265f06697
@ -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,8 +33,10 @@ 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) {
|
||||
|
@ -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
Block a user