diff options
author | Greg Clayton <gclayton@apple.com> | 2013-04-03 21:37:16 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2013-04-03 21:37:16 +0000 |
commit | bc43cab51d8ceaebb0b56605f6b609ec3c0055e8 (patch) | |
tree | 5ba947cb76729bbbdb8f4bd31ce63500a41ddf3e /lldb/source/Interpreter/CommandObjectRegexCommand.cpp | |
parent | d3254b446211d3f1a455c4f2247dc910df68d69f (diff) | |
download | bcm5719-llvm-bc43cab51d8ceaebb0b56605f6b609ec3c0055e8.tar.gz bcm5719-llvm-bc43cab51d8ceaebb0b56605f6b609ec3c0055e8.zip |
<rdar://problem/13384801>
Make lldb_private::RegularExpression thread safe everywhere. This was done by removing the m_matches array from the lldb_private::RegularExpression class and putting it into the new lldb_private::RegularExpression::Match class. When executing a regular expression you now have the option to create a lldb_private::RegularExpression::Match object and pass a pointer in if you want to get parenthesized matching. If you don't want any matching, you pass in NULL. The lldb_private::RegularExpression::Match object is initialized with the number of matches you desire. Any matching strings are now extracted from the lldb_private::RegularExpression::Match objects. This makes the regular expression objects thread safe and as a result many more regex objects were turned into static objects that end up using a local lldb_private::RegularExpression::Match object when executing.
llvm-svn: 178702
Diffstat (limited to 'lldb/source/Interpreter/CommandObjectRegexCommand.cpp')
-rw-r--r-- | lldb/source/Interpreter/CommandObjectRegexCommand.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lldb/source/Interpreter/CommandObjectRegexCommand.cpp b/lldb/source/Interpreter/CommandObjectRegexCommand.cpp index 0fc454eb4da..59cf1f05fb6 100644 --- a/lldb/source/Interpreter/CommandObjectRegexCommand.cpp +++ b/lldb/source/Interpreter/CommandObjectRegexCommand.cpp @@ -60,7 +60,9 @@ CommandObjectRegexCommand::DoExecute EntryCollection::const_iterator pos, end = m_entries.end(); for (pos = m_entries.begin(); pos != end; ++pos) { - if (pos->regex.Execute (command, m_max_matches)) + RegularExpression::Match regex_match(m_max_matches); + + if (pos->regex.Execute (command, ®ex_match)) { std::string new_command(pos->command); std::string match_str; @@ -68,7 +70,7 @@ CommandObjectRegexCommand::DoExecute size_t idx, percent_var_idx; for (uint32_t match_idx=1; match_idx <= m_max_matches; ++match_idx) { - if (pos->regex.GetMatchAtIndex (command, match_idx, match_str)) + if (regex_match.GetMatchAtIndex (command, match_idx, match_str)) { const int percent_var_len = ::snprintf (percent_var, sizeof(percent_var), "%%%u", match_idx); for (idx = 0; (percent_var_idx = new_command.find(percent_var, idx)) != std::string::npos; ) |