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:
parent
bb1e79e5d1
commit
8d4aa2c15c
3 changed files with 19 additions and 0 deletions
|
@ -377,6 +377,15 @@ mod pure_builtins {
|
||||||
toml::from_str(&toml_str).map_err(|err| err.into())
|
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")]
|
#[builtin("genericClosure")]
|
||||||
async fn builtin_generic_closure(co: GenCo, input: Value) -> Result<Value, ErrorKind> {
|
async fn builtin_generic_closure(co: GenCo, input: Value) -> Result<Value, ErrorKind> {
|
||||||
let attrs = input.to_attrs()?;
|
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(),
|
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
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,7 @@ const GLOBAL_BUILTINS: &[&str] = &[
|
||||||
"scopedImport",
|
"scopedImport",
|
||||||
"throw",
|
"throw",
|
||||||
"toString",
|
"toString",
|
||||||
|
"__curPos",
|
||||||
];
|
];
|
||||||
|
|
||||||
pub struct Compiler<'observer> {
|
pub struct Compiler<'observer> {
|
||||||
|
|
|
@ -42,6 +42,7 @@ use crate::{SourceCode, Value};
|
||||||
pub enum CatchableErrorKind {
|
pub enum CatchableErrorKind {
|
||||||
Throw(String),
|
Throw(String),
|
||||||
AssertionFailed,
|
AssertionFailed,
|
||||||
|
UnimplementedFeature(String),
|
||||||
/// Resolving a user-supplied angle brackets path literal failed in some way.
|
/// Resolving a user-supplied angle brackets path literal failed in some way.
|
||||||
NixPathResolution(String),
|
NixPathResolution(String),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue