diff options
author | Vincent Ambo <mail@tazj.in> | 2023-03-06T14·23+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2023-03-13T20·30+0000 |
commit | 5d9bfd7735373cde72ebac4be4a05f1c846c13ba (patch) | |
tree | 1420e8d149454eca61c7cba7970fdb7e524854a9 /tvix/eval/src/vm/generators.rs | |
parent | 43b0416bd8b5c4c7c99b146f8cee7b1a979a7782 (diff) |
fix(tvix/eval): emit warnings from builtins.import again r/5983
Wires up generator logic to emit warnings that already have spans attached again. Change-Id: I9f878cec3b9d4f6f7819e7c71bab7ae70bd3f08b Reviewed-on: https://cl.tvl.fyi/c/depot/+/8224 Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Diffstat (limited to 'tvix/eval/src/vm/generators.rs')
-rw-r--r-- | tvix/eval/src/vm/generators.rs | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/tvix/eval/src/vm/generators.rs b/tvix/eval/src/vm/generators.rs index 9b055eb1c826..65b7287a69e3 100644 --- a/tvix/eval/src/vm/generators.rs +++ b/tvix/eval/src/vm/generators.rs @@ -15,7 +15,7 @@ use std::fmt::Display; use std::future::Future; use crate::value::{PointerEquality, SharedThunkSet}; -use crate::warnings::WarningKind; +use crate::warnings::{EvalWarning, WarningKind}; use crate::FileType; use crate::NixString; @@ -85,8 +85,12 @@ pub enum GeneratorRequest { light_span: LightSpan, }, - /// Emit a runtime warning through the VM. Receives a NoOp-response. - EmitWarning(WarningKind), + /// Emit a runtime warning (already containing a span) through the VM. + EmitWarning(EvalWarning), + + /// Emit a runtime warning through the VM. The span of the current generator + /// is used for the final warning. + EmitWarningKind(WarningKind), /// Request a lookup in the VM's import cache, which tracks the /// thunks yielded by previously imported files. @@ -150,6 +154,7 @@ impl Display for GeneratorRequest { write!(f, "enter_lambda({:p})", *lambda) } GeneratorRequest::EmitWarning(_) => write!(f, "emit_warning"), + GeneratorRequest::EmitWarningKind(_) => write!(f, "emit_warning_kind"), GeneratorRequest::ImportCacheLookup(p) => { write!(f, "import_cache_lookup({})", p.to_string_lossy()) } @@ -374,7 +379,12 @@ impl<'o> VM<'o> { return Ok(false); } - GeneratorRequest::EmitWarning(kind) => { + GeneratorRequest::EmitWarning(warning) => { + self.push_warning(warning); + message = GeneratorResponse::Empty; + } + + GeneratorRequest::EmitWarningKind(kind) => { self.emit_warning(kind); message = GeneratorResponse::Empty; } @@ -611,9 +621,20 @@ pub(crate) async fn check_equality( } } -/// Emit a runtime warning. -pub(crate) async fn emit_warning(co: &GenCo, kind: WarningKind) { - match co.yield_(GeneratorRequest::EmitWarning(kind)).await { +/// Emit a fully constructed runtime warning. +pub(crate) async fn emit_warning(co: &GenCo, warning: EvalWarning) { + match co.yield_(GeneratorRequest::EmitWarning(warning)).await { + GeneratorResponse::Empty => {} + msg => panic!( + "Tvix bug: VM responded with incorrect generator message: {}", + msg + ), + } +} + +/// Emit a runtime warning with the span of the current generator. +pub(crate) async fn emit_warning_kind(co: &GenCo, kind: WarningKind) { + match co.yield_(GeneratorRequest::EmitWarningKind(kind)).await { GeneratorResponse::Empty => {} msg => panic!( "Tvix bug: VM responded with incorrect generator message: {}", |