diff options
author | Vincent Ambo <tazjin@tvl.su> | 2024-02-20T08·29+0700 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2024-02-20T09·18+0000 |
commit | 3c87687798a3cfb6c3cfcc231e6c60511e3341ab (patch) | |
tree | 90dd1bb7daefbd09cd308240858689c6a405701f /tvix/eval/src/compiler/bindings.rs | |
parent | b38badf2063b4eba31abffbeba01c1c8c3212be8 (diff) |
refactor(tvix/eval): add SourceCode directly into error types r/7571
With this change it's no longer necessary to track the SourceCode struct separately from the evaluation for error reporting: It's just stored directly in the errors. This also ends up resolving an issue in compiler::bindings, where we cloned the Arc containing file references way too often. In fact those clones probably compensate for all additional SourceCode clones during error construction now. Change-Id: Ice93bf161e61f8ea3d48103435e20c53e6aa8c3a Reviewed-on: https://cl.tvl.fyi/c/depot/+/10986 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/eval/src/compiler/bindings.rs')
-rw-r--r-- | tvix/eval/src/compiler/bindings.rs | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/tvix/eval/src/compiler/bindings.rs b/tvix/eval/src/compiler/bindings.rs index 236b9dd2c3d5..634cc5402247 100644 --- a/tvix/eval/src/compiler/bindings.rs +++ b/tvix/eval/src/compiler/bindings.rs @@ -261,10 +261,10 @@ impl TrackedBindings { trait HasEntryProxy { fn inherits(&self) -> Box<dyn Iterator<Item = ast::Inherit>>; - fn attributes( + fn attributes<'a>( &self, - file: Arc<codemap::File>, - ) -> Box<dyn Iterator<Item = (Span, PeekableAttrs, ast::Expr)>>; + file: &'a codemap::File, + ) -> Box<dyn Iterator<Item = (Span, PeekableAttrs, ast::Expr)> + 'a>; } impl<N: HasEntry> HasEntryProxy for N { @@ -272,13 +272,13 @@ impl<N: HasEntry> HasEntryProxy for N { Box::new(ast::HasEntry::inherits(self)) } - fn attributes( + fn attributes<'a>( &self, - file: Arc<codemap::File>, - ) -> Box<dyn Iterator<Item = (Span, PeekableAttrs, ast::Expr)>> { + file: &'a codemap::File, + ) -> Box<dyn Iterator<Item = (Span, PeekableAttrs, ast::Expr)> + 'a> { Box::new(ast::HasEntry::attrpath_values(self).map(move |entry| { ( - entry.span_for(&file), + entry.span_for(file), entry.attrpath().unwrap().attrs().peekable(), entry.value().unwrap(), ) @@ -291,16 +291,16 @@ impl HasEntryProxy for AttributeSet { Box::new(self.inherits.clone().into_iter()) } - fn attributes( + fn attributes<'a>( &self, - _: Arc<codemap::File>, - ) -> Box<dyn Iterator<Item = (Span, PeekableAttrs, ast::Expr)>> { + _: &'a codemap::File, + ) -> Box<dyn Iterator<Item = (Span, PeekableAttrs, ast::Expr)> + 'a> { Box::new(self.entries.clone().into_iter()) } } /// AST-traversing functions related to bindings. -impl Compiler<'_> { +impl Compiler<'_, '_> { /// Compile all inherits of a node with entries that do *not* have a /// namespace to inherit from, and return the remaining ones that do. fn compile_plain_inherits<N>( @@ -465,7 +465,7 @@ impl Compiler<'_> { ) where N: ToSpan + HasEntryProxy, { - for (span, mut path, value) in node.attributes(self.file.clone()) { + for (span, mut path, value) in node.attributes(self.file) { let key = path.next().unwrap(); if bindings.try_merge(self, span, &key, path.clone(), value.clone()) { @@ -765,7 +765,7 @@ impl Compiler<'_> { } /// Private compiler helpers related to bindings. -impl Compiler<'_> { +impl Compiler<'_, '_> { fn resolve_upvalue<N: ToSpan>( &mut self, ctx_idx: usize, |