summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2013-04-03 21:37:16 +0000
committerGreg Clayton <gclayton@apple.com>2013-04-03 21:37:16 +0000
commitbc43cab51d8ceaebb0b56605f6b609ec3c0055e8 (patch)
tree5ba947cb76729bbbdb8f4bd31ce63500a41ddf3e /lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
parentd3254b446211d3f1a455c4f2247dc910df68d69f (diff)
downloadbcm5719-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/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp')
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
index ebfd1e0420d..73d5ff93b58 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
@@ -958,15 +958,16 @@ DWARFCompileUnit::ParseProducerInfo ()
}
else if (strstr(producer_cstr, "clang"))
{
- RegularExpression clang_regex("clang-([0-9]+)\\.([0-9]+)\\.([0-9]+)");
- if (clang_regex.Execute (producer_cstr, 3))
+ static RegularExpression g_clang_version_regex("clang-([0-9]+)\\.([0-9]+)\\.([0-9]+)");
+ RegularExpression::Match regex_match(3);
+ if (g_clang_version_regex.Execute (producer_cstr, &regex_match))
{
std::string str;
- if (clang_regex.GetMatchAtIndex (producer_cstr, 1, str))
+ if (regex_match.GetMatchAtIndex (producer_cstr, 1, str))
m_producer_version_major = Args::StringToUInt32(str.c_str(), UINT32_MAX, 10);
- if (clang_regex.GetMatchAtIndex (producer_cstr, 2, str))
+ if (regex_match.GetMatchAtIndex (producer_cstr, 2, str))
m_producer_version_minor = Args::StringToUInt32(str.c_str(), UINT32_MAX, 10);
- if (clang_regex.GetMatchAtIndex (producer_cstr, 3, str))
+ if (regex_match.GetMatchAtIndex (producer_cstr, 3, str))
m_producer_version_update = Args::StringToUInt32(str.c_str(), UINT32_MAX, 10);
}
m_producer = eProducerClang;
OpenPOWER on IntegriCloud