Trait gimli::read::EvaluationStorage
source · pub trait EvaluationStorage<R: Reader> {
type Stack: ArrayLike<Item = Value>;
type ExpressionStack: ArrayLike<Item = (R, R)>;
type Result: ArrayLike<Item = Piece<R>>;
}Expand description
Specification of what storage should be used for Evaluation.
If you need to avoid Evaluation from allocating memory, e.g. for signal safety,
you can provide you own storage specification:
struct StoreOnStack;
impl<R: Reader> EvaluationStorage<R> for StoreOnStack {
type Stack = [Value; 64];
type ExpressionStack = [(R, R); 4];
type Result = [Piece<R>; 1];
}
let mut eval = Evaluation::<_, StoreOnStack>::new_in(bytecode, encoding);
let mut result = eval.evaluate().unwrap();
while result != EvaluationResult::Complete {
match result {
EvaluationResult::RequiresRegister { register, base_type } => {
let value = get_register_value(register, base_type);
result = eval.resume_with_register(value).unwrap();
},
EvaluationResult::RequiresFrameBase => {
let frame_base = get_frame_base();
result = eval.resume_with_frame_base(frame_base).unwrap();
},
_ => unimplemented!(),
};
}
let result = eval.as_result();
println!("{:?}", result);Required Associated Types§
sourcetype ExpressionStack: ArrayLike<Item = (R, R)>
type ExpressionStack: ArrayLike<Item = (R, R)>
The storage used for the expression stack.