Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Commit

Permalink
remove system header checking; use C name to find write host function
Browse files Browse the repository at this point in the history
  • Loading branch information
bogniq committed May 21, 2021
1 parent 69f6916 commit ef00c9d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 86 deletions.
8 changes: 1 addition & 7 deletions tools/include/eosio/codegen.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,13 +381,7 @@ namespace eosio { namespace cdt {
}

virtual bool VisitFunctionDecl(FunctionDecl* func_decl) {
SourceManager &sm = get_rewriter().getSourceMgr();
if (sm.isInSystemHeader(func_decl->getLocation()) || sm.isInExternCSystemHeader(func_decl->getLocation())) {
return true;
}

std::string fn = func_decl->getQualifiedNameAsString();
if (func_calls.count(func_decl) == 0 && (is_write_host_func(fn) || is_eosio_wasm_import_write_func(func_decl))) {
if (func_calls.count(func_decl) == 0 && is_write_host_func(func_decl)) {
func_calls[func_decl] = {(CallExpr*)func_decl};
} else {
process_function(func_decl);
Expand Down
96 changes: 17 additions & 79 deletions tools/include/eosio/gen.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -685,74 +685,8 @@ struct generation_utils {
return in_kv_namespace && is_internal;
}

inline bool is_write_host_func( const std::string& t ) {
inline bool is_write_host_func( const clang::FunctionDecl *func_decl ) {
static const std::set<std::string> write_host_funcs =
{
"eosio::internal_use_do_not_use::set_resource_limits",
"eosio::chain::webassembly::interface::set_resource_limits",
"eosio::chain::webassembly::interface::set_wasm_parameters_packed",
"eosio::chain::webassembly::interface::set_resource_limit",
"eosio::chain::controller::set_proposed_producers",
"eosio::chain::webassembly::interface::set_proposed_producers",
"eosio::internal_use_do_not_use::set_proposed_producers_ex",
"eosio::chain::webassembly::interface::set_proposed_producers_ex",
"eosio::internal_use_do_not_use::set_blockchain_parameters_packed",
"eosio::chain::webassembly::interface::set_blockchain_parameters_packed"
"eosio::chain::webassembly::interface::set_parameters_packed",
"eosio::chain::webassembly::set_kv_parameters_packed",
"eosio::internal_use_do_not_use::set_kv_parameters_packed",
"eosio::chain::webassembly::interface::set_kv_parameters_packed",
"eosio::internal_use_do_not_use::set_privileged",
"eosio::chain::webassembly::interface::set_privileged",
"eosio::internal_use_do_not_use::db_store_i64",
"eosio::internal_use_do_not_use::db_update_i64",
"eosio::internal_use_do_not_use::db_remove_i64",
"eosio::internal_use_do_not_use::db_idx64_store",
"eosio::internal_use_do_not_use::db_idx64_update",
"eosio::internal_use_do_not_use::db_idx64_remove",
"eosio::internal_use_do_not_use::db_idx128_store",
"eosio::internal_use_do_not_use::db_idx128_update",
"eosio::internal_use_do_not_use::db_idx128_remove",
"eosio::internal_use_do_not_use::db_idx256_store",
"eosio::internal_use_do_not_use::db_idx256_update",
"eosio::internal_use_do_not_use::db_idx256_remove",
"eosio::internal_use_do_not_use::db_idx_double_store",
"eosio::internal_use_do_not_use::db_idx_double_update",
"eosio::internal_use_do_not_use::db_idx_double_remove",
"eosio::internal_use_do_not_use::db_idx_long_double_store",
"eosio::internal_use_do_not_use::db_idx_long_double_update",
"eosio::internal_use_do_not_use::db_idx_long_double_remove",
"eosio::kv::internal_use_do_not_use::kv_erase",
"eosio::kv::internal_use_do_not_use::kv_set",
// deferred transactions
"eosio::chain::webassembly::interface::send_deferred",
"eosio::send_deferred",
// inline actions
"eosio::internal_use_do_not_use::send_inline",
"eosio::internal_use_do_not_use::send_context_free_inline"
};
return write_host_funcs.count(t) >= 1;
}

inline bool is_deferred_transaction_func( const std::string& t ) {
static const std::set<std::string> deferred_transaction_funcs =
{
"send_deferred",
};
return deferred_transaction_funcs.count(t) >= 1;
}

inline bool is_inline_action_func( const std::string& t ) {
static const std::set<std::string> inline_action_funcs =
{
"send_inline",
"send_context_free_inline"
};
return inline_action_funcs.count(t) >= 1;
}

inline bool is_eosio_wasm_import_write_func( const clang::FunctionDecl *func_decl ) {
static const std::set<std::string> eosio_wasm_import_write_funcs =
{
"set_resource_limits",
"set_wasm_parameters_packed",
Expand Down Expand Up @@ -788,20 +722,24 @@ struct generation_utils {
"send_context_free_inline"
};

if (eosio_wasm_import_write_funcs.count(func_decl->getQualifiedNameAsString()) == 0) {
return false;
}
return write_host_funcs.count(func_decl->getNameInfo().getAsString()) >= 1;
}

if (func_decl->isInExternCContext()) {
auto attrs = func_decl->getAttrs();
for (auto const &a : attrs) {
if (strcmp(a->getSpelling(), "eosio_wasm_import") == 0) {
return true;
}
}
}
inline bool is_deferred_transaction_func( const std::string& t ) {
static const std::set<std::string> deferred_transaction_funcs =
{
"send_deferred",
};
return deferred_transaction_funcs.count(t) >= 1;
}

return false;
inline bool is_inline_action_func( const std::string& t ) {
static const std::set<std::string> inline_action_funcs =
{
"send_inline",
"send_context_free_inline"
};
return inline_action_funcs.count(t) >= 1;
}
};
}} // ns eosio::cdt

0 comments on commit ef00c9d

Please sign in to comment.