Paweł Bylica
10 years ago
9 changed files with 93 additions and 14 deletions
@ -0,0 +1,37 @@ |
|||
|
|||
#include "VM.h" |
|||
|
|||
#include <libevm/VM.h> |
|||
|
|||
#include "ExecutionEngine.h" |
|||
#include "Compiler.h" |
|||
|
|||
namespace dev |
|||
{ |
|||
namespace eth |
|||
{ |
|||
namespace jit |
|||
{ |
|||
|
|||
bytes VM::go(ExtVMFace& _ext) |
|||
{ |
|||
auto module = Compiler().compile(_ext.code); |
|||
module->dump(); |
|||
|
|||
ExecutionEngine engine; |
|||
auto exitCode = engine.run(std::move(module)); |
|||
|
|||
switch (exitCode) |
|||
{ |
|||
case 101: |
|||
BOOST_THROW_EXCEPTION(BadJumpDestination()); |
|||
case 102: |
|||
BOOST_THROW_EXCEPTION(OutOfGas()); |
|||
} |
|||
|
|||
return std::move(engine.returnData); |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
@ -0,0 +1,32 @@ |
|||
|
|||
#pragma once |
|||
|
|||
#include <libdevcore/Common.h> |
|||
#include <libevm/ExtVMFace.h> |
|||
|
|||
namespace dev |
|||
{ |
|||
namespace eth |
|||
{ |
|||
namespace jit |
|||
{ |
|||
|
|||
class VM |
|||
{ |
|||
public: |
|||
/// Construct VM object.
|
|||
explicit VM(u256 _gas = 0): m_gas(_gas) {} |
|||
|
|||
void reset(u256 _gas = 0) { m_gas = _gas; } |
|||
|
|||
bytes go(ExtVMFace& _ext); |
|||
|
|||
u256 gas() const { return m_gas; } |
|||
|
|||
private: |
|||
u256 m_gas = 0; |
|||
}; |
|||
|
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue