fix(tvix/eval): avoid forcing with-target until absolutely necessary
Change-Id: I00efbbb8b9d3d22f32becf0919c6adf1be8b4b69 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6465 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
		
							parent
							
								
									bb34665abd
								
							
						
					
					
						commit
						27e69503a7
					
				
					 2 changed files with 11 additions and 5 deletions
				
			
		|  | @ -862,7 +862,6 @@ impl Compiler<'_, '_> { | |||
|         // resolve that directly (thus avoiding duplication on the
 | ||||
|         // stack).
 | ||||
|         self.compile(slot, node.namespace().unwrap()); | ||||
|         self.emit_force(&node.namespace().unwrap()); | ||||
| 
 | ||||
|         let span = self.span_for(&node.namespace().unwrap()); | ||||
| 
 | ||||
|  |  | |||
|  | @ -635,10 +635,17 @@ impl<'o> VM<'o> { | |||
|     } | ||||
| 
 | ||||
|     /// Resolve a dynamic identifier through the with-stack at runtime.
 | ||||
|     fn resolve_with(&self, ident: &str) -> EvalResult<Value> { | ||||
|         for idx in self.with_stack.iter().rev() { | ||||
|             let with = fallible!(self, self.stack[*idx].to_attrs()); | ||||
|             match with.select(ident) { | ||||
|     fn resolve_with(&mut self, ident: &str) -> EvalResult<Value> { | ||||
|         // Iterate over the with_stack manually to avoid borrowing
 | ||||
|         // self, which is required for forcing the set.
 | ||||
|         for with_stack_idx in (0..self.with_stack.len()).rev() { | ||||
|             let with = self.stack[self.with_stack[with_stack_idx]].clone(); | ||||
| 
 | ||||
|             if let Value::Thunk(thunk) = &with { | ||||
|                 fallible!(self, thunk.force(self)); | ||||
|             } | ||||
| 
 | ||||
|             match fallible!(self, with.to_attrs()).select(ident) { | ||||
|                 None => continue, | ||||
|                 Some(val) => return Ok(val.clone()), | ||||
|             } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue