From eb0d3dc0909c245686710f37032f30cc8b23beb2 Mon Sep 17 00:00:00 2001 From: Kevin Heifner Date: Tue, 7 Feb 2023 13:19:35 -0600 Subject: [PATCH] GH-677 Minor cleanup --- libraries/chain/abi_serializer.cpp | 26 ++++++------ .../chain/include/eosio/chain/controller.hpp | 3 +- .../testing/include/eosio/testing/tester.hpp | 3 +- plugins/chain_plugin/chain_plugin.cpp | 40 +++++++------------ tests/chain_plugin_tests.cpp | 3 +- unittests/wasm_tests.cpp | 3 +- 6 files changed, 31 insertions(+), 47 deletions(-) diff --git a/libraries/chain/abi_serializer.cpp b/libraries/chain/abi_serializer.cpp index b99a045dd8..2af9c4d3b6 100644 --- a/libraries/chain/abi_serializer.cpp +++ b/libraries/chain/abi_serializer.cpp @@ -149,29 +149,29 @@ namespace eosio { namespace chain { variants.clear(); action_results.clear(); - for( auto&& st : abi.structs ) + for( auto& st : abi.structs ) structs[st.name] = std::move(st); - for( auto&& td : abi.types ) { + for( auto& td : abi.types ) { EOS_ASSERT(!_is_type(td.new_type_name, ctx), duplicate_abi_type_def_exception, "type already exists", ("new_type_name",impl::limit_size(td.new_type_name))); - typedefs[td.new_type_name] = std::move(td.type); + typedefs[std::move(td.new_type_name)] = std::move(td.type); } - for( auto&& a : abi.actions ) - actions[a.name] = std::move(a.type); + for( auto& a : abi.actions ) + actions[std::move(a.name)] = std::move(a.type); - for( auto&& t : abi.tables ) - tables[t.name] = std::move(t.type); + for( auto& t : abi.tables ) + tables[std::move(t.name)] = std::move(t.type); - for( auto&& e : abi.error_messages ) - error_messages[e.error_code] = std::move(e.error_msg); + for( auto& e : abi.error_messages ) + error_messages[std::move(e.error_code)] = std::move(e.error_msg); - for( auto&& v : abi.variants.value ) - variants[v.name] = std::move(v); + for( auto& v : abi.variants.value ) + variants[std::move(v.name)] = std::move(v); - for( auto&& r : abi.action_results.value ) - action_results[r.name] = std::move(r.result_type); + for( auto& r : abi.action_results.value ) + action_results[std::move(r.name)] = std::move(r.result_type); /** * The ABI vector may contain duplicates which would make it diff --git a/libraries/chain/include/eosio/chain/controller.hpp b/libraries/chain/include/eosio/chain/controller.hpp index 25d6d8b15a..103b235132 100644 --- a/libraries/chain/include/eosio/chain/controller.hpp +++ b/libraries/chain/include/eosio/chain/controller.hpp @@ -348,8 +348,7 @@ namespace eosio { namespace chain { if( n.good() ) { try { const auto& a = get_account( n ); - abi_def abi; - if( abi_serializer::to_abi( a.abi, abi )) + if( abi_def abi; abi_serializer::to_abi( a.abi, abi )) return abi_serializer( std::move(abi), yield ); } FC_CAPTURE_AND_LOG((n)) } diff --git a/libraries/testing/include/eosio/testing/tester.hpp b/libraries/testing/include/eosio/testing/tester.hpp index f8deb47b4e..5781a5fc9c 100644 --- a/libraries/testing/include/eosio/testing/tester.hpp +++ b/libraries/testing/include/eosio/testing/tester.hpp @@ -341,8 +341,7 @@ namespace eosio { namespace testing { return [this]( const account_name& name ) -> std::optional { try { const auto& accnt = control->db().get( name ); - abi_def abi; - if( abi_serializer::to_abi( accnt.abi, abi )) { + if( abi_def abi; abi_serializer::to_abi( accnt.abi, abi )) { return abi_serializer( std::move(abi), abi_serializer::create_yield_function( abi_serializer_max_time ) ); } return std::optional(); diff --git a/plugins/chain_plugin/chain_plugin.cpp b/plugins/chain_plugin/chain_plugin.cpp index b127f458ae..66327693e5 100644 --- a/plugins/chain_plugin/chain_plugin.cpp +++ b/plugins/chain_plugin/chain_plugin.cpp @@ -1783,23 +1783,16 @@ read_only::get_producer_schedule_result read_only::get_producer_schedule( const } -struct resolver_factory { - static auto make(const controller& control, abi_serializer::yield_function_t yield) { - return [&control, yield{std::move(yield)}](const account_name &name) -> std::optional { - const auto* accnt = control.db().template find(name); - if (accnt != nullptr) { - abi_def abi; - if (abi_serializer::to_abi(accnt->abi, abi)) { - return abi_serializer(std::move(abi), yield); - } - } - return std::optional(); - }; - } -}; - auto make_resolver(const controller& control, abi_serializer::yield_function_t yield) { - return resolver_factory::make(control, std::move( yield )); + return [&control, yield{std::move(yield)}](const account_name &name) -> std::optional { + const auto* accnt = control.db().template find(name); + if (accnt != nullptr) { + if (abi_def abi; abi_serializer::to_abi(accnt->abi, abi)) { + return abi_serializer(std::move(abi), yield); + } + } + return {}; + }; } read_only::get_scheduled_transactions_result @@ -2235,8 +2228,7 @@ read_only::get_abi_results read_only::get_abi( const get_abi_params& params, con const auto& d = db.db(); const auto& accnt = d.get( params.account_name ); - abi_def abi; - if( abi_serializer::to_abi(accnt.abi, abi) ) { + if( abi_def abi; abi_serializer::to_abi(accnt.abi, abi) ) { result.abi = std::move(abi); } @@ -2258,8 +2250,7 @@ read_only::get_code_results read_only::get_code( const get_code_params& params, result.code_hash = code_obj.code_hash; } - abi_def abi; - if( abi_serializer::to_abi(accnt_obj.abi, abi) ) { + if( abi_def abi; abi_serializer::to_abi(accnt_obj.abi, abi) ) { result.abi = std::move(abi); } @@ -2397,8 +2388,7 @@ read_only::get_account_results read_only::get_account( const get_account_params& const auto& code_account = db.db().get( config::system_account_name ); - abi_def abi; - if( abi_serializer::to_abi(code_account.abi, abi) ) { + if( abi_def abi; abi_serializer::to_abi(code_account.abi, abi) ) { abi_serializer abis( std::move(abi), abi_serializer::create_yield_function( abi_serializer_max_time ) ); const auto token_code = "eosio.token"_n; @@ -2497,8 +2487,7 @@ read_only::abi_json_to_bin_result read_only::abi_json_to_bin( const read_only::a const auto code_account = db.db().find( params.code ); EOS_ASSERT(code_account != nullptr, contract_query_exception, "Contract can't be found ${contract}", ("contract", params.code)); - abi_def abi; - if( abi_serializer::to_abi(code_account->abi, abi) ) { + if( abi_def abi; abi_serializer::to_abi(code_account->abi, abi) ) { abi_serializer abis( std::move(abi), abi_serializer::create_yield_function( abi_serializer_max_time ) ); auto action_type = abis.get_action_type(params.action); EOS_ASSERT(!action_type.empty(), action_validate_exception, "Unknown action ${action} in contract ${contract}", ("action", params.action)("contract", params.code)); @@ -2517,8 +2506,7 @@ read_only::abi_json_to_bin_result read_only::abi_json_to_bin( const read_only::a read_only::abi_bin_to_json_result read_only::abi_bin_to_json( const read_only::abi_bin_to_json_params& params, const fc::time_point& deadline )const { abi_bin_to_json_result result; const auto& code_account = db.db().get( params.code ); - abi_def abi; - if( abi_serializer::to_abi(code_account.abi, abi) ) { + if( abi_def abi; abi_serializer::to_abi(code_account.abi, abi) ) { abi_serializer abis( std::move(abi), abi_serializer::create_yield_function( abi_serializer_max_time ) ); result.args = abis.binary_to_variant( abis.get_action_type( params.action ), params.binargs, abi_serializer::create_yield_function( abi_serializer_max_time ), shorten_abi_errors ); } else { diff --git a/tests/chain_plugin_tests.cpp b/tests/chain_plugin_tests.cpp index e518f0eb39..914c83c1d9 100644 --- a/tests/chain_plugin_tests.cpp +++ b/tests/chain_plugin_tests.cpp @@ -49,8 +49,7 @@ BOOST_FIXTURE_TEST_CASE( get_block_with_invalid_abi, TESTER ) try { auto resolver = [&,this]( const account_name& name ) -> std::optional { try { const auto& accnt = this->control->db().get( name ); - abi_def abi; - if (abi_serializer::to_abi(accnt.abi, abi)) { + if (abi_def abi; abi_serializer::to_abi(accnt.abi, abi)) { return abi_serializer(std::move(abi), abi_serializer::create_yield_function( abi_serializer_max_time )); } return std::optional(); diff --git a/unittests/wasm_tests.cpp b/unittests/wasm_tests.cpp index 3b10a9bbe2..a6abc323f4 100644 --- a/unittests/wasm_tests.cpp +++ b/unittests/wasm_tests.cpp @@ -183,8 +183,7 @@ BOOST_FIXTURE_TEST_CASE( abi_from_variant, TESTER ) try { auto resolver = [&,this]( const account_name& name ) -> std::optional { try { const auto& accnt = this->control->db().get( name ); - abi_def abi; - if (abi_serializer::to_abi(accnt.abi, abi)) { + if (abi_def abi; abi_serializer::to_abi(accnt.abi, abi)) { return abi_serializer(std::move(abi), abi_serializer::create_yield_function( abi_serializer_max_time )); } return std::optional();