refactor(tvix/eval): allow impure Value builtins
Allows impure builtins that have a different shape than a Rust function pointer; specifically this is required for builtins.currentTime which does not work in WASM. Change-Id: I1362d8eeafe770ce4d1c5ebe4d119aeb0abb5c9b Reviewed-on: https://cl.tvl.fyi/c/depot/+/6849 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com>
This commit is contained in:
		
							parent
							
								
									b9bfcf2f33
								
							
						
					
					
						commit
						f0179c92d3
					
				
					 2 changed files with 27 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,26 @@
 | 
			
		|||
use crate::value::Builtin;
 | 
			
		||||
use std::{
 | 
			
		||||
    collections::BTreeMap,
 | 
			
		||||
    time::{SystemTime, UNIX_EPOCH},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use smol_str::SmolStr;
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
    value::{Builtin, NixString},
 | 
			
		||||
    Value,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
fn impure_builtins() -> Vec<Builtin> {
 | 
			
		||||
    vec![]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Return all impure builtins, that is all builtins which may perform I/O outside of the VM and so
 | 
			
		||||
/// cannot be used in all contexts (e.g. WASM).
 | 
			
		||||
pub(super) fn builtins() -> Vec<Builtin> {
 | 
			
		||||
    vec![]
 | 
			
		||||
pub(super) fn builtins() -> BTreeMap<NixString, Value> {
 | 
			
		||||
    let mut map: BTreeMap<NixString, Value> = impure_builtins()
 | 
			
		||||
        .into_iter()
 | 
			
		||||
        .map(|b| (b.name().into(), Value::Builtin(b)))
 | 
			
		||||
        .collect();
 | 
			
		||||
 | 
			
		||||
    map
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue