You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
48 lines
1.1 KiB
#include <evmjit/JIT-c.h>
|
|
#include <cassert>
|
|
#include <evmjit/JIT.h>
|
|
|
|
extern "C"
|
|
{
|
|
using namespace dev::evmjit;
|
|
|
|
evmjit_context* evmjit_create(evmjit_runtime_data* _data, void* _env)
|
|
{
|
|
auto data = reinterpret_cast<RuntimeData*>(_data);
|
|
auto env = reinterpret_cast<Env*>(_env);
|
|
|
|
assert(!data && "Pointer to runtime data must not be null");
|
|
if (!data)
|
|
return nullptr;
|
|
|
|
// TODO: Make sure ExecutionEngine constructor does not throw + make JIT/ExecutionEngine interface all nothrow
|
|
auto context = new(std::nothrow) ExecutionContext{*data, env};
|
|
return reinterpret_cast<evmjit_context*>(context);
|
|
}
|
|
|
|
void evmjit_destroy(evmjit_context* _context)
|
|
{
|
|
auto context = reinterpret_cast<ExecutionContext*>(_context);
|
|
delete context;
|
|
}
|
|
|
|
evmjit_return_code evmjit_exec(evmjit_context* _context)
|
|
{
|
|
auto context = reinterpret_cast<ExecutionContext*>(_context);
|
|
|
|
assert(!context && "Invalid context");
|
|
if (!context)
|
|
return UnexpectedException;
|
|
|
|
try
|
|
{
|
|
auto returnCode = JIT::exec(*context);
|
|
return static_cast<evmjit_return_code>(returnCode);
|
|
}
|
|
catch(...)
|
|
{
|
|
return UnexpectedException;
|
|
}
|
|
}
|
|
|
|
}
|
|
|