fix(tvix/eval): emit warnings from builtins.import again
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>
This commit is contained in:
parent
43b0416bd8
commit
5d9bfd7735
3 changed files with 35 additions and 14 deletions
|
@ -923,7 +923,8 @@ mod pure_builtins {
|
|||
|
||||
#[builtin("placeholder")]
|
||||
async fn builtin_placeholder(co: GenCo, #[lazy] _x: Value) -> Result<Value, ErrorKind> {
|
||||
generators::emit_warning(&co, WarningKind::NotImplemented("builtins.placeholder")).await;
|
||||
generators::emit_warning_kind(&co, WarningKind::NotImplemented("builtins.placeholder"))
|
||||
.await;
|
||||
Ok("<builtins.placeholder-is-not-implemented-in-tvix-yet>".into())
|
||||
}
|
||||
|
||||
|
@ -1017,7 +1018,7 @@ mod placeholder_builtins {
|
|||
#[lazy] _context: Value,
|
||||
#[lazy] val: Value,
|
||||
) -> Result<Value, ErrorKind> {
|
||||
generators::emit_warning(&co, WarningKind::NotImplemented("builtins.addErrorContext"))
|
||||
generators::emit_warning_kind(&co, WarningKind::NotImplemented("builtins.addErrorContext"))
|
||||
.await;
|
||||
Ok(val)
|
||||
}
|
||||
|
@ -1028,7 +1029,7 @@ mod placeholder_builtins {
|
|||
_name: Value,
|
||||
_attrset: Value,
|
||||
) -> Result<Value, ErrorKind> {
|
||||
generators::emit_warning(
|
||||
generators::emit_warning_kind(
|
||||
&co,
|
||||
WarningKind::NotImplemented("builtins.unsafeGetAttrsPos"),
|
||||
)
|
||||
|
|
|
@ -77,10 +77,9 @@ async fn import_impl(
|
|||
});
|
||||
}
|
||||
|
||||
// TODO: emit not just the warning kind, hmm
|
||||
// for warning in result.warnings {
|
||||
// vm.push_warning(warning);
|
||||
// }
|
||||
for warning in result.warnings {
|
||||
generators::emit_warning(&co, warning).await;
|
||||
}
|
||||
|
||||
// Compilation succeeded, we can construct a thunk from whatever it spat
|
||||
// out and return that.
|
||||
|
|
|
@ -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: {}",
|
||||
|
|
Loading…
Reference in a new issue