Unifies ThisInvokeContext and dyn trait InvokeContext. (#21563)
This commit is contained in:
committed by
GitHub
parent
8dfa83c579
commit
bfdb775ffc
@ -84,26 +84,25 @@ pub enum ProgramTestError {
|
||||
}
|
||||
|
||||
thread_local! {
|
||||
static INVOKE_CONTEXT: RefCell<Option<(usize, usize)>> = RefCell::new(None);
|
||||
static INVOKE_CONTEXT: RefCell<Option<usize>> = RefCell::new(None);
|
||||
}
|
||||
fn set_invoke_context(new: &mut dyn InvokeContext) {
|
||||
INVOKE_CONTEXT.with(|invoke_context| unsafe {
|
||||
invoke_context.replace(Some(transmute::<_, (usize, usize)>(new)))
|
||||
});
|
||||
fn set_invoke_context(new: &mut InvokeContext) {
|
||||
INVOKE_CONTEXT
|
||||
.with(|invoke_context| unsafe { invoke_context.replace(Some(transmute::<_, usize>(new))) });
|
||||
}
|
||||
fn get_invoke_context<'a>() -> &'a mut dyn InvokeContext {
|
||||
let fat = INVOKE_CONTEXT.with(|invoke_context| match *invoke_context.borrow() {
|
||||
fn get_invoke_context<'a, 'b>() -> &'a mut InvokeContext<'b> {
|
||||
let ptr = INVOKE_CONTEXT.with(|invoke_context| match *invoke_context.borrow() {
|
||||
Some(val) => val,
|
||||
None => panic!("Invoke context not set!"),
|
||||
});
|
||||
unsafe { transmute::<(usize, usize), &mut dyn InvokeContext>(fat) }
|
||||
unsafe { transmute::<usize, &mut InvokeContext>(ptr) }
|
||||
}
|
||||
|
||||
pub fn builtin_process_instruction(
|
||||
process_instruction: solana_sdk::entrypoint::ProcessInstruction,
|
||||
_first_instruction_account: usize,
|
||||
input: &[u8],
|
||||
invoke_context: &mut dyn InvokeContext,
|
||||
invoke_context: &mut InvokeContext,
|
||||
) -> Result<(), InstructionError> {
|
||||
set_invoke_context(invoke_context);
|
||||
|
||||
@ -187,7 +186,7 @@ macro_rules! processor {
|
||||
Some(
|
||||
|first_instruction_account: usize,
|
||||
input: &[u8],
|
||||
invoke_context: &mut dyn solana_program_test::InvokeContext| {
|
||||
invoke_context: &mut solana_program_test::InvokeContext| {
|
||||
$crate::builtin_process_instruction(
|
||||
$process_instruction,
|
||||
first_instruction_account,
|
||||
|
Reference in New Issue
Block a user