diff --git a/include/evmc/evmc.hpp b/include/evmc/evmc.hpp index d460266..cffeeef 100644 --- a/include/evmc/evmc.hpp +++ b/include/evmc/evmc.hpp @@ -56,9 +56,15 @@ public: return *this; } - /// Returns the raw copy of evmc_result, - /// releases the ownership of the resources and invalidates this object. - evmc_result raw() noexcept + /// Releases the ownership and returns the raw copy of evmc_result. + /// + /// This method drops the ownership of the result + /// (result's resources are not going to be released when this object is destructed). + /// It is the caller's responsibility having the returned copy of the result to release it. + /// This object MUST NOT be used after this method is invoked. + /// + /// @return The copy of this object converted to raw evmc_result. + evmc_result release_raw() noexcept { const auto out = evmc_result{*this}; // Copy data. this->release = nullptr; // Disable releasing of this object. @@ -321,7 +327,7 @@ inline void selfdestruct(evmc_context* h, } inline evmc_result call(evmc_context* h, const evmc_message* msg) noexcept { - return static_cast(h)->call(*msg).raw(); + return static_cast(h)->call(*msg).release_raw(); } inline evmc_tx_context get_tx_context(evmc_context* h) noexcept { diff --git a/test/unittests/test_cpp.cpp b/test/unittests/test_cpp.cpp index cb813f5..b233d3f 100644 --- a/test/unittests/test_cpp.cpp +++ b/test/unittests/test_cpp.cpp @@ -141,7 +141,7 @@ TEST(cpp, result_raii) EXPECT_EQ(raii_result.gas_left, 0); raii_result.gas_left = -1; - auto raw_result2 = raii_result.raw(); + auto raw_result2 = raii_result.release_raw(); EXPECT_EQ(raw_result2.status_code, EVMC_INTERNAL_ERROR); EXPECT_EQ(raw_result.status_code, EVMC_INTERNAL_ERROR); EXPECT_EQ(raw_result2.gas_left, -1);