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