Index: include/lldb/Core/ArchSpec.h =================================================================== --- include/lldb/Core/ArchSpec.h +++ include/lldb/Core/ArchSpec.h @@ -283,7 +283,7 @@ //------------------------------------------------------------------ const ArchSpec &operator=(const ArchSpec &rhs); - static size_t AutoComplete(const char *name, StringList &matches); + static size_t AutoComplete(llvm::StringRef name, StringList &matches); //------------------------------------------------------------------ /// Returns a static string representing the current architecture. Index: include/lldb/Core/PluginManager.h =================================================================== --- include/lldb/Core/PluginManager.h +++ include/lldb/Core/PluginManager.h @@ -244,7 +244,7 @@ static const char *GetPlatformPluginDescriptionAtIndex(uint32_t idx); - static size_t AutoCompletePlatformName(const char *partial_name, + static size_t AutoCompletePlatformName(llvm::StringRef partial_name, StringList &matches); //------------------------------------------------------------------ // Process Index: include/lldb/Core/StringList.h =================================================================== --- include/lldb/Core/StringList.h +++ include/lldb/Core/StringList.h @@ -109,7 +109,7 @@ // values in this collection, will have "exact_matches_idx" // filled in to match the index, or "exact_matches_idx" will // have SIZE_MAX - size_t AutoComplete(const char *s, StringList &matches, + size_t AutoComplete(llvm::StringRef s, StringList &matches, size_t &exact_matches_idx) const; // Dump the StringList to the given lldb_private::Log, `log`, one item per Index: include/lldb/Interpreter/CommandCompletions.h =================================================================== --- include/lldb/Interpreter/CommandCompletions.h +++ include/lldb/Interpreter/CommandCompletions.h @@ -32,7 +32,7 @@ //---------------------------------------------------------------------- typedef int (*CompletionCallback)( CommandInterpreter &interpreter, - const char *completion_str, // This is the argument we are completing + llvm::StringRef completion_str, // This is the argument we are completing int match_start_point, // This is the point in the list of matches that // you should start returning elements int max_return_elements, // This is the number of matches requested. @@ -64,7 +64,7 @@ static bool InvokeCommonCompletionCallbacks( CommandInterpreter &interpreter, uint32_t completion_mask, - const char *completion_str, int match_start_point, + llvm::StringRef completion_str, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, StringList &matches); @@ -72,53 +72,54 @@ // These are the generic completer functions: //---------------------------------------------------------------------- static int DiskFiles(CommandInterpreter &interpreter, - const char *partial_file_name, int match_start_point, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, StringList &matches); static int DiskDirectories(CommandInterpreter &interpreter, - const char *partial_file_name, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, StringList &matches); static int SourceFiles(CommandInterpreter &interpreter, - const char *partial_file_name, int match_start_point, - int max_return_elements, SearchFilter *searcher, - bool &word_complete, StringList &matches); + llvm::StringRef partial_file_name, + int match_start_point, int max_return_elements, + SearchFilter *searcher, bool &word_complete, + StringList &matches); static int Modules(CommandInterpreter &interpreter, - const char *partial_file_name, int match_start_point, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches); static int Symbols(CommandInterpreter &interpreter, - const char *partial_file_name, int match_start_point, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches); static int SettingsNames(CommandInterpreter &interpreter, - const char *partial_file_name, int match_start_point, - int max_return_elements, SearchFilter *searcher, - bool &word_complete, + llvm::StringRef partial_file_name, + int match_start_point, int max_return_elements, + SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches); static int PlatformPluginNames(CommandInterpreter &interpreter, - const char *partial_file_name, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches); static int ArchitectureNames(CommandInterpreter &interpreter, - const char *partial_file_name, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches); static int VariablePath(CommandInterpreter &interpreter, - const char *partial_file_name, int match_start_point, - int max_return_elements, SearchFilter *searcher, - bool &word_complete, + llvm::StringRef partial_file_name, + int match_start_point, int max_return_elements, + SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches); //---------------------------------------------------------------------- @@ -128,7 +129,7 @@ //---------------------------------------------------------------------- class Completer : public Searcher { public: - Completer(CommandInterpreter &interpreter, const char *completion_str, + Completer(CommandInterpreter &interpreter, llvm::StringRef completion_str, int match_start_point, int max_return_elements, StringList &matches); @@ -158,9 +159,9 @@ class SourceFileCompleter : public Completer { public: SourceFileCompleter(CommandInterpreter &interpreter, - bool include_support_files, const char *completion_str, - int match_start_point, int max_return_elements, - StringList &matches); + bool include_support_files, + llvm::StringRef completion_str, int match_start_point, + int max_return_elements, StringList &matches); Searcher::Depth GetDepth() override; @@ -185,9 +186,9 @@ //---------------------------------------------------------------------- class ModuleCompleter : public Completer { public: - ModuleCompleter(CommandInterpreter &interpreter, const char *completion_str, - int match_start_point, int max_return_elements, - StringList &matches); + ModuleCompleter(CommandInterpreter &interpreter, + llvm::StringRef completion_str, int match_start_point, + int max_return_elements, StringList &matches); Searcher::Depth GetDepth() override; @@ -210,9 +211,9 @@ //---------------------------------------------------------------------- class SymbolCompleter : public Completer { public: - SymbolCompleter(CommandInterpreter &interpreter, const char *completion_str, - int match_start_point, int max_return_elements, - StringList &matches); + SymbolCompleter(CommandInterpreter &interpreter, + llvm::StringRef completion_str, int match_start_point, + int max_return_elements, StringList &matches); Searcher::Depth GetDepth() override; Index: include/lldb/Symbol/Variable.h =================================================================== --- include/lldb/Symbol/Variable.h +++ include/lldb/Symbol/Variable.h @@ -1,5 +1,4 @@ -//===-- Variable.h ----------------------------------------------*- C++ -//-*-===// +//===-- Variable.h -----------------------------------------------*- C++-*-===// // // The LLVM Compiler Infrastructure // @@ -103,8 +102,9 @@ GetVariableCallback callback, void *baton, VariableList &variable_list, ValueObjectList &valobj_list); - static size_t AutoComplete(const ExecutionContext &exe_ctx, const char *name, - StringList &matches, bool &word_complete); + static size_t AutoComplete(const ExecutionContext &exe_ctx, + llvm::StringRef name, StringList &matches, + bool &word_complete); CompilerDeclContext GetDeclContext(); Index: include/lldb/Utility/NameMatches.h =================================================================== --- include/lldb/Utility/NameMatches.h +++ include/lldb/Utility/NameMatches.h @@ -11,8 +11,11 @@ #include "lldb/lldb-private-enumerations.h" +#include "llvm/ADT/StringRef.h" + namespace lldb_private { -bool NameMatches(const char *name, NameMatchType match_type, const char *match); +bool NameMatches(llvm::StringRef name, NameMatchType match_type, + llvm::StringRef match); } #endif Index: source/Commands/CommandCompletions.cpp =================================================================== --- source/Commands/CommandCompletions.cpp +++ source/Commands/CommandCompletions.cpp @@ -53,8 +53,9 @@ bool CommandCompletions::InvokeCommonCompletionCallbacks( CommandInterpreter &interpreter, uint32_t completion_mask, - const char *completion_str, int match_start_point, int max_return_elements, - SearchFilter *searcher, bool &word_complete, StringList &matches) { + llvm::StringRef completion_str, int match_start_point, + int max_return_elements, SearchFilter *searcher, bool &word_complete, + StringList &matches) { bool handled = false; if (completion_mask & eCustomCompletion) @@ -76,7 +77,7 @@ } int CommandCompletions::SourceFiles(CommandInterpreter &interpreter, - const char *partial_file_name, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, @@ -158,7 +159,7 @@ return FileSpec::eEnumerateDirectoryResultNext; } -static int DiskFilesOrDirectories(const char *partial_file_name, +static int DiskFilesOrDirectories(llvm::StringRef partial_file_name, bool only_directories, bool &saw_directory, StringList &matches) { // I'm going to use the "glob" function with GLOB_TILDE for user directory @@ -166,23 +167,20 @@ // If it is not defined on your host system, you'll need to implement it // yourself... - size_t partial_name_len = strlen(partial_file_name); + size_t partial_name_len = partial_file_name.size(); if (partial_name_len >= PATH_MAX) return matches.GetSize(); // This copy of the string will be cut up into the directory part, and the - // remainder. end_ptr - // below will point to the place of the remainder in this string. Then when - // we've resolved the - // containing directory, and opened it, we'll read the directory contents and - // overwrite the - // partial_name_copy starting from end_ptr with each of the matches. Thus we - // will preserve - // the form the user originally typed. + // remainder. end_ptr below will point to the place of the remainder in this + // string. Then when we've resolved the containing directory, and opened it, + // we'll read the directory contents and overwrite the partial_name_copy + // starting from end_ptr with each of the matches. Thus we will preserve the + // form the user originally typed. char partial_name_copy[PATH_MAX]; - memcpy(partial_name_copy, partial_file_name, partial_name_len); + memcpy(partial_name_copy, partial_file_name.data(), partial_name_len); partial_name_copy[partial_name_len] = '\0'; // We'll need to save a copy of the remainder for comparison, which we do @@ -280,7 +278,7 @@ } int CommandCompletions::DiskFiles(CommandInterpreter &interpreter, - const char *partial_file_name, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, @@ -292,7 +290,7 @@ } int CommandCompletions::DiskDirectories( - CommandInterpreter &interpreter, const char *partial_file_name, + CommandInterpreter &interpreter, llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, StringList &matches) { int ret_val = @@ -302,7 +300,7 @@ } int CommandCompletions::Modules(CommandInterpreter &interpreter, - const char *partial_file_name, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, StringList &matches) { @@ -321,7 +319,7 @@ } int CommandCompletions::Symbols(CommandInterpreter &interpreter, - const char *partial_file_name, + llvm::StringRef partial_file_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, StringList &matches) { @@ -340,7 +338,7 @@ } int CommandCompletions::SettingsNames( - CommandInterpreter &interpreter, const char *partial_setting_name, + CommandInterpreter &interpreter, llvm::StringRef partial_setting_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, StringList &matches) { // Cache the full setting name list @@ -365,7 +363,7 @@ } int CommandCompletions::PlatformPluginNames( - CommandInterpreter &interpreter, const char *partial_name, + CommandInterpreter &interpreter, llvm::StringRef partial_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches) { const uint32_t num_matches = @@ -375,7 +373,7 @@ } int CommandCompletions::ArchitectureNames( - CommandInterpreter &interpreter, const char *partial_name, + CommandInterpreter &interpreter, llvm::StringRef partial_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches) { const uint32_t num_matches = ArchSpec::AutoComplete(partial_name, matches); @@ -384,7 +382,7 @@ } int CommandCompletions::VariablePath( - CommandInterpreter &interpreter, const char *partial_name, + CommandInterpreter &interpreter, llvm::StringRef partial_name, int match_start_point, int max_return_elements, SearchFilter *searcher, bool &word_complete, lldb_private::StringList &matches) { return Variable::AutoComplete(interpreter.GetExecutionContext(), partial_name, @@ -392,7 +390,7 @@ } CommandCompletions::Completer::Completer(CommandInterpreter &interpreter, - const char *completion_str, + llvm::StringRef completion_str, int match_start_point, int max_return_elements, StringList &matches) @@ -408,8 +406,8 @@ CommandCompletions::SourceFileCompleter::SourceFileCompleter( CommandInterpreter &interpreter, bool include_support_files, - const char *completion_str, int match_start_point, int max_return_elements, - StringList &matches) + llvm::StringRef completion_str, int match_start_point, + int max_return_elements, StringList &matches) : CommandCompletions::Completer(interpreter, completion_str, match_start_point, max_return_elements, matches), @@ -492,13 +490,13 @@ } CommandCompletions::SymbolCompleter::SymbolCompleter( - CommandInterpreter &interpreter, const char *completion_str, + CommandInterpreter &interpreter, llvm::StringRef completion_str, int match_start_point, int max_return_elements, StringList &matches) : CommandCompletions::Completer(interpreter, completion_str, match_start_point, max_return_elements, matches) { std::string regex_str; - if (completion_str && completion_str[0]) { + if (!completion_str.empty()) { regex_str.append("^"); regex_str.append(completion_str); } else { @@ -555,7 +553,7 @@ // ModuleCompleter //---------------------------------------------------------------------- CommandCompletions::ModuleCompleter::ModuleCompleter( - CommandInterpreter &interpreter, const char *completion_str, + CommandInterpreter &interpreter, llvm::StringRef completion_str, int match_start_point, int max_return_elements, StringList &matches) : CommandCompletions::Completer(interpreter, completion_str, match_start_point, max_return_elements, Index: source/Core/ArchSpec.cpp =================================================================== --- source/Core/ArchSpec.cpp +++ source/Core/ArchSpec.cpp @@ -256,8 +256,8 @@ const char *name; }; -size_t ArchSpec::AutoComplete(const char *name, StringList &matches) { - if (name && name[0]) { +size_t ArchSpec::AutoComplete(llvm::StringRef name, StringList &matches) { + if (!name.empty()) { for (uint32_t i = 0; i < llvm::array_lengthof(g_core_definitions); ++i) { if (NameMatches(g_core_definitions[i].name, eNameMatchStartsWith, name)) matches.AppendString(g_core_definitions[i].name); Index: source/Core/PluginManager.cpp =================================================================== --- source/Core/PluginManager.cpp +++ source/Core/PluginManager.cpp @@ -1355,19 +1355,20 @@ return nullptr; } -size_t PluginManager::AutoCompletePlatformName(const char *name, +size_t PluginManager::AutoCompletePlatformName(llvm::StringRef name, StringList &matches) { - if (name) { - std::lock_guard guard(GetPlatformInstancesMutex()); - PlatformInstances &instances = GetPlatformInstances(); - llvm::StringRef name_sref(name); + if (name.empty()) + return matches.GetSize(); - PlatformInstances::iterator pos, end = instances.end(); - for (pos = instances.begin(); pos != end; ++pos) { - llvm::StringRef plugin_name(pos->name.GetCString()); - if (plugin_name.startswith(name_sref)) - matches.AppendString(plugin_name.data()); - } + std::lock_guard guard(GetPlatformInstancesMutex()); + PlatformInstances &instances = GetPlatformInstances(); + llvm::StringRef name_sref(name); + + PlatformInstances::iterator pos, end = instances.end(); + for (pos = instances.begin(); pos != end; ++pos) { + llvm::StringRef plugin_name(pos->name.GetCString()); + if (plugin_name.startswith(name_sref)) + matches.AppendString(plugin_name.data()); } return matches.GetSize(); } Index: source/Core/StringList.cpp =================================================================== --- source/Core/StringList.cpp +++ source/Core/StringList.cpp @@ -230,24 +230,25 @@ return *this; } -size_t StringList::AutoComplete(const char *s, StringList &matches, +size_t StringList::AutoComplete(llvm::StringRef s, StringList &matches, size_t &exact_idx) const { matches.Clear(); exact_idx = SIZE_MAX; - if (s && s[0]) { - const size_t s_len = strlen(s); - const size_t num_strings = m_strings.size(); - - for (size_t i = 0; i < num_strings; ++i) { - if (m_strings[i].find(s) == 0) { - if (exact_idx == SIZE_MAX && m_strings[i].size() == s_len) - exact_idx = matches.GetSize(); - matches.AppendString(m_strings[i]); - } - } - } else { + if (s.empty()) { // No string, so it matches everything matches = *this; + return matches.GetSize(); + } + + const size_t s_len = s.size(); + const size_t num_strings = m_strings.size(); + + for (size_t i = 0; i < num_strings; ++i) { + if (m_strings[i].find(s) == 0) { + if (exact_idx == SIZE_MAX && m_strings[i].size() == s_len) + exact_idx = matches.GetSize(); + matches.AppendString(m_strings[i]); + } } return matches.GetSize(); } Index: source/Interpreter/CommandObject.cpp =================================================================== --- source/Interpreter/CommandObject.cpp +++ source/Interpreter/CommandObject.cpp @@ -1023,7 +1023,7 @@ static StreamString g_archs_help; if (g_archs_help.Empty()) { StringList archs; - ArchSpec::AutoComplete(nullptr, archs); + ArchSpec::AutoComplete(llvm::StringRef(), archs); g_archs_help.Printf("These are the supported architecture names:\n"); archs.Join("\n", g_archs_help); } Index: source/Plugins/Instruction/ARM64/EmulateInstructionARM64.cpp =================================================================== --- source/Plugins/Instruction/ARM64/EmulateInstructionARM64.cpp +++ source/Plugins/Instruction/ARM64/EmulateInstructionARM64.cpp @@ -1,5 +1,4 @@ -//===-- EmulateInstructionARM64.cpp -------------------------------*- C++ -//-*-===// +//===-- EmulateInstructionARM64.cpp ------------------------------*- C++-*-===// // // The LLVM Compiler Infrastructure // Index: source/Symbol/Variable.cpp =================================================================== --- source/Symbol/Variable.cpp +++ source/Symbol/Variable.cpp @@ -31,6 +31,8 @@ #include "lldb/Target/Target.h" #include "lldb/Target/Thread.h" +#include "llvm/ADT/Twine.h" + using namespace lldb; using namespace lldb_private; @@ -483,24 +485,24 @@ } static void PrivateAutoComplete( - StackFrame *frame, const std::string &partial_path, - const std::string + StackFrame *frame, llvm::StringRef partial_path, + const llvm::Twine &prefix_path, // Anything that has been resolved already will be in here const CompilerType &compiler_type, StringList &matches, bool &word_complete); static void PrivateAutoCompleteMembers( StackFrame *frame, const std::string &partial_member_name, - const std::string &partial_path, - const std::string + llvm::StringRef partial_path, + const llvm::Twine &prefix_path, // Anything that has been resolved already will be in here const CompilerType &compiler_type, StringList &matches, bool &word_complete); static void PrivateAutoCompleteMembers( StackFrame *frame, const std::string &partial_member_name, - const std::string &partial_path, - const std::string + llvm::StringRef partial_path, + const llvm::Twine &prefix_path, // Anything that has been resolved already will be in here const CompilerType &compiler_type, StringList &matches, bool &word_complete) { @@ -551,7 +553,7 @@ // already will be in here member_compiler_type.GetCanonicalType(), matches, word_complete); } else { - matches.AppendString(prefix_path + member_name); + matches.AppendString((prefix_path + member_name).str()); } } } @@ -559,8 +561,8 @@ } static void PrivateAutoComplete( - StackFrame *frame, const std::string &partial_path, - const std::string + StackFrame *frame, llvm::StringRef partial_path, + const llvm::Twine &prefix_path, // Anything that has been resolved already will be in here const CompilerType &compiler_type, StringList &matches, bool &word_complete) { @@ -584,15 +586,15 @@ case eTypeClassReference: case eTypeClassTypedef: case eTypeClassVector: { - matches.AppendString(prefix_path); + matches.AppendString(prefix_path.str()); word_complete = matches.GetSize() == 1; } break; case eTypeClassClass: case eTypeClassStruct: case eTypeClassUnion: - if (prefix_path.back() != '.') - matches.AppendString(prefix_path + '.'); + if (prefix_path.str().back() != '.') + matches.AppendString((prefix_path + ".").str()); break; case eTypeClassObjCObject: @@ -602,9 +604,9 @@ case eTypeClassPointer: { bool omit_empty_base_classes = true; if (compiler_type.GetNumChildren(omit_empty_base_classes) > 0) - matches.AppendString(prefix_path + "->"); + matches.AppendString((prefix_path + "->").str()); else { - matches.AppendString(prefix_path); + matches.AppendString(prefix_path.str()); word_complete = true; } } break; @@ -628,21 +630,21 @@ const char ch = partial_path[0]; switch (ch) { case '*': - if (prefix_path.empty()) { - PrivateAutoComplete(frame, partial_path.substr(1), std::string("*"), - compiler_type, matches, word_complete); + if (prefix_path.str().empty()) { + PrivateAutoComplete(frame, partial_path.substr(1), "*", compiler_type, + matches, word_complete); } break; case '&': - if (prefix_path.empty()) { + if (prefix_path.isTriviallyEmpty()) { PrivateAutoComplete(frame, partial_path.substr(1), std::string("&"), compiler_type, matches, word_complete); } break; case '-': - if (partial_path[1] == '>' && !prefix_path.empty()) { + if (partial_path[1] == '>' && !prefix_path.str().empty()) { switch (type_class) { case lldb::eTypeClassPointer: { CompilerType pointee_type(compiler_type.GetPointeeType()); @@ -739,10 +741,10 @@ variable_compiler_type.GetCanonicalType(), matches, word_complete); } else { - matches.AppendString(prefix_path + variable_name); + matches.AppendString((prefix_path + variable_name).str()); } } else if (remaining_partial_path.empty()) { - matches.AppendString(prefix_path + variable_name); + matches.AppendString((prefix_path + variable_name).str()); } } } @@ -754,17 +756,13 @@ } size_t Variable::AutoComplete(const ExecutionContext &exe_ctx, - const char *partial_path_cstr, - StringList &matches, bool &word_complete) { + llvm::StringRef partial_path, StringList &matches, + bool &word_complete) { word_complete = false; - std::string partial_path; - std::string prefix_path; CompilerType compiler_type; - if (partial_path_cstr && partial_path_cstr[0]) - partial_path = partial_path_cstr; - PrivateAutoComplete(exe_ctx.GetFramePtr(), partial_path, prefix_path, - compiler_type, matches, word_complete); + PrivateAutoComplete(exe_ctx.GetFramePtr(), partial_path, "", compiler_type, + matches, word_complete); return matches.GetSize(); } Index: source/Utility/NameMatches.cpp =================================================================== --- source/Utility/NameMatches.cpp +++ source/Utility/NameMatches.cpp @@ -13,33 +13,32 @@ using namespace lldb_private; -bool lldb_private::NameMatches(const char *name, NameMatchType match_type, - const char *match) { +bool lldb_private::NameMatches(llvm::StringRef name, NameMatchType match_type, + llvm::StringRef match) { if (match_type == eNameMatchIgnore) return true; if (name == match) return true; - if (name && match) { - llvm::StringRef name_sref(name); - llvm::StringRef match_sref(match); - switch (match_type) { - case eNameMatchIgnore: // This case cannot occur: tested before - return true; - case eNameMatchEquals: - return name_sref == match_sref; - case eNameMatchContains: - return name_sref.find(match_sref) != llvm::StringRef::npos; - case eNameMatchStartsWith: - return name_sref.startswith(match_sref); - case eNameMatchEndsWith: - return name_sref.endswith(match_sref); - case eNameMatchRegularExpression: { - RegularExpression regex(match_sref); - return regex.Execute(name_sref); - } break; - } + if (name.empty() || match.empty()) + return false; + + switch (match_type) { + case eNameMatchIgnore: // This case cannot occur: tested before + return true; + case eNameMatchEquals: + return name == match; + case eNameMatchContains: + return name.contains(match); + case eNameMatchStartsWith: + return name.startswith(match); + case eNameMatchEndsWith: + return name.endswith(match); + case eNameMatchRegularExpression: { + RegularExpression regex(match); + return regex.Execute(name); + } break; } return false; }