diff --git a/src/Scope.cc b/src/Scope.cc index 509f686594..f53d4e0ba4 100644 --- a/src/Scope.cc +++ b/src/Scope.cc @@ -177,11 +177,11 @@ ID* install_ID(const char* name, const char* module_name, ID* id = new ID(full_name.data(), scope, is_export); if ( SCOPE_FUNCTION != scope ) - global_scope()->Insert(full_name, id); + global_scope()->Insert(std::move(full_name), id); else { id->SetOffset(top_scope->Length()); - top_scope->Insert(full_name, id); + top_scope->Insert(std::move(full_name), id); } return id; diff --git a/src/Scope.h b/src/Scope.h index 0cc70b7751..942d38ae1c 100644 --- a/src/Scope.h +++ b/src/Scope.h @@ -2,6 +2,7 @@ #pragma once +#include #include #include @@ -18,18 +19,23 @@ public: explicit Scope(ID* id, attr_list* al); ~Scope() override; - ID* Lookup(const std::string& name) const + template + ID* Lookup(N &&name) const { - const auto& entry = local.find(name); + const auto& entry = local.find(std::forward(name)); if ( entry != local.end() ) return entry->second; return nullptr; } - void Insert(const std::string& name, ID* id) { local[name] = id; } - ID* Remove(const std::string& name) + + template + void Insert(N &&name, ID* id) { local[std::forward(name)] = id; } + + template + ID* Remove(N &&name) { - const auto& entry = local.find(name); + const auto& entry = local.find(std::forward(name)); if ( entry != local.end() ) { ID* id = entry->second;