Skip to content

Commit

Permalink
rust: make ExecutionContext optional in EvmcVm.execute()
Browse files Browse the repository at this point in the history
  • Loading branch information
axic committed Jul 8, 2019
1 parent 8b04f3f commit 504f0aa
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 11 deletions.
2 changes: 1 addition & 1 deletion bindings/rust/evmc-declare-tests/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ impl EvmcVm for FooVM {
&self,
_code: &[u8],
_message: &ExecutionMessage,
_context: &ExecutionContext,
_context: Option<&ExecutionContext>,
) -> ExecutionResult {
ExecutionResult::success(1337, None)
}
Expand Down
16 changes: 9 additions & 7 deletions bindings/rust/evmc-declare/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@
//! ExampleVM {}
//! }
//!
//! fn execute(&self, code: &[u8], message: &evmc_vm::ExecutionMessage, context: &evmc_vm::ExecutionContext) -> evmc_vm::ExecutionResult {
//! fn execute(&self, code: &[u8], message: &evmc_vm::ExecutionMessage, context: Option<&evmc_vm::ExecutionContext>) -> evmc_vm::ExecutionResult {
//! evmc_vm::ExecutionResult::success(1337, None)
//! }
//! }
//! ```

// Set a higher recursion limit because parsing certain token trees might fail with the default of 64.
#![recursion_limit = "128"]
#![recursion_limit = "160"]

extern crate proc_macro;

Expand Down Expand Up @@ -338,14 +338,16 @@ fn build_execute_fn(names: &VMNameSet) -> proc_macro2::TokenStream {
use evmc_vm::EvmcVm;

assert!(!instance.is_null());
// TODO: context is optional in case of the "precompiles" capability
assert!(!context.is_null());
assert!(!msg.is_null());

let execution_message: ::evmc_vm::ExecutionMessage = unsafe { msg.as_ref().unwrap().into() };

let execution_context = unsafe {
::evmc_vm::ExecutionContext::new(context.as_mut().expect("EVMC context is null"))
let execution_context: Option<::evmc_vm::ExecutionContext> = if context.is_null() {
None
} else {
Some(unsafe {
::evmc_vm::ExecutionContext::new(context.as_mut().expect("EVMC context is null"))
})
};

let empty_code = [0u8;0];
Expand All @@ -363,7 +365,7 @@ fn build_execute_fn(names: &VMNameSet) -> proc_macro2::TokenStream {
};

let result = ::std::panic::catch_unwind(|| {
container.execute(code_ref, &execution_message, &execution_context)
container.execute(code_ref, &execution_message, execution_context.as_ref())
});

let result = if result.is_err() {
Expand Down
2 changes: 1 addition & 1 deletion bindings/rust/evmc-vm/src/container.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ mod tests {
&self,
_code: &[u8],
_message: &ExecutionMessage,
_context: &ExecutionContext,
_context: Option<&ExecutionContext>,
) -> ExecutionResult {
ExecutionResult::failure()
}
Expand Down
2 changes: 1 addition & 1 deletion bindings/rust/evmc-vm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ pub trait EvmcVm {
&self,
code: &[u8],
message: &ExecutionMessage,
context: &ExecutionContext,
context: Option<&ExecutionContext>,
) -> ExecutionResult;
}

Expand Down
2 changes: 1 addition & 1 deletion examples/example-rust-vm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ impl EvmcVm for ExampleRustVM {
&self,
_code: &[u8],
message: &ExecutionMessage,
context: &ExecutionContext,
context: Option<&ExecutionContext>,
) -> ExecutionResult {
let is_create = message.kind() == evmc_sys::evmc_call_kind::EVMC_CREATE;

Expand Down

0 comments on commit 504f0aa

Please sign in to comment.