fix(tvix/eval): ensure all thunks are forced in nested selects
Previously only the first one was guaranteed to be forced, but we need to do this for all of them. Fixes b/190 Change-Id: I76b5667dbfb2f3fde3587e7b91d268cbf32aca00 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6645 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: tazjin <tazjin@tvl.su>
This commit is contained in:
		
							parent
							
								
									d42d8f3089
								
							
						
					
					
						commit
						bcbe1603c8
					
				
					 3 changed files with 10 additions and 2 deletions
				
			
		|  | @ -270,13 +270,15 @@ impl Compiler<'_> { | |||
| 
 | ||||
|         // Push the set onto the stack
 | ||||
|         self.compile(slot, set.clone()); | ||||
|         self.emit_force(&set); | ||||
| 
 | ||||
|         // Compile each key fragment and emit access instructions.
 | ||||
|         //
 | ||||
|         // TODO: multi-select instruction to avoid re-pushing attrs on
 | ||||
|         // nested selects.
 | ||||
|         for fragment in path.attrs() { | ||||
|             // Force the current set value.
 | ||||
|             self.emit_force(&fragment); | ||||
| 
 | ||||
|             self.compile_attr(slot, fragment.clone()); | ||||
|             self.push_op(OpCode::OpAttrsSelect, &fragment); | ||||
|         } | ||||
|  | @ -319,10 +321,10 @@ impl Compiler<'_> { | |||
|         default: ast::Expr, | ||||
|     ) { | ||||
|         self.compile(slot, set.clone()); | ||||
|         self.emit_force(&set); | ||||
|         let mut jumps = vec![]; | ||||
| 
 | ||||
|         for fragment in path.attrs() { | ||||
|             self.emit_force(&fragment); | ||||
|             self.compile_attr(slot, fragment.clone()); | ||||
|             self.push_op(OpCode::OpAttrsTrySelect, &fragment); | ||||
|             jumps.push(self.push_op(OpCode::OpJumpIfNotFound(JumpOffset(0)), &fragment)); | ||||
|  |  | |||
|  | @ -0,0 +1 @@ | |||
| 42 | ||||
|  | @ -0,0 +1,5 @@ | |||
| ({ | ||||
|   x = { | ||||
|     y = 42; | ||||
|   }; | ||||
| }).x.y | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue