sstore && sload
This commit is contained in:
		
							parent
							
								
									ff747ba349
								
							
						
					
					
						commit
						963d967a46
					
				@ -78,7 +78,8 @@ impl Drop for ContextHandle {
 | 
			
		||||
 | 
			
		||||
/// Component oriented wrapper around jit env c interface.
 | 
			
		||||
pub trait Env {
 | 
			
		||||
	fn sload(&mut self);
 | 
			
		||||
	fn sload(&self, index: *const JitI256, out_value: *mut JitI256);
 | 
			
		||||
	fn sstore(&mut self, index: *const JitI256, value: *const JitI256);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// C abi compatible wrapper for jit env implementers.
 | 
			
		||||
@ -100,12 +101,20 @@ impl EnvHandle {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Env for EnvHandle {
 | 
			
		||||
	fn sload(&mut self) { 
 | 
			
		||||
	fn sload(&self, index: *const JitI256, out_value: *mut JitI256) { 
 | 
			
		||||
		match self.env_impl {
 | 
			
		||||
			Some(ref mut env) => env.sload(),
 | 
			
		||||
			Some(ref env) => env.sload(index, out_value),
 | 
			
		||||
			None => { panic!(); }
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fn sstore(&mut self, index: *const JitI256, value: *const JitI256) { 
 | 
			
		||||
		match self.env_impl {
 | 
			
		||||
			Some(ref mut env) => env.sstore(index, value),
 | 
			
		||||
			None => { panic!(); }
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// ffi functions
 | 
			
		||||
@ -158,14 +167,15 @@ pub mod ffi {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#[no_mangle]
 | 
			
		||||
	pub unsafe extern fn env_sload(env: *mut EnvHandle, _index: *const JitI256, _value: *const JitI256) {
 | 
			
		||||
		let env = &mut *env;
 | 
			
		||||
		env.sload();
 | 
			
		||||
	pub unsafe extern fn env_sload(env: *mut EnvHandle, index: *const JitI256, out_value: *mut JitI256) {
 | 
			
		||||
		let env = &*env;
 | 
			
		||||
		env.sload(index, out_value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#[no_mangle]
 | 
			
		||||
	pub extern fn env_sstore(_env: *mut EnvHandle, _index: *const JitI256, _value: *const JitI256) {
 | 
			
		||||
		unimplemented!()
 | 
			
		||||
	pub unsafe extern fn env_sstore(env: *mut EnvHandle, index: *const JitI256, value: *const JitI256) {
 | 
			
		||||
		let env = &mut *env;
 | 
			
		||||
		env.sstore(index, value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#[no_mangle]
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user