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.
42 lines
782 B
42 lines
782 B
|
|
#include "VM.h"
|
|
|
|
#include <libevm/VMFace.h>
|
|
|
|
#include "ExecutionEngine.h"
|
|
#include "Compiler.h"
|
|
|
|
namespace dev
|
|
{
|
|
namespace eth
|
|
{
|
|
namespace jit
|
|
{
|
|
|
|
bytesConstRef VM::go(ExtVMFace& _ext, OnOpFunc const& _onOp, uint64_t _steps)
|
|
{
|
|
assert(!_onOp); // Parameter ignored
|
|
assert(_steps == (uint64_t)-1); // Parameter ignored
|
|
|
|
auto module = Compiler().compile(_ext.code);
|
|
|
|
ExecutionEngine engine;
|
|
auto exitCode = engine.run(std::move(module), m_gas, &_ext);
|
|
|
|
switch (exitCode)
|
|
{
|
|
case 101:
|
|
BOOST_THROW_EXCEPTION(BadJumpDestination());
|
|
case 102:
|
|
BOOST_THROW_EXCEPTION(OutOfGas());
|
|
case 103:
|
|
BOOST_THROW_EXCEPTION(StackTooSmall(1,0));
|
|
}
|
|
|
|
m_output = std::move(engine.returnData);
|
|
return {m_output.data(), m_output.size()}; // TODO: This all bytesConstRef stuff sucks
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|