use crate::{
emulation::{EmValue, HeapRef},
metadata::token::Token,
};
pub const MAX_REDIRECT_DEPTH: usize = 16;
pub enum CallResolution {
HookedBypass {
return_value: Option<EmValue>,
},
EnterMethod {
token: Token,
arguments: Vec<EmValue>,
expects_return: bool,
assembly_index: Option<u8>,
method_type_args: Option<Vec<Token>>,
},
ReturnSynthetic {
value: Option<EmValue>,
},
ThrowException {
exception_type: Token,
message: String,
},
Redirect {
target_token: Token,
arguments: Vec<EmValue>,
is_virtual: bool,
pre_push_value: Option<EmValue>,
is_reflection_invoke: bool,
assembly_index: Option<u8>,
method_type_args: Option<Vec<Token>>,
},
}
pub enum NewObjResolution {
HookedBypass {
obj_ref: HeapRef,
},
EnterConstructor {
constructor_token: Token,
obj_ref: HeapRef,
arguments: Vec<EmValue>,
},
DefaultObject {
obj_ref: HeapRef,
},
ThrowException {
exception_type: Token,
message: String,
},
Redirect {
underlying_token: Token,
},
}