feat(tvix/eval): implement (compilation) observer trait
This trait will enable library users of tvix-eval to observe internal happenings of the compilation and runtime processes. The initial methods of the observer will be called whenever the compiler emits a chunk. Change-Id: I668f6c2cfe3d6f4c1a1612c0f293831011768437 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6448 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									1fe6cfe5a2
								
							
						
					
					
						commit
						7ae45342df
					
				
					 2 changed files with 37 additions and 0 deletions
				
			
		| 
						 | 
					@ -3,6 +3,7 @@ mod chunk;
 | 
				
			||||||
mod compiler;
 | 
					mod compiler;
 | 
				
			||||||
mod errors;
 | 
					mod errors;
 | 
				
			||||||
mod eval;
 | 
					mod eval;
 | 
				
			||||||
 | 
					mod observer;
 | 
				
			||||||
mod opcode;
 | 
					mod opcode;
 | 
				
			||||||
mod upvalues;
 | 
					mod upvalues;
 | 
				
			||||||
mod value;
 | 
					mod value;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										36
									
								
								tvix/eval/src/observer.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								tvix/eval/src/observer.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					//! Implements a trait for things that wish to observe internal state
 | 
				
			||||||
 | 
					//! changes of tvix-eval.
 | 
				
			||||||
 | 
					//!
 | 
				
			||||||
 | 
					//! This can be used to gain insights from compilation, to trace the
 | 
				
			||||||
 | 
					//! runtime, and so on.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::value::Lambda;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use std::rc::Rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Implemented by types that wish to observe internal happenings of
 | 
				
			||||||
 | 
					/// Tvix.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// All methods are optional, that is, observers can implement only
 | 
				
			||||||
 | 
					/// what they are interested in observing.
 | 
				
			||||||
 | 
					pub trait Observer {
 | 
				
			||||||
 | 
					    /// Called when the compiler finishes compilation of the top-level
 | 
				
			||||||
 | 
					    /// of an expression (usually the root Nix expression of a file).
 | 
				
			||||||
 | 
					    fn observe_compiled_toplevel(&mut self, _: &Rc<Lambda>) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Called when the compiler finishes compilation of a
 | 
				
			||||||
 | 
					    /// user-defined function.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// Note that in Nix there are only single argument functions, so
 | 
				
			||||||
 | 
					    /// in an expression like `a: b: c: ...` this method will be
 | 
				
			||||||
 | 
					    /// called three times.
 | 
				
			||||||
 | 
					    fn observe_compiled_lambda(&mut self, _: &Rc<Lambda>) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Called when the compiler finishes compilation of a thunk.
 | 
				
			||||||
 | 
					    fn observe_compiled_thunk(&mut self, _: &Rc<Lambda>) {}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Default)]
 | 
				
			||||||
 | 
					pub struct NoOpObserver {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Observer for NoOpObserver {}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue