forked from OSchip/llvm-project
Make LookupResult movable again.
We lost copy semantics in r263730, because it only worked for a few very specific cases. Move semantics don't have this issue. Sadly the implementation is a bit messy but I don't know how to clean it up without losing support for msvc 2013 :/ llvm-svn: 263785
This commit is contained in:
parent
129fa9a048
commit
d2f5bf7815
|
@ -190,6 +190,44 @@ public:
|
|||
LookupResult(const LookupResult &) = delete;
|
||||
LookupResult &operator=(const LookupResult &) = delete;
|
||||
|
||||
LookupResult(LookupResult &&Other)
|
||||
: ResultKind(std::move(Other.ResultKind)),
|
||||
Ambiguity(std::move(Other.Ambiguity)), Decls(std::move(Other.Decls)),
|
||||
Paths(std::move(Other.Paths)),
|
||||
NamingClass(std::move(Other.NamingClass)),
|
||||
BaseObjectType(std::move(Other.BaseObjectType)),
|
||||
SemaPtr(std::move(Other.SemaPtr)), NameInfo(std::move(Other.NameInfo)),
|
||||
NameContextRange(std::move(Other.NameContextRange)),
|
||||
LookupKind(std::move(Other.LookupKind)), IDNS(std::move(Other.IDNS)),
|
||||
Redecl(std::move(Other.Redecl)), HideTags(std::move(Other.HideTags)),
|
||||
Diagnose(std::move(Other.Diagnose)),
|
||||
AllowHidden(std::move(Other.AllowHidden)),
|
||||
Shadowed(std::move(Other.Shadowed)) {
|
||||
Other.Paths = nullptr;
|
||||
Other.Diagnose = false;
|
||||
}
|
||||
LookupResult &operator=(LookupResult &&Other) {
|
||||
ResultKind = std::move(Other.ResultKind);
|
||||
Ambiguity = std::move(Other.Ambiguity);
|
||||
Decls = std::move(Other.Decls);
|
||||
Paths = std::move(Other.Paths);
|
||||
NamingClass = std::move(Other.NamingClass);
|
||||
BaseObjectType = std::move(Other.BaseObjectType);
|
||||
SemaPtr = std::move(Other.SemaPtr);
|
||||
NameInfo = std::move(Other.NameInfo);
|
||||
NameContextRange = std::move(Other.NameContextRange);
|
||||
LookupKind = std::move(Other.LookupKind);
|
||||
IDNS = std::move(Other.IDNS);
|
||||
Redecl = std::move(Other.Redecl);
|
||||
HideTags = std::move(Other.HideTags);
|
||||
Diagnose = std::move(Other.Diagnose);
|
||||
AllowHidden = std::move(Other.AllowHidden);
|
||||
Shadowed = std::move(Other.Shadowed);
|
||||
Other.Paths = nullptr;
|
||||
Other.Diagnose = false;
|
||||
return *this;
|
||||
}
|
||||
|
||||
~LookupResult() {
|
||||
if (Diagnose) diagnose();
|
||||
if (Paths) deletePaths(Paths);
|
||||
|
|
Loading…
Reference in New Issue