fix(tvix/eval): add unimplemented __curPos and builtins.filterSource

This commit adds __curPos (to the global scope, yuck) and
builtins.filterSource.  These are not implemented; forcing them will
produce the same result as `throw "message"`.

Unfortunately these two post-2.3 features are used throughout
nixpkgs.  Since an unresolved indentifier is a catchable error, this
breaks the entire release eval.  With this commit, it simply causes
those broken packages that use these features to appear as they are:
broken.

Change-Id: Ib43dea571f6a9fab4d54869349f80ee4ec5424c2
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10297
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
Autosubmit: Adam Joseph <adam@westernsemico.com>
This commit is contained in:
Adam Joseph 2023-12-11 23:34:47 -08:00 committed by clbot
parent bb1e79e5d1
commit 8d4aa2c15c
3 changed files with 19 additions and 0 deletions

View file

@ -377,6 +377,15 @@ mod pure_builtins {
toml::from_str(&toml_str).map_err(|err| err.into())
}
#[builtin("filterSource")]
#[allow(non_snake_case)]
async fn builtin_filterSource(_co: GenCo, #[lazy] _e: Value) -> Result<Value, ErrorKind> {
// TODO: implement for nixpkgs compatibility
Ok(Value::Catchable(CatchableErrorKind::UnimplementedFeature(
"filterSource".to_string(),
)))
}
#[builtin("genericClosure")]
async fn builtin_generic_closure(co: GenCo, input: Value) -> Result<Value, ErrorKind> {
let attrs = input.to_attrs()?;
@ -1084,6 +1093,14 @@ pub fn pure_builtins() -> Vec<(&'static str, Value)> {
crate::systems::llvm_triple_to_nix_double(CURRENT_PLATFORM).into(),
));
// TODO: implement for nixpkgs compatibility
result.push((
"__curPos",
Value::Catchable(CatchableErrorKind::UnimplementedFeature(
"__curPos".to_string(),
)),
));
result
}

View file

@ -147,6 +147,7 @@ const GLOBAL_BUILTINS: &[&str] = &[
"scopedImport",
"throw",
"toString",
"__curPos",
];
pub struct Compiler<'observer> {

View file

@ -42,6 +42,7 @@ use crate::{SourceCode, Value};
pub enum CatchableErrorKind {
Throw(String),
AssertionFailed,
UnimplementedFeature(String),
/// Resolving a user-supplied angle brackets path literal failed in some way.
NixPathResolution(String),
}