EVMC
evmc::VM Class Reference

The VM instance. More...

#include <evmc.hpp>

Public Member Functions

 VM (evmc_vm *vm) noexcept
 Converting constructor from evmc_vm. More...
 
 ~VM () noexcept
 Destructor responsible for automatically destroying the VM instance. More...
 
 VM (const VM &)=delete
 
VMoperator= (const VM &)=delete
 
 VM (VM &&other) noexcept
 Move constructor. More...
 
VMoperator= (VM &&other) noexcept
 Move assignment operator. More...
 
 VM (evmc_vm *vm, std::initializer_list< std::pair< const char *, const char * > > options) noexcept
 The constructor that captures a VM instance and configures the instance with the provided list of options. More...
 
 operator bool () const noexcept
 Checks if contains a valid pointer to the VM instance. More...
 
bool is_abi_compatible () const noexcept
 Checks whenever the VM instance is ABI compatible with the current EVMC API. More...
 
char const * name () const noexcept
 The name of the EVMC VM implementation. More...
 
char const * version () const noexcept
 The version of the EVMC VM implementation, e.g. More...
 
bool has_capability (evmc_capabilities capability) const noexcept
 Checks if the VM has the given capability. More...
 
evmc_capabilities_flagset get_capabilities () const noexcept
 A method returning capabilities supported by the VM instance. More...
 
evmc_set_option_result set_option (const char name[], const char value[]) noexcept
 Sets the option for the VM, if the feature is supported by the VM. More...
 
Result execute (const evmc_host_interface &host, evmc_host_context *ctx, evmc_revision rev, const evmc_message &msg, const uint8_t *code, size_t code_size) noexcept
 Executes code in the VM instance. More...
 
Result execute (Host &host, evmc_revision rev, const evmc_message &msg, const uint8_t *code, size_t code_size) noexcept
 Convenient variant of the VM::execute() that takes reference to evmc::Host class. More...
 
Result execute (evmc_revision rev, const evmc_message &msg, const uint8_t *code, size_t code_size) noexcept
 Executes code without the Host context. More...
 
evmc_vmget_raw_pointer () const noexcept
 Returns the pointer to C EVMC struct representing the VM. More...
 

Detailed Description

The VM instance.

This is a RAII wrapper for evmc_vm, and object of this type automatically destroys the VM instance.

Definition at line 620 of file evmc.hpp.

Constructor & Destructor Documentation

◆ VM() [1/3]

evmc::VM::VM ( evmc_vm vm)
inlineexplicitnoexcept

Converting constructor from evmc_vm.

Definition at line 626 of file evmc.hpp.

626: m_instance{vm} {}

◆ ~VM()

evmc::VM::~VM ( )
inlinenoexcept

Destructor responsible for automatically destroying the VM instance.

Definition at line 629 of file evmc.hpp.

630 {
631 if (m_instance != nullptr)
632 m_instance->destroy(m_instance);
633 }
evmc_destroy_fn destroy
Pointer to function destroying the VM instance.
Definition: evmc.h:1082

◆ VM() [2/3]

evmc::VM::VM ( VM &&  other)
inlinenoexcept

Move constructor.

Definition at line 639 of file evmc.hpp.

639: m_instance{other.m_instance} { other.m_instance = nullptr; }

◆ VM() [3/3]

evmc::VM::VM ( evmc_vm vm,
std::initializer_list< std::pair< const char *, const char * > >  options 
)
inlinenoexcept

The constructor that captures a VM instance and configures the instance with the provided list of options.

Definition at line 734 of file evmc.hpp.

736 : m_instance{vm}
737{
738 // This constructor is implemented outside of the class definition to workaround a doxygen bug.
739 for (const auto& option : options)
740 set_option(option.first, option.second);
741}
evmc_set_option_result set_option(const char name[], const char value[]) noexcept
Sets the option for the VM, if the feature is supported by the VM.
Definition: evmc.hpp:680

Member Function Documentation

◆ execute() [1/3]

Result evmc::VM::execute ( const evmc_host_interface host,
evmc_host_context ctx,
evmc_revision  rev,
const evmc_message msg,
const uint8_t *  code,
size_t  code_size 
)
inlinenoexcept

Executes code in the VM instance.

See also
evmc_execute_fn.

Definition at line 686 of file evmc.hpp.

692 {
693 return Result{m_instance->execute(m_instance, &host, ctx, rev, &msg, code, code_size)};
694 }
evmc_execute_fn execute
Pointer to function executing a code by the VM instance.
Definition: evmc.h:1089

◆ execute() [2/3]

Result evmc::VM::execute ( evmc_revision  rev,
const evmc_message msg,
const uint8_t *  code,
size_t  code_size 
)
inlinenoexcept

Executes code without the Host context.

The same as execute(const evmc_host_interface&, evmc_host_context*, evmc_revision, const evmc_message&, const uint8_t*, size_t), but without providing the Host context and interface. This method is for experimental precompiles support where execution is guaranteed not to require any Host access.

Definition at line 714 of file evmc.hpp.

718 {
719 return Result{
720 m_instance->execute(m_instance, nullptr, nullptr, rev, &msg, code, code_size)};
721 }

◆ execute() [3/3]

Result evmc::VM::execute ( Host host,
evmc_revision  rev,
const evmc_message msg,
const uint8_t *  code,
size_t  code_size 
)
inlinenoexcept

Convenient variant of the VM::execute() that takes reference to evmc::Host class.

Definition at line 697 of file evmc.hpp.

702 {
703 return execute(Host::get_interface(), host.to_context(), rev, msg, code, code_size);
704 }
static const evmc_host_interface & get_interface() noexcept
Provides access to the global host interface.
Definition: evmc.hpp:836
Result execute(const evmc_host_interface &host, evmc_host_context *ctx, evmc_revision rev, const evmc_message &msg, const uint8_t *code, size_t code_size) noexcept
Executes code in the VM instance.
Definition: evmc.hpp:686

◆ get_capabilities()

evmc_capabilities_flagset evmc::VM::get_capabilities ( ) const
inlinenoexcept

A method returning capabilities supported by the VM instance.

The value returned MAY change when different options are set via the set_option() method.

A Client SHOULD only rely on the value returned if it has queried it after it has called the set_option().

This is a mandatory method and MUST NOT be set to NULL.

Definition at line 674 of file evmc.hpp.

675 {
676 return m_instance->get_capabilities(m_instance);
677 }
evmc_get_capabilities_fn get_capabilities
A method returning capabilities supported by the VM instance.
Definition: evmc.h:1101

◆ get_raw_pointer()

evmc_vm * evmc::VM::get_raw_pointer ( ) const
inlinenoexcept

Returns the pointer to C EVMC struct representing the VM.

Gives access to the C EVMC VM struct to allow advanced interaction with the VM not supported by the C++ interface. Use as the last resort. This object still owns the VM after returning the pointer. The returned pointer MAY be null.

Definition at line 728 of file evmc.hpp.

728{ return m_instance; }

◆ has_capability()

bool evmc::VM::has_capability ( evmc_capabilities  capability) const
inlinenoexcept

Checks if the VM has the given capability.

Definition at line 668 of file evmc.hpp.

669 {
670 return (get_capabilities() & static_cast<evmc_capabilities_flagset>(capability)) != 0;
671 }
evmc_capabilities_flagset get_capabilities() const noexcept
A method returning capabilities supported by the VM instance.
Definition: evmc.hpp:674
uint32_t evmc_capabilities_flagset
Alias for unsigned integer representing a set of bit flags of EVMC capabilities.
Definition: evmc.h:1032

◆ is_abi_compatible()

bool evmc::VM::is_abi_compatible ( ) const
inlinenoexcept

Checks whenever the VM instance is ABI compatible with the current EVMC API.

Definition at line 659 of file evmc.hpp.

659{ return m_instance->abi_version == EVMC_ABI_VERSION; }
@ EVMC_ABI_VERSION
The EVMC ABI version number of the interface declared in this file.
Definition: evmc.h:47
const int abi_version
EVMC ABI version implemented by the VM instance.
Definition: evmc.h:1059

◆ name()

char const * evmc::VM::name ( ) const
inlinenoexcept

The name of the EVMC VM implementation.

It MUST be a NULL-terminated not empty string. The content MUST be UTF-8 encoded (this implies ASCII encoding is also allowed).

Definition at line 662 of file evmc.hpp.

662{ return m_instance->name; }
const char * name
The name of the EVMC VM implementation.
Definition: evmc.h:1067

◆ operator bool()

evmc::VM::operator bool ( ) const
inlineexplicitnoexcept

Checks if contains a valid pointer to the VM instance.

Definition at line 656 of file evmc.hpp.

656{ return m_instance != nullptr; }

◆ operator=()

VM & evmc::VM::operator= ( VM &&  other)
inlinenoexcept

Move assignment operator.

Definition at line 642 of file evmc.hpp.

643 {
644 this->~VM();
645 m_instance = other.m_instance;
646 other.m_instance = nullptr;
647 return *this;
648 }
~VM() noexcept
Destructor responsible for automatically destroying the VM instance.
Definition: evmc.hpp:629

◆ set_option()

evmc_set_option_result evmc::VM::set_option ( const char  name[],
const char  value[] 
)
inlinenoexcept

Sets the option for the VM, if the feature is supported by the VM.

See also
evmc_set_option_fn

Definition at line 680 of file evmc.hpp.

681 {
682 return evmc_set_option(m_instance, name, value);
683 }
char const * name() const noexcept
The name of the EVMC VM implementation.
Definition: evmc.hpp:662
static enum evmc_set_option_result evmc_set_option(struct evmc_vm *vm, char const *name, char const *value)
Sets the option for the VM, if the feature is supported by the VM.
Definition: helpers.h:76

◆ version()

char const * evmc::VM::version ( ) const
inlinenoexcept

The version of the EVMC VM implementation, e.g.

"1.2.3b4".

It MUST be a NULL-terminated not empty string. The content MUST be UTF-8 encoded (this implies ASCII encoding is also allowed).

Definition at line 665 of file evmc.hpp.

665{ return m_instance->version; }
const char * version
The version of the EVMC VM implementation, e.g.
Definition: evmc.h:1075

The documentation for this class was generated from the following file: