Resumable EVM and heap-allocated callstack (#9360)
* Add new Vm trappable interface * Exec/Resume interface * Basic implementation of CallCreateExecutive * Implement resume_call and resume_create for executive * Move convertion to call/create result to separate function * Implement consume that converts resumable to non-resumable * Use consume for Executive::call/create * Resumable EVM * Implement tracing mode without needing subtracers * Implement vmtracer so it doesn't require extra structs for subtracing * Use the new tracing mode in executive * Fix most of the linting errors for cargo build * Add the concept of stack_depth * Add back crossbeam * Fix some test compile * Fix prefix address test * Fix evm crate tests * Fix wasm crate test compile * Fix wasm runner compile * Fix jsontests compile * Fix evmbin compile * Fix an issue with create nonce and better vm tracing interface * Fix linting * Fix evmbin compile * Fix unconfirmed_substate and static_flag * Fix an issue in create address logic * Fix top-level tracing * Handle builtin tracing * Fix suicide and reward tracing index stack * Fix an issue where trap conflicts with tracing * Fix an issue in parent step vm tracing * Fix revert tracing * Fix evmbin tests * Remove params clone * Fix TODO proofs * Fix jsontests compile * Fix evmbin merge issue * Fix wasm merge issue * Fix wasm test * Fix ethcore merge warnings * Fix evmbin compile * Better expect messages and add some trace::skip_one asserts
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
|
||||
use fixture::{Fixture, Assert, CallLocator, Source};
|
||||
use wasm::WasmInterpreter;
|
||||
use vm::{self, Vm, GasLeft, ActionParams, ActionValue, ParamsType};
|
||||
use vm::{self, Exec, GasLeft, ActionParams, ActionValue, ParamsType};
|
||||
use vm::tests::FakeExt;
|
||||
use std::io::{self, Read};
|
||||
use std::{fs, path, fmt};
|
||||
@@ -31,8 +31,8 @@ fn load_code<P: AsRef<path::Path>>(p: P) -> io::Result<Vec<u8>> {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn wasm_interpreter(params: ActionParams) -> WasmInterpreter {
|
||||
WasmInterpreter::new(params)
|
||||
fn wasm_interpreter(params: ActionParams) -> Box<WasmInterpreter> {
|
||||
Box::new(WasmInterpreter::new(params))
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -131,7 +131,7 @@ pub fn construct(
|
||||
params.params_type = ParamsType::Separate;
|
||||
|
||||
Ok(
|
||||
match wasm_interpreter(params).exec(ext)? {
|
||||
match wasm_interpreter(params).exec(ext).ok().expect("Wasm interpreter always calls with trap=false; trap never happens; qed")? {
|
||||
GasLeft::Known(_) => Vec::new(),
|
||||
GasLeft::NeedsReturn { data, .. } => data.to_vec(),
|
||||
}
|
||||
@@ -192,9 +192,9 @@ pub fn run_fixture(fixture: &Fixture) -> Vec<Fail> {
|
||||
}
|
||||
}
|
||||
|
||||
let mut interpreter = wasm_interpreter(params);
|
||||
let interpreter = wasm_interpreter(params);
|
||||
|
||||
let interpreter_return = match interpreter.exec(&mut ext) {
|
||||
let interpreter_return = match interpreter.exec(&mut ext).ok().expect("Wasm interpreter always calls with trap=false; trap never happens; qed") {
|
||||
Ok(ret) => ret,
|
||||
Err(e) => { return Fail::runtime(e); }
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user