|
21 | 21 | //! ExampleVM {} |
22 | 22 | //! } |
23 | 23 | //! |
24 | | -//! fn execute(&self, revision: evmc_vm::ffi::evmc_revision, code: &[u8], message: &evmc_vm::ExecutionMessage, context: Option<&mut evmc_vm::ExecutionContext>) -> evmc_vm::ExecutionResult { |
| 24 | +//! fn execute(&self, revision: evmc_vm::ffi::evmc_revision, message: &evmc_vm::ExecutionMessage, context: Option<&mut evmc_vm::ExecutionContext>) -> evmc_vm::ExecutionResult { |
25 | 25 | //! evmc_vm::ExecutionResult::success(1337, 0, None) |
26 | 26 | //! } |
27 | 27 | //! } |
@@ -395,52 +395,34 @@ fn build_execute_fn(names: &VMNameSet) -> proc_macro2::TokenStream { |
395 | 395 | host: *const ::evmc_vm::ffi::evmc_host_interface, |
396 | 396 | context: *mut ::evmc_vm::ffi::evmc_host_context, |
397 | 397 | revision: ::evmc_vm::ffi::evmc_revision, |
398 | | - msg: *const ::evmc_vm::ffi::evmc_message, |
399 | | - code: *const u8, |
400 | | - code_size: usize |
| 398 | + msg: *const ::evmc_vm::ffi::evmc_message |
401 | 399 | ) -> ::evmc_vm::ffi::evmc_result |
402 | 400 | { |
403 | 401 | use evmc_vm::EvmcVm; |
404 | 402 |
|
405 | | - // TODO: context is optional in case of the "precompiles" capability |
406 | | - if instance.is_null() || msg.is_null() || (code.is_null() && code_size != 0) { |
407 | | - // These are irrecoverable errors that violate the EVMC spec. |
408 | | - std::process::abort(); |
409 | | - } |
410 | | - |
411 | 403 | assert!(!instance.is_null()); |
412 | 404 | assert!(!msg.is_null()); |
413 | 405 |
|
414 | 406 | let execution_message: ::evmc_vm::ExecutionMessage = unsafe { |
415 | 407 | msg.as_ref().expect("EVMC message is null").into() |
416 | 408 | }; |
417 | 409 |
|
418 | | - let empty_code = [0u8;0]; |
419 | | - let code_ref: &[u8] = if code.is_null() { |
420 | | - assert_eq!(code_size, 0); |
421 | | - &empty_code |
422 | | - } else { |
423 | | - unsafe { |
424 | | - ::std::slice::from_raw_parts(code, code_size) |
425 | | - } |
426 | | - }; |
427 | | - |
428 | 410 | let container = unsafe { |
429 | 411 | // Acquire ownership from EVMC. |
430 | 412 | ::evmc_vm::EvmcContainer::<#type_name_ident>::from_ffi_pointer(instance) |
431 | 413 | }; |
432 | 414 |
|
433 | 415 | let result = ::std::panic::catch_unwind(|| { |
434 | 416 | if host.is_null() { |
435 | | - container.execute(revision, code_ref, &execution_message, None) |
| 417 | + container.execute(revision, &execution_message, None) |
436 | 418 | } else { |
437 | 419 | let mut execution_context = unsafe { |
438 | 420 | ::evmc_vm::ExecutionContext::new( |
439 | 421 | host.as_ref().expect("EVMC host is null"), |
440 | 422 | context, |
441 | 423 | ) |
442 | 424 | }; |
443 | | - container.execute(revision, code_ref, &execution_message, Some(&mut execution_context)) |
| 425 | + container.execute(revision, &execution_message, Some(&mut execution_context)) |
444 | 426 | } |
445 | 427 | }); |
446 | 428 |
|
|
0 commit comments