diff --git a/libevmjit/ExecutionEngine.cpp b/libevmjit/ExecutionEngine.cpp index 02b12d373..64cb250f7 100644 --- a/libevmjit/ExecutionEngine.cpp +++ b/libevmjit/ExecutionEngine.cpp @@ -20,9 +20,6 @@ #pragma GCC diagnostic pop - -#include - #include "Runtime.h" #include "Memory.h" #include "Stack.h" @@ -35,11 +32,7 @@ namespace eth namespace jit { -ExecutionEngine::ExecutionEngine() -{ -} - -int ExecutionEngine::run(std::unique_ptr _module, u256& _gas, bool _outputLogs, ExtVMFace& _ext) +int ExecutionEngine::run(std::unique_ptr _module, RuntimeData* _data, Env* _env) { auto module = _module.get(); // Keep ownership of the module in _module @@ -73,7 +66,7 @@ int ExecutionEngine::run(std::unique_ptr _module, u256& _gas, bool auto exec = std::unique_ptr(builder.create()); if (!exec) - BOOST_THROW_EXCEPTION(Exception() << errinfo_comment(errorMsg)); + return -1; // FIXME: Handle internal errors _module.release(); // Successfully created llvm::ExecutionEngine takes ownership of the module auto finalizationStartTime = std::chrono::high_resolution_clock::now(); @@ -84,11 +77,11 @@ int ExecutionEngine::run(std::unique_ptr _module, u256& _gas, bool auto entryFunc = module->getFunction("main"); if (!entryFunc) - BOOST_THROW_EXCEPTION(Exception() << errinfo_comment("main function not found")); + return -2; // FIXME: Handle internal errors ReturnCode returnCode; std::jmp_buf buf; - Runtime runtime(_gas, _ext, buf, _outputLogs); + Runtime runtime(_data, _env, buf); auto r = setjmp(buf); if (r == 0) { @@ -105,15 +98,12 @@ int ExecutionEngine::run(std::unique_ptr _module, u256& _gas, bool } else returnCode = static_cast(r); - - // Return remaining gas - _gas = returnCode == ReturnCode::OutOfGas ? 0 : runtime.getGas(); - + clog(JIT) << "Max stack size: " << Stack::maxStackSize; if (returnCode == ReturnCode::Return) { - returnData = runtime.getReturnData().toVector(); // TODO: It might be better to place is in Runtime interface + returnData = runtime.getReturnData(); // TODO: It might be better to place is in Runtime interface auto&& log = clog(JIT); log << "RETURN [ "; @@ -122,7 +112,7 @@ int ExecutionEngine::run(std::unique_ptr _module, u256& _gas, bool log << "]"; } else - cslog(JIT) << "RETURN " << (int)returnCode; + clog(JIT) << "RETURN " << (int)returnCode; return static_cast(returnCode); } diff --git a/libevmjit/ExecutionEngine.h b/libevmjit/ExecutionEngine.h index 932c19304..8d8715a95 100644 --- a/libevmjit/ExecutionEngine.h +++ b/libevmjit/ExecutionEngine.h @@ -3,8 +3,7 @@ #include -#include "Common.h" -//#include +#include "Runtime.h" namespace dev { @@ -16,9 +15,9 @@ namespace jit class ExecutionEngine { public: - ExecutionEngine(); + // FIXME: constructor? ExecutionEngine(); - int run(std::unique_ptr module, u256& _gas, bool _outputLogs, ExtVMFace& _ext); + int run(std::unique_ptr module, RuntimeData* _data, Env* _env); bytes returnData; };