mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
[Support][Error] Unfriend FileError. It is not special.
FileError doesn't need direct access to Error's internals as it can access the payload via handleErrors. (ErrorList remains special: it is not possible to write a handler for it, due to the special auto-unpacking treatment that it receives from handleErrors.)
This commit is contained in:
parent
4ab9ed6b8f
commit
4783cb036c
@ -155,10 +155,10 @@ private:
|
||||
/// they're moved-assigned or constructed from Success values that have already
|
||||
/// been checked. This enforces checking through all levels of the call stack.
|
||||
class LLVM_NODISCARD Error {
|
||||
// Both ErrorList and FileError need to be able to yank ErrorInfoBase
|
||||
// pointers out of this class to add to the error list.
|
||||
// ErrorList needs to be able to yank ErrorInfoBase pointers out of Errors
|
||||
// to add to the error list. It can't rely on handleErrors for this, since
|
||||
// handleErrors does not support ErrorList handlers.
|
||||
friend class ErrorList;
|
||||
friend class FileError;
|
||||
|
||||
// handleErrors needs to be able to set the Checked flag.
|
||||
template <typename... HandlerTs>
|
||||
@ -1251,8 +1251,14 @@ private:
|
||||
}
|
||||
|
||||
static Error build(const Twine &F, Optional<size_t> Line, Error E) {
|
||||
std::unique_ptr<ErrorInfoBase> Payload;
|
||||
handleAllErrors(std::move(E),
|
||||
[&](std::unique_ptr<ErrorInfoBase> EIB) -> Error {
|
||||
Payload = std::move(EIB);
|
||||
return Error::success();
|
||||
});
|
||||
return Error(
|
||||
std::unique_ptr<FileError>(new FileError(F, Line, E.takePayload())));
|
||||
std::unique_ptr<FileError>(new FileError(F, Line, std::move(Payload))));
|
||||
}
|
||||
|
||||
std::string FileName;
|
||||
|
Loading…
Reference in New Issue
Block a user