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:
parent
0b8a967aca
commit
4fd18cbc9a
4 changed files with 32 additions and 0 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue