feat(tvix/eval): Implement builtins.tryEval

With asserts compiled using conditional jumps, this ends up being quite
straightforward - the only real tricky bit is that we have to know
whether an error can or can't be handled.

Change-Id: I75617da73b7a9c5cdd888c0e26ae81d2c5c0d714
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6924
Reviewed-by: sterni <sternenseemann@systemli.org>
Autosubmit: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Griffin Smith 2022-10-10 11:54:53 -04:00 committed by clbot
parent 0b8a967aca
commit 4fd18cbc9a
4 changed files with 32 additions and 0 deletions

View file

@ -158,6 +158,17 @@ impl From<io::Error> for ErrorKind {
}
}
impl ErrorKind {
/// Returns `true` if this error can be caught by `builtins.tryEval`
pub fn is_catchable(&self) -> bool {
match self {
Self::Throw(_) | Self::AssertionFailed => true,
Self::ThunkForce(err) => err.kind.is_catchable(),
_ => false,
}
}
}
#[derive(Clone, Debug)]
pub struct Error {
pub kind: ErrorKind,