core: EvalSequence to handle EvalEarlyExitError
An earlier commit today reworked this to handle non-fatal errors, which are returned "smuggled" as a special type of error to avoid changing the EvalNode interface. Unfortunately, that change then broke the _other_ special thing we smuggle through the error return path: early exit. Now we'll handle them both. This is not perfect because the early-exit path causes us to discard any warnings we've already collected, but it's more important that we bail early than retain warnings.
This commit is contained in:
parent
b6d0abef1d
commit
798adf3ce6
|
@ -18,6 +18,11 @@ func (n *EvalSequence) Eval(ctx EvalContext) (interface{}, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := EvalRaw(n, ctx); err != nil {
|
if _, err := EvalRaw(n, ctx); err != nil {
|
||||||
|
if _, isEarlyExit := err.(EvalEarlyExitError); isEarlyExit {
|
||||||
|
// In this path we abort early, losing any non-error
|
||||||
|
// diagnostics we saw earlier.
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
diags = diags.Append(err)
|
diags = diags.Append(err)
|
||||||
if diags.HasErrors() {
|
if diags.HasErrors() {
|
||||||
// Halt if we get some errors, but warnings are okay.
|
// Halt if we get some errors, but warnings are okay.
|
||||||
|
|
Loading…
Reference in New Issue