From ea20dd01ce6c56620baaec15e824c7da1b2837ca Mon Sep 17 00:00:00 2001 From: Dmytro Sydorchenko Date: Fri, 10 Feb 2023 19:25:54 -0500 Subject: [PATCH] reverting exceptions to jumps --- libraries/native/CMakeLists.txt | 1 - libraries/native/crt_lib.cpp | 10 ++++++++++ libraries/native/intrinsics.cpp | 18 +++--------------- libraries/native/native/eosio/crt.hpp | 8 -------- 4 files changed, 13 insertions(+), 24 deletions(-) diff --git a/libraries/native/CMakeLists.txt b/libraries/native/CMakeLists.txt index f8fdee0884..d9858069e2 100644 --- a/libraries/native/CMakeLists.txt +++ b/libraries/native/CMakeLists.txt @@ -339,7 +339,6 @@ target_include_directories( sf PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/softfloat/sou if (${PARENT_PROJECT_NAME} STREQUAL "cdt_tools") add_library(${PROJECT_NAME} STATIC ${softfloat_sources} intrinsics.cpp crt_lib.cpp) - target_compile_definitions(${PROJECT_NAME} PUBLIC NATIVELIB_ENABLE_EXCEPTIONS) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/../libraries/eosiolib/core ${CMAKE_SOURCE_DIR}/../libraries/eosiolib/contracts ${CMAKE_SOURCE_DIR}/../libraries/eosiolib/capi diff --git a/libraries/native/crt_lib.cpp b/libraries/native/crt_lib.cpp index 75fc674567..4201a0149e 100644 --- a/libraries/native/crt_lib.cpp +++ b/libraries/native/crt_lib.cpp @@ -8,6 +8,16 @@ eosio::cdt::output_stream std_err; bool ___disable_output = false; bool ___has_failed = false; bool ___earlier_unit_test_has_failed = false; +static jmp_buf env; +static jmp_buf test_env; +jmp_buf* ___env_ptr = &env; + +void __set_env_test() { + ___env_ptr = &test_env; +} +void __reset_env() { + ___env_ptr = &env; +} void _prints_l(const char* cstr, uint32_t len, uint8_t which) { for (int i=0; i < len; i++) { diff --git a/libraries/native/intrinsics.cpp b/libraries/native/intrinsics.cpp index 0e896339f3..0d5a80786a 100644 --- a/libraries/native/intrinsics.cpp +++ b/libraries/native/intrinsics.cpp @@ -13,18 +13,6 @@ #include #include -#ifdef NATIVELIB_ENABLE_EXCEPTIONS -#define RAISE_ERROR_CHOOSE(_1,_2,NAME,...) NAME -#define RAISE_ERROR1(msg) \ - throw eosio::cdt::assert_exception((const char*)msg) -#define RAISE_ERROR2(msg, len) \ - throw eosio::cdt::assert_exception(std::string((const char*)msg, (size_t)len)) -#define RAISE_ERROR(...) RAISE_ERROR_CHOOSE(__VA_ARGS__, RAISE_ERROR2, RAISE_ERROR1)(__VA_ARGS__) -#else -#define RAISE_ERROR(...) \ - longjmp(*___env_ptr, 1) -#endif - // Boilerplate using namespace eosio::native; extern "C" { @@ -873,7 +861,7 @@ extern "C" { if (test == 0) { _prints(msg, eosio::cdt::output_stream_kind::std_err); _prints_l("\n", 1, eosio::cdt::output_stream_kind::none); - RAISE_ERROR(msg); + longjmp(*___env_ptr, 1); } } @@ -881,7 +869,7 @@ extern "C" { if (test == 0) { _prints_l(msg, len, eosio::cdt::output_stream_kind::std_err); _prints_l("\n", 1, eosio::cdt::output_stream_kind::none); - RAISE_ERROR(msg, len); + longjmp(*___env_ptr, 1); } } @@ -891,7 +879,7 @@ extern "C" { snprintf(buff, 32, "%llu", code); _prints(buff, eosio::cdt::output_stream_kind::std_err); _prints_l("\n", 1, eosio::cdt::output_stream_kind::none); - RAISE_ERROR(buff); + longjmp(*___env_ptr, 1); } } diff --git a/libraries/native/native/eosio/crt.hpp b/libraries/native/native/eosio/crt.hpp index d47e441b63..7a08f1d863 100644 --- a/libraries/native/native/eosio/crt.hpp +++ b/libraries/native/native/eosio/crt.hpp @@ -3,14 +3,6 @@ #include - -#ifdef NATIVELIB_ENABLE_EXCEPTIONS -#include -namespace eosio { namespace cdt { - using assert_exception = std::runtime_error; -}} //ns eosio::cdt -#endif - namespace eosio { namespace cdt { enum output_stream_kind {