forked from lix-project/lix
Add comments
(cherry picked from commit 474fc4078acbe062fcc31ce91c69c8f33bf00d5f)
Change-Id: I9f78f7afd8468d0ab676c0f60c4f7d6140128583
This commit is contained in:
parent
f27a27f49e
commit
f536696b73
|
@ -91,7 +91,7 @@ void EvalErrorBuilder<T>::debugThrow()
|
||||||
|
|
||||||
// `EvalState` is the only class that can construct an `EvalErrorBuilder`,
|
// `EvalState` is the only class that can construct an `EvalErrorBuilder`,
|
||||||
// and it does so in dynamic storage. This is the final method called on
|
// and it does so in dynamic storage. This is the final method called on
|
||||||
// any such instancve and must delete itself before throwing the underlying
|
// any such instance and must delete itself before throwing the underlying
|
||||||
// error.
|
// error.
|
||||||
auto error = std::move(this->error);
|
auto error = std::move(this->error);
|
||||||
delete this;
|
delete this;
|
||||||
|
|
|
@ -57,6 +57,11 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `EvalErrorBuilder`s may only be constructed by `EvalState`. The `debugThrow`
|
||||||
|
* method must be the final method in any such `EvalErrorBuilder` usage, and it
|
||||||
|
* handles deleting the object.
|
||||||
|
*/
|
||||||
template<class T>
|
template<class T>
|
||||||
class EvalErrorBuilder final
|
class EvalErrorBuilder final
|
||||||
{
|
{
|
||||||
|
@ -91,29 +96,10 @@ public:
|
||||||
[[nodiscard, gnu::noinline]] EvalErrorBuilder<T> &
|
[[nodiscard, gnu::noinline]] EvalErrorBuilder<T> &
|
||||||
addTrace(PosIdx pos, std::string_view formatString, const Args &... formatArgs);
|
addTrace(PosIdx pos, std::string_view formatString, const Args &... formatArgs);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete the `EvalErrorBuilder` and throw the underlying exception.
|
||||||
|
*/
|
||||||
[[gnu::noinline, gnu::noreturn]] void debugThrow();
|
[[gnu::noinline, gnu::noreturn]] void debugThrow();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* The size needed to allocate any `EvalErrorBuilder<T>`.
|
|
||||||
*
|
|
||||||
* The list of classes here needs to be kept in sync with the list of `template
|
|
||||||
* class` declarations in `eval-error.cc`.
|
|
||||||
*
|
|
||||||
* This is used by `EvalState` to preallocate a buffer of sufficient size for
|
|
||||||
* any `EvalErrorBuilder<T>` to avoid allocating while evaluating Nix code.
|
|
||||||
*/
|
|
||||||
constexpr size_t EVAL_ERROR_BUILDER_SIZE = std::max({
|
|
||||||
sizeof(EvalErrorBuilder<EvalError>),
|
|
||||||
sizeof(EvalErrorBuilder<AssertionError>),
|
|
||||||
sizeof(EvalErrorBuilder<ThrownError>),
|
|
||||||
sizeof(EvalErrorBuilder<Abort>),
|
|
||||||
sizeof(EvalErrorBuilder<TypeError>),
|
|
||||||
sizeof(EvalErrorBuilder<UndefinedVarError>),
|
|
||||||
sizeof(EvalErrorBuilder<MissingArgumentError>),
|
|
||||||
sizeof(EvalErrorBuilder<InfiniteRecursionError>),
|
|
||||||
sizeof(EvalErrorBuilder<CachedEvalError>),
|
|
||||||
sizeof(EvalErrorBuilder<InvalidPathError>),
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue