From 12f9b95a2c75a757a36c4147eb011d096e8f48be Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Sat, 30 Dec 2023 21:53:33 +0100 Subject: feat(tvix/eval): accept impl AsRef for code We're also happy to consume strings, or other owned stringy types. Change-Id: I5bead4407976134815d8f879f9f70468e6af1dc4 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10476 Autosubmit: flokli Reviewed-by: raitobezarius Tested-by: BuildkiteCI --- tvix/eval/src/lib.rs | 20 ++++++++++++++------ tvix/eval/src/tests/mod.rs | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/tvix/eval/src/lib.rs b/tvix/eval/src/lib.rs index 37db2b7bf4..ddc2813234 100644 --- a/tvix/eval/src/lib.rs +++ b/tvix/eval/src/lib.rs @@ -179,7 +179,11 @@ impl<'co, 'ro> Evaluation<'co, 'ro> { /// reporting, and for resolving relative paths in impure functions) /// This does not *run* the code, it only provides analysis (errors and /// warnings) of the compiler. - pub fn compile_only(mut self, code: &str, location: Option) -> EvaluationResult { + pub fn compile_only( + mut self, + code: impl AsRef, + location: Option, + ) -> EvaluationResult { let mut result = EvaluationResult::default(); let source = self.source_map(); @@ -188,14 +192,14 @@ impl<'co, 'ro> Evaluation<'co, 'ro> { .map(|p| p.to_string_lossy().to_string()) .unwrap_or_else(|| "[code]".into()); - let file = source.add_file(location_str, code.into()); + let file = source.add_file(location_str, code.as_ref().to_string()); let mut noop_observer = observer::NoOpObserver::default(); let compiler_observer = self.compiler_observer.take().unwrap_or(&mut noop_observer); parse_compile_internal( &mut result, - code, + code.as_ref(), file, location, source, @@ -211,7 +215,11 @@ impl<'co, 'ro> Evaluation<'co, 'ro> { /// Evaluate the provided source code, at an optional location of the source /// code (i.e. path to the file it was read from; used for error reporting, /// and for resolving relative paths in impure functions) - pub fn evaluate(mut self, code: &str, location: Option) -> EvaluationResult { + pub fn evaluate( + mut self, + code: impl AsRef, + location: Option, + ) -> EvaluationResult { let mut result = EvaluationResult::default(); let source = self.source_map(); @@ -220,7 +228,7 @@ impl<'co, 'ro> Evaluation<'co, 'ro> { .map(|p| p.to_string_lossy().to_string()) .unwrap_or_else(|| "[code]".into()); - let file = source.add_file(location_str, code.into()); + let file = source.add_file(location_str, code.as_ref().to_string()); let mut noop_observer = observer::NoOpObserver::default(); let compiler_observer = self.compiler_observer.take().unwrap_or(&mut noop_observer); @@ -232,7 +240,7 @@ impl<'co, 'ro> Evaluation<'co, 'ro> { let (lambda, globals) = match parse_compile_internal( &mut result, - code, + code.as_ref(), file.clone(), location, source, diff --git a/tvix/eval/src/tests/mod.rs b/tvix/eval/src/tests/mod.rs index 7ec7028834..af0a160f89 100644 --- a/tvix/eval/src/tests/mod.rs +++ b/tvix/eval/src/tests/mod.rs @@ -57,7 +57,7 @@ fn eval_test(code_path: &str, expect_success: bool) { eval.strict = true; eval.builtins.extend(mock_builtins::builtins()); - let result = eval.evaluate(&code, Some(code_path.into())); + let result = eval.evaluate(code, Some(code_path.into())); let failed = match result.value { Some(Value::Catchable(_)) => true, _ => !result.errors.is_empty(), -- cgit 1.4.1