refactor(tvix/eval): Make strict an EvalMode enum

Refactor the `strict` boolean passed into evaluation at the top-level to
be a (two-variant, so far) EvalMode enum of Lazy and Strict.

This is more explicit than a boolean, and if we ever add more EvalModes
it's a simple extension of the enum.

Change-Id: I3de50e74ec971011664f6cd0999d08b792118410
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12186
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
Autosubmit: aspen <root@gws.fyi>
This commit is contained in:
Aspen Smith 2024-08-11 11:15:47 -04:00 committed by clbot
parent 934e03c0de
commit b7a6fc2812
8 changed files with 50 additions and 31 deletions

View file

@ -37,6 +37,8 @@ mod mock_builtins {
#[cfg(feature = "impure")]
fn eval_test(code_path: PathBuf, expect_success: bool) {
use crate::vm::EvalMode;
std::env::set_var("TEST_VAR", "foo"); // for eval-okay-getenv.nix
eprintln!("path: {}", code_path.display());
@ -49,7 +51,7 @@ fn eval_test(code_path: PathBuf, expect_success: bool) {
let code = std::fs::read_to_string(&code_path).expect("should be able to read test code");
let eval = crate::Evaluation::builder_impure()
.strict()
.mode(EvalMode::Strict)
.add_builtins(mock_builtins::builtins())
.build();
@ -125,13 +127,13 @@ fn eval_test(code_path: PathBuf, expect_success: bool) {
#[cfg(feature = "impure")]
#[rstest]
fn identity(#[files("src/tests/tvix_tests/identity-*.nix")] code_path: PathBuf) {
use crate::EvalIO;
use crate::{vm::EvalMode, EvalIO};
let code = std::fs::read_to_string(code_path).expect("should be able to read test code");
let eval = crate::Evaluation::builder(Box::new(crate::StdIO) as Box<dyn EvalIO>)
.disable_import()
.strict()
.mode(EvalMode::Strict)
.build();
let result = eval.evaluate(&code, None);