about summary refs log tree commit diff
path: root/tvix/eval
diff options
context:
space:
mode:
authorAdam Joseph <adam@westernsemico.com>2023-12-12T07·34-0800
committerclbot <clbot@tvl.fyi>2023-12-12T17·20+0000
commit8d4aa2c15c88d6e2912882ebf480d89c172d4e1f (patch)
tree25a6d167857aac1772f5b098938bd4713974a02a /tvix/eval
parentbb1e79e5d19a43beeebe8f858019131c57f99c65 (diff)
fix(tvix/eval): add unimplemented __curPos and builtins.filterSource r/7193
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>
Diffstat (limited to 'tvix/eval')
-rw-r--r--tvix/eval/src/builtins/mod.rs17
-rw-r--r--tvix/eval/src/compiler/mod.rs1
-rw-r--r--tvix/eval/src/errors.rs1
3 files changed, 19 insertions, 0 deletions
diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs
index 62684b82453e..4bdce300a564 100644
--- a/tvix/eval/src/builtins/mod.rs
+++ b/tvix/eval/src/builtins/mod.rs
@@ -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
 }
 
diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs
index f6d6ca7c06bc..f54dc8ba42ae 100644
--- a/tvix/eval/src/compiler/mod.rs
+++ b/tvix/eval/src/compiler/mod.rs
@@ -147,6 +147,7 @@ const GLOBAL_BUILTINS: &[&str] = &[
     "scopedImport",
     "throw",
     "toString",
+    "__curPos",
 ];
 
 pub struct Compiler<'observer> {
diff --git a/tvix/eval/src/errors.rs b/tvix/eval/src/errors.rs
index a61d55aa21f8..23905e438edb 100644
--- a/tvix/eval/src/errors.rs
+++ b/tvix/eval/src/errors.rs
@@ -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),
 }