summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/DataFormatters/FormatClasses.h30
-rw-r--r--lldb/include/lldb/DataFormatters/FormatManager.h10
-rw-r--r--lldb/include/lldb/DataFormatters/LanguageCategory.h36
-rw-r--r--lldb/include/lldb/DataFormatters/TypeCategoryMap.h16
-rw-r--r--lldb/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme12
-rw-r--r--lldb/source/DataFormatters/FormatClasses.cpp47
-rw-r--r--lldb/source/DataFormatters/FormatManager.cpp128
-rw-r--r--lldb/source/DataFormatters/LanguageCategory.cpp120
-rw-r--r--lldb/source/DataFormatters/TypeCategoryMap.cpp32
9 files changed, 236 insertions, 195 deletions
diff --git a/lldb/include/lldb/DataFormatters/FormatClasses.h b/lldb/include/lldb/DataFormatters/FormatClasses.h
index 0f60b86f95f..c44e99ede7e 100644
--- a/lldb/include/lldb/DataFormatters/FormatClasses.h
+++ b/lldb/include/lldb/DataFormatters/FormatClasses.h
@@ -118,6 +118,36 @@ private:
};
typedef std::vector<FormattersMatchCandidate> FormattersMatchVector;
+typedef std::vector<lldb::LanguageType> CandidateLanguagesVector;
+
+class FormattersMatchData
+{
+public:
+ FormattersMatchData (ValueObject&,
+ lldb::DynamicValueType);
+
+ FormattersMatchVector
+ GetMatchesVector ();
+
+ ConstString
+ GetTypeForCache ();
+
+ CandidateLanguagesVector
+ GetCandidateLanguages ();
+
+ ValueObject&
+ GetValueObject ();
+
+ lldb::DynamicValueType
+ GetDynamicValueType ();
+
+private:
+ ValueObject& m_valobj;
+ lldb::DynamicValueType m_dynamic_value_type;
+ std::pair<FormattersMatchVector,bool> m_formatters_match_vector;
+ ConstString m_type_for_cache;
+ CandidateLanguagesVector m_candidate_languages;
+};
class TypeNameSpecifierImpl
{
diff --git a/lldb/include/lldb/DataFormatters/FormatManager.h b/lldb/include/lldb/DataFormatters/FormatManager.h
index 26ecf35b6f0..40616d1cf81 100644
--- a/lldb/include/lldb/DataFormatters/FormatManager.h
+++ b/lldb/include/lldb/DataFormatters/FormatManager.h
@@ -311,16 +311,16 @@ private:
ConstString m_vectortypes_category_name;
lldb::TypeFormatImplSP
- GetHardcodedFormat (ValueObject&,lldb::DynamicValueType);
+ GetHardcodedFormat (FormattersMatchData&);
lldb::TypeSummaryImplSP
- GetHardcodedSummaryFormat (ValueObject&,lldb::DynamicValueType);
+ GetHardcodedSummaryFormat (FormattersMatchData&);
lldb::SyntheticChildrenSP
- GetHardcodedSyntheticChildren (ValueObject&,lldb::DynamicValueType);
+ GetHardcodedSyntheticChildren (FormattersMatchData&);
lldb::TypeValidatorImplSP
- GetHardcodedValidator (ValueObject&,lldb::DynamicValueType);
+ GetHardcodedValidator (FormattersMatchData&);
TypeCategoryMap&
GetCategories ()
@@ -338,6 +338,8 @@ private:
void
LoadVectorFormatters ();
+
+ friend class FormattersMatchData;
};
} // namespace lldb_private
diff --git a/lldb/include/lldb/DataFormatters/LanguageCategory.h b/lldb/include/lldb/DataFormatters/LanguageCategory.h
index cf38696e4d9..4f1d9c64d99 100644
--- a/lldb/include/lldb/DataFormatters/LanguageCategory.h
+++ b/lldb/include/lldb/DataFormatters/LanguageCategory.h
@@ -31,51 +31,39 @@ public:
LanguageCategory (lldb::LanguageType lang_type);
bool
- Get (ValueObject& valobj,
- lldb::DynamicValueType dynamic,
- FormattersMatchVector matches,
+ Get (FormattersMatchData& match_data,
lldb::TypeFormatImplSP& format_sp);
bool
- Get (ValueObject& valobj,
- lldb::DynamicValueType dynamic,
- FormattersMatchVector matches,
+ Get (FormattersMatchData& match_data,
lldb::TypeSummaryImplSP& format_sp);
bool
- Get (ValueObject& valobj,
- lldb::DynamicValueType dynamic,
- FormattersMatchVector matches,
+ Get (FormattersMatchData& match_data,
lldb::SyntheticChildrenSP& format_sp);
bool
- Get (ValueObject& valobj,
- lldb::DynamicValueType dynamic,
- FormattersMatchVector matches,
+ Get (FormattersMatchData& match_data,
lldb::TypeValidatorImplSP& format_sp);
bool
- GetHardcoded (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormatManager& fmt_mgr,
+ GetHardcoded (FormatManager& fmt_mgr,
+ FormattersMatchData& match_data,
lldb::TypeFormatImplSP& format_sp);
bool
- GetHardcoded (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormatManager& fmt_mgr,
+ GetHardcoded (FormatManager& fmt_mgr,
+ FormattersMatchData& match_data,
lldb::TypeSummaryImplSP& format_sp);
bool
- GetHardcoded (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormatManager& fmt_mgr,
+ GetHardcoded (FormatManager& fmt_mgr,
+ FormattersMatchData& match_data,
lldb::SyntheticChildrenSP& format_sp);
bool
- GetHardcoded (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormatManager& fmt_mgr,
+ GetHardcoded (FormatManager& fmt_mgr,
+ FormattersMatchData& match_data,
lldb::TypeValidatorImplSP& format_sp);
lldb::TypeCategoryImplSP
diff --git a/lldb/include/lldb/DataFormatters/TypeCategoryMap.h b/lldb/include/lldb/DataFormatters/TypeCategoryMap.h
index e957934d478..02f57e786dd 100644
--- a/lldb/include/lldb/DataFormatters/TypeCategoryMap.h
+++ b/lldb/include/lldb/DataFormatters/TypeCategoryMap.h
@@ -101,26 +101,18 @@ namespace lldb_private {
}
lldb::TypeFormatImplSP
- GetFormat (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormattersMatchVector matches);
+ GetFormat (FormattersMatchData& match_data);
lldb::TypeSummaryImplSP
- GetSummaryFormat (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormattersMatchVector matches);
+ GetSummaryFormat (FormattersMatchData& match_data);
#ifndef LLDB_DISABLE_PYTHON
lldb::SyntheticChildrenSP
- GetSyntheticChildren (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormattersMatchVector matches);
+ GetSyntheticChildren (FormattersMatchData& match_data);
#endif
lldb::TypeValidatorImplSP
- GetValidator (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormattersMatchVector matches);
+ GetValidator (FormattersMatchData& match_data);
private:
diff --git a/lldb/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme b/lldb/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme
index be9b6638f9a..1ef881d40d5 100644
--- a/lldb/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme
+++ b/lldb/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0610"
- version = "1.8">
+ version = "1.3">
<BuildAction
parallelizeBuildables = "NO"
buildImplicitDependencies = "YES">
@@ -23,10 +23,10 @@
</BuildActionEntries>
</BuildAction>
<TestAction
+ buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- shouldUseLaunchSchemeArgsEnv = "YES"
- buildConfiguration = "Debug">
+ shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
@@ -80,14 +80,16 @@
isEnabled = "YES">
</EnvironmentVariable>
</EnvironmentVariables>
+ <AdditionalOptions>
+ </AdditionalOptions>
</TestAction>
<LaunchAction
+ buildConfiguration = "DebugClang"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
customWorkingDirectory = "/Volumes/work/gclayton/Documents/devb/attach"
- buildConfiguration = "DebugClang"
ignoresPersistentStateOnLaunch = "YES"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
@@ -143,10 +145,10 @@
</AdditionalOptions>
</LaunchAction>
<ProfileAction
+ buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
- buildConfiguration = "Release"
ignoresPersistentStateOnLaunch = "YES"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
diff --git a/lldb/source/DataFormatters/FormatClasses.cpp b/lldb/source/DataFormatters/FormatClasses.cpp
index f27b45b3049..2e4acd175f1 100644
--- a/lldb/source/DataFormatters/FormatClasses.cpp
+++ b/lldb/source/DataFormatters/FormatClasses.cpp
@@ -9,6 +9,8 @@
#include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/DataFormatters/FormatManager.h"
+
// C Includes
// C++ Includes
@@ -20,3 +22,48 @@
using namespace lldb;
using namespace lldb_private;
+FormattersMatchData::FormattersMatchData (ValueObject& valobj, lldb::DynamicValueType use_dynamic) :
+ m_valobj(valobj),
+ m_dynamic_value_type(use_dynamic),
+ m_formatters_match_vector({},false),
+ m_type_for_cache(),
+ m_candidate_languages()
+{
+ m_type_for_cache = FormatManager::GetTypeForCache(valobj, use_dynamic);
+ m_candidate_languages = FormatManager::GetCandidateLanguages(valobj);
+}
+
+FormattersMatchVector
+FormattersMatchData::GetMatchesVector ()
+{
+ if (!m_formatters_match_vector.second)
+ {
+ m_formatters_match_vector.second = true;
+ m_formatters_match_vector.first = FormatManager::GetPossibleMatches(m_valobj, m_dynamic_value_type);
+ }
+ return m_formatters_match_vector.first;
+}
+
+ConstString
+FormattersMatchData::GetTypeForCache ()
+{
+ return m_type_for_cache;
+}
+
+CandidateLanguagesVector
+FormattersMatchData::GetCandidateLanguages ()
+{
+ return m_candidate_languages;
+}
+
+ValueObject&
+FormattersMatchData::GetValueObject ()
+{
+ return m_valobj;
+}
+
+lldb::DynamicValueType
+FormattersMatchData::GetDynamicValueType ()
+{
+ return m_dynamic_value_type;
+}
diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp
index 4941633781f..3a5664f7c5c 100644
--- a/lldb/source/DataFormatters/FormatManager.cpp
+++ b/lldb/source/DataFormatters/FormatManager.cpp
@@ -697,16 +697,15 @@ FormatManager::GetCategoryForLanguage (lldb::LanguageType lang_type)
}
lldb::TypeFormatImplSP
-FormatManager::GetHardcodedFormat (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic)
+FormatManager::GetHardcodedFormat (FormattersMatchData& match_data)
{
TypeFormatImplSP retval_sp;
- for (lldb::LanguageType lang_type : GetCandidateLanguages(valobj))
+ for (lldb::LanguageType lang_type : match_data.GetCandidateLanguages())
{
if (LanguageCategory* lang_category = GetCategoryForLanguage(lang_type))
{
- if (lang_category->GetHardcoded(valobj, use_dynamic, *this, retval_sp))
+ if (lang_category->GetHardcoded(*this, match_data, retval_sp))
break;
}
}
@@ -718,14 +717,15 @@ lldb::TypeFormatImplSP
FormatManager::GetFormat (ValueObject& valobj,
lldb::DynamicValueType use_dynamic)
{
+ FormattersMatchData match_data(valobj, use_dynamic);
+
TypeFormatImplSP retval;
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
- ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
- if (valobj_type)
+ if (match_data.GetTypeForCache())
{
if (log)
- log->Printf("\n\n[FormatManager::GetFormat] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
- if (m_format_cache.GetFormat(valobj_type,retval))
+ log->Printf("\n\n[FormatManager::GetFormat] Looking into cache for type %s", match_data.GetTypeForCache().AsCString("<invalid>"));
+ if (m_format_cache.GetFormat(match_data.GetTypeForCache(),retval))
{
if (log)
{
@@ -739,18 +739,16 @@ FormatManager::GetFormat (ValueObject& valobj,
log->Printf("[FormatManager::GetFormat] Cache search failed. Going normal route");
}
- FormattersMatchVector matches = GetPossibleMatches(valobj, use_dynamic);
-
- retval = m_categories_map.GetFormat(valobj, use_dynamic, matches);
+ retval = m_categories_map.GetFormat(match_data);
if (!retval)
{
if (log)
log->Printf("[FormatManager::GetFormat] Search failed. Giving language a chance.");
- for (lldb::LanguageType lang_type : GetCandidateLanguages(valobj))
+ for (lldb::LanguageType lang_type : match_data.GetCandidateLanguages())
{
if (LanguageCategory* lang_category = GetCategoryForLanguage(lang_type))
{
- if (lang_category->Get(valobj, use_dynamic, matches, retval))
+ if (lang_category->Get(match_data, retval))
break;
}
}
@@ -765,16 +763,16 @@ FormatManager::GetFormat (ValueObject& valobj,
{
if (log)
log->Printf("[FormatManager::GetFormat] Search failed. Giving hardcoded a chance.");
- retval = GetHardcodedFormat(valobj, use_dynamic);
+ retval = GetHardcodedFormat(match_data);
}
- if (valobj_type && (!retval || !retval->NonCacheable()))
+ if (match_data.GetTypeForCache() && (!retval || !retval->NonCacheable()))
{
if (log)
log->Printf("[FormatManager::GetFormat] Caching %p for type %s",
static_cast<void*>(retval.get()),
- valobj_type.AsCString("<invalid>"));
- m_format_cache.SetFormat(valobj_type,retval);
+ match_data.GetTypeForCache().AsCString("<invalid>"));
+ m_format_cache.SetFormat(match_data.GetTypeForCache(),retval);
}
if (log && log->GetDebug())
log->Printf("[FormatManager::GetFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
@@ -782,16 +780,15 @@ FormatManager::GetFormat (ValueObject& valobj,
}
lldb::TypeSummaryImplSP
-FormatManager::GetHardcodedSummaryFormat (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic)
+FormatManager::GetHardcodedSummaryFormat (FormattersMatchData& match_data)
{
TypeSummaryImplSP retval_sp;
- for (lldb::LanguageType lang_type : GetCandidateLanguages(valobj))
+ for (lldb::LanguageType lang_type : match_data.GetCandidateLanguages())
{
if (LanguageCategory* lang_category = GetCategoryForLanguage(lang_type))
{
- if (lang_category->GetHardcoded(valobj, use_dynamic, *this, retval_sp))
+ if (lang_category->GetHardcoded(*this, match_data, retval_sp))
break;
}
}
@@ -803,14 +800,15 @@ lldb::TypeSummaryImplSP
FormatManager::GetSummaryFormat (ValueObject& valobj,
lldb::DynamicValueType use_dynamic)
{
+ FormattersMatchData match_data(valobj, use_dynamic);
+
TypeSummaryImplSP retval;
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
- ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
- if (valobj_type)
+ if (match_data.GetTypeForCache())
{
if (log)
- log->Printf("\n\n[FormatManager::GetSummaryFormat] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
- if (m_format_cache.GetSummary(valobj_type,retval))
+ log->Printf("\n\n[FormatManager::GetSummaryFormat] Looking into cache for type %s", match_data.GetTypeForCache().AsCString("<invalid>"));
+ if (m_format_cache.GetSummary(match_data.GetTypeForCache(),retval))
{
if (log)
{
@@ -824,18 +822,16 @@ FormatManager::GetSummaryFormat (ValueObject& valobj,
log->Printf("[FormatManager::GetSummaryFormat] Cache search failed. Going normal route");
}
- FormattersMatchVector matches = GetPossibleMatches(valobj, use_dynamic);
-
- retval = m_categories_map.GetSummaryFormat(valobj, use_dynamic, matches);
+ retval = m_categories_map.GetSummaryFormat(match_data);
if (!retval)
{
if (log)
log->Printf("[FormatManager::GetSummaryFormat] Search failed. Giving language a chance.");
- for (lldb::LanguageType lang_type : GetCandidateLanguages(valobj))
+ for (lldb::LanguageType lang_type : match_data.GetCandidateLanguages())
{
if (LanguageCategory* lang_category = GetCategoryForLanguage(lang_type))
{
- if (lang_category->Get(valobj, use_dynamic, matches, retval))
+ if (lang_category->Get(match_data, retval))
break;
}
}
@@ -850,16 +846,16 @@ FormatManager::GetSummaryFormat (ValueObject& valobj,
{
if (log)
log->Printf("[FormatManager::GetSummaryFormat] Search failed. Giving hardcoded a chance.");
- retval = GetHardcodedSummaryFormat(valobj, use_dynamic);
+ retval = GetHardcodedSummaryFormat(match_data);
}
- if (valobj_type && (!retval || !retval->NonCacheable()))
+ if (match_data.GetTypeForCache() && (!retval || !retval->NonCacheable()))
{
if (log)
log->Printf("[FormatManager::GetSummaryFormat] Caching %p for type %s",
static_cast<void*>(retval.get()),
- valobj_type.AsCString("<invalid>"));
- m_format_cache.SetSummary(valobj_type,retval);
+ match_data.GetTypeForCache().AsCString("<invalid>"));
+ m_format_cache.SetSummary(match_data.GetTypeForCache(),retval);
}
if (log && log->GetDebug())
log->Printf("[FormatManager::GetSummaryFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
@@ -868,16 +864,15 @@ FormatManager::GetSummaryFormat (ValueObject& valobj,
#ifndef LLDB_DISABLE_PYTHON
lldb::SyntheticChildrenSP
-FormatManager::GetHardcodedSyntheticChildren (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic)
+FormatManager::GetHardcodedSyntheticChildren (FormattersMatchData& match_data)
{
SyntheticChildrenSP retval_sp;
- for (lldb::LanguageType lang_type : GetCandidateLanguages(valobj))
+ for (lldb::LanguageType lang_type : match_data.GetCandidateLanguages())
{
if (LanguageCategory* lang_category = GetCategoryForLanguage(lang_type))
{
- if (lang_category->GetHardcoded(valobj, use_dynamic, *this, retval_sp))
+ if (lang_category->GetHardcoded(*this, match_data, retval_sp))
break;
}
}
@@ -889,14 +884,15 @@ lldb::SyntheticChildrenSP
FormatManager::GetSyntheticChildren (ValueObject& valobj,
lldb::DynamicValueType use_dynamic)
{
+ FormattersMatchData match_data(valobj, use_dynamic);
+
SyntheticChildrenSP retval;
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
- ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
- if (valobj_type)
+ if (match_data.GetTypeForCache())
{
if (log)
- log->Printf("\n\n[FormatManager::GetSyntheticChildren] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
- if (m_format_cache.GetSynthetic(valobj_type,retval))
+ log->Printf("\n\n[FormatManager::GetSyntheticChildren] Looking into cache for type %s", match_data.GetTypeForCache().AsCString("<invalid>"));
+ if (m_format_cache.GetSynthetic(match_data.GetTypeForCache(),retval))
{
if (log)
{
@@ -910,18 +906,16 @@ FormatManager::GetSyntheticChildren (ValueObject& valobj,
log->Printf("[FormatManager::GetSyntheticChildren] Cache search failed. Going normal route");
}
- FormattersMatchVector matches = GetPossibleMatches(valobj, use_dynamic);
-
- retval = m_categories_map.GetSyntheticChildren(valobj, use_dynamic, matches);
+ retval = m_categories_map.GetSyntheticChildren(match_data);
if (!retval)
{
if (log)
log->Printf("[FormatManager::GetSyntheticChildren] Search failed. Giving language a chance.");
- for (lldb::LanguageType lang_type : GetCandidateLanguages(valobj))
+ for (lldb::LanguageType lang_type : match_data.GetCandidateLanguages())
{
if (LanguageCategory* lang_category = GetCategoryForLanguage(lang_type))
{
- if (lang_category->Get(valobj, use_dynamic, matches, retval))
+ if (lang_category->Get(match_data, retval))
break;
}
}
@@ -936,16 +930,16 @@ FormatManager::GetSyntheticChildren (ValueObject& valobj,
{
if (log)
log->Printf("[FormatManager::GetSyntheticChildren] Search failed. Giving hardcoded a chance.");
- retval = GetHardcodedSyntheticChildren(valobj, use_dynamic);
+ retval = GetHardcodedSyntheticChildren(match_data);
}
- if (valobj_type && (!retval || !retval->NonCacheable()))
+ if (match_data.GetTypeForCache() && (!retval || !retval->NonCacheable()))
{
if (log)
log->Printf("[FormatManager::GetSyntheticChildren] Caching %p for type %s",
static_cast<void*>(retval.get()),
- valobj_type.AsCString("<invalid>"));
- m_format_cache.SetSynthetic(valobj_type,retval);
+ match_data.GetTypeForCache().AsCString("<invalid>"));
+ m_format_cache.SetSynthetic(match_data.GetTypeForCache(),retval);
}
if (log && log->GetDebug())
log->Printf("[FormatManager::GetSyntheticChildren] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
@@ -957,14 +951,15 @@ lldb::TypeValidatorImplSP
FormatManager::GetValidator (ValueObject& valobj,
lldb::DynamicValueType use_dynamic)
{
+ FormattersMatchData match_data(valobj, use_dynamic);
+
TypeValidatorImplSP retval;
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
- ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
- if (valobj_type)
+ if (match_data.GetTypeForCache())
{
if (log)
- log->Printf("\n\n[FormatManager::GetValidator] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
- if (m_format_cache.GetValidator(valobj_type,retval))
+ log->Printf("\n\n[FormatManager::GetValidator] Looking into cache for type %s", match_data.GetTypeForCache().AsCString("<invalid>"));
+ if (m_format_cache.GetValidator(match_data.GetTypeForCache(),retval))
{
if (log)
{
@@ -978,18 +973,16 @@ FormatManager::GetValidator (ValueObject& valobj,
log->Printf("[FormatManager::GetValidator] Cache search failed. Going normal route");
}
- FormattersMatchVector matches = GetPossibleMatches(valobj, use_dynamic);
-
- retval = m_categories_map.GetValidator(valobj, use_dynamic, matches);
+ retval = m_categories_map.GetValidator(match_data);
if (!retval)
{
if (log)
log->Printf("[FormatManager::GetValidator] Search failed. Giving language a chance.");
- for (lldb::LanguageType lang_type : GetCandidateLanguages(valobj))
+ for (lldb::LanguageType lang_type : match_data.GetCandidateLanguages())
{
if (LanguageCategory* lang_category = GetCategoryForLanguage(lang_type))
{
- if (lang_category->Get(valobj, use_dynamic, matches, retval))
+ if (lang_category->Get(match_data, retval))
break;
}
}
@@ -1004,16 +997,16 @@ FormatManager::GetValidator (ValueObject& valobj,
{
if (log)
log->Printf("[FormatManager::GetValidator] Search failed. Giving hardcoded a chance.");
- retval = GetHardcodedValidator(valobj, use_dynamic);
+ retval = GetHardcodedValidator(match_data);
}
- if (valobj_type && (!retval || !retval->NonCacheable()))
+ if (match_data.GetTypeForCache() && (!retval || !retval->NonCacheable()))
{
if (log)
log->Printf("[FormatManager::GetValidator] Caching %p for type %s",
static_cast<void*>(retval.get()),
- valobj_type.AsCString("<invalid>"));
- m_format_cache.SetValidator(valobj_type,retval);
+ match_data.GetTypeForCache().AsCString("<invalid>"));
+ m_format_cache.SetValidator(match_data.GetTypeForCache(),retval);
}
if (log && log->GetDebug())
log->Printf("[FormatManager::GetValidator] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
@@ -1021,16 +1014,15 @@ FormatManager::GetValidator (ValueObject& valobj,
}
lldb::TypeValidatorImplSP
-FormatManager::GetHardcodedValidator (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic)
+FormatManager::GetHardcodedValidator (FormattersMatchData& match_data)
{
TypeValidatorImplSP retval_sp;
- for (lldb::LanguageType lang_type : GetCandidateLanguages(valobj))
+ for (lldb::LanguageType lang_type : match_data.GetCandidateLanguages())
{
if (LanguageCategory* lang_category = GetCategoryForLanguage(lang_type))
{
- if (lang_category->GetHardcoded(valobj, use_dynamic, *this, retval_sp))
+ if (lang_category->GetHardcoded(*this, match_data, retval_sp))
break;
}
}
diff --git a/lldb/source/DataFormatters/LanguageCategory.cpp b/lldb/source/DataFormatters/LanguageCategory.cpp
index 8d099e58aec..df2cd2c588a 100644
--- a/lldb/source/DataFormatters/LanguageCategory.cpp
+++ b/lldb/source/DataFormatters/LanguageCategory.cpp
@@ -45,9 +45,7 @@ LanguageCategory::LanguageCategory (lldb::LanguageType lang_type) :
}
bool
-LanguageCategory::Get (ValueObject& valobj,
- lldb::DynamicValueType dynamic,
- FormattersMatchVector matches,
+LanguageCategory::Get (FormattersMatchData& match_data,
lldb::TypeFormatImplSP& format_sp)
{
if (!m_category_sp)
@@ -56,24 +54,23 @@ LanguageCategory::Get (ValueObject& valobj,
if (!IsEnabled())
return false;
- ConstString type_name = FormatManager::GetTypeForCache(valobj, dynamic);
- if (type_name)
+ if (match_data.GetTypeForCache())
{
- if (m_format_cache.GetFormat(type_name, format_sp))
+ if (m_format_cache.GetFormat(match_data.GetTypeForCache(), format_sp))
return format_sp.get() != nullptr;
}
- bool result = m_category_sp->Get(valobj, matches, format_sp);
- if (type_name && (!format_sp || !format_sp->NonCacheable()))
+
+ ValueObject& valobj(match_data.GetValueObject());
+ bool result = m_category_sp->Get(valobj, match_data.GetMatchesVector(), format_sp);
+ if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
{
- m_format_cache.SetFormat(type_name, format_sp);
+ m_format_cache.SetFormat(match_data.GetTypeForCache(), format_sp);
}
return result;
}
bool
-LanguageCategory::Get (ValueObject& valobj,
- lldb::DynamicValueType dynamic,
- FormattersMatchVector matches,
+LanguageCategory::Get (FormattersMatchData& match_data,
lldb::TypeSummaryImplSP& format_sp)
{
if (!m_category_sp)
@@ -82,24 +79,23 @@ LanguageCategory::Get (ValueObject& valobj,
if (!IsEnabled())
return false;
- ConstString type_name = FormatManager::GetTypeForCache(valobj, dynamic);
- if (type_name)
+ if (match_data.GetTypeForCache())
{
- if (m_format_cache.GetSummary(type_name, format_sp))
+ if (m_format_cache.GetSummary(match_data.GetTypeForCache(), format_sp))
return format_sp.get() != nullptr;
}
- bool result = m_category_sp->Get(valobj, matches, format_sp);
- if (type_name && (!format_sp || !format_sp->NonCacheable()))
+
+ ValueObject& valobj(match_data.GetValueObject());
+ bool result = m_category_sp->Get(valobj, match_data.GetMatchesVector(), format_sp);
+ if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
{
- m_format_cache.SetSummary(type_name, format_sp);
+ m_format_cache.SetSummary(match_data.GetTypeForCache(), format_sp);
}
return result;
}
bool
-LanguageCategory::Get (ValueObject& valobj,
- lldb::DynamicValueType dynamic,
- FormattersMatchVector matches,
+LanguageCategory::Get (FormattersMatchData& match_data,
lldb::SyntheticChildrenSP& format_sp)
{
if (!m_category_sp)
@@ -108,24 +104,23 @@ LanguageCategory::Get (ValueObject& valobj,
if (!IsEnabled())
return false;
- ConstString type_name = FormatManager::GetTypeForCache(valobj, dynamic);
- if (type_name)
+ if (match_data.GetTypeForCache())
{
- if (m_format_cache.GetSynthetic(type_name, format_sp))
+ if (m_format_cache.GetSynthetic(match_data.GetTypeForCache(), format_sp))
return format_sp.get() != nullptr;
}
- bool result = m_category_sp->Get(valobj, matches, format_sp);
- if (type_name && (!format_sp || !format_sp->NonCacheable()))
+
+ ValueObject& valobj(match_data.GetValueObject());
+ bool result = m_category_sp->Get(valobj, match_data.GetMatchesVector(), format_sp);
+ if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
{
- m_format_cache.SetSynthetic(type_name, format_sp);
+ m_format_cache.SetSynthetic(match_data.GetTypeForCache(), format_sp);
}
return result;
}
bool
-LanguageCategory::Get (ValueObject& valobj,
- lldb::DynamicValueType dynamic,
- FormattersMatchVector matches,
+LanguageCategory::Get (FormattersMatchData& match_data,
lldb::TypeValidatorImplSP& format_sp)
{
if (!m_category_sp)
@@ -134,108 +129,109 @@ LanguageCategory::Get (ValueObject& valobj,
if (!IsEnabled())
return false;
- ConstString type_name = FormatManager::GetTypeForCache(valobj, dynamic);
- if (type_name)
+ if (match_data.GetTypeForCache())
{
- if (m_format_cache.GetValidator(type_name, format_sp))
+ if (m_format_cache.GetValidator(match_data.GetTypeForCache(), format_sp))
return format_sp.get() != nullptr;
}
- bool result = m_category_sp->Get(valobj, matches, format_sp);
- if (type_name && (!format_sp || !format_sp->NonCacheable()))
+
+ ValueObject& valobj(match_data.GetValueObject());
+ bool result = m_category_sp->Get(valobj, match_data.GetMatchesVector(), format_sp);
+ if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
{
- m_format_cache.SetValidator(type_name, format_sp);
+ m_format_cache.SetValidator(match_data.GetTypeForCache(), format_sp);
}
return result;
}
bool
-LanguageCategory::GetHardcoded (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormatManager& fmt_mgr,
+LanguageCategory::GetHardcoded (FormatManager& fmt_mgr,
+ FormattersMatchData& match_data,
lldb::TypeFormatImplSP& format_sp)
{
if (!IsEnabled())
return false;
- ConstString type_name = FormatManager::GetTypeForCache(valobj, use_dynamic);
-
+ ValueObject& valobj(match_data.GetValueObject());
+ lldb::DynamicValueType use_dynamic(match_data.GetDynamicValueType());
+
for (auto& candidate : m_hardcoded_formats)
{
if ((format_sp = candidate(valobj, use_dynamic, fmt_mgr)))
break;
}
- if (type_name && (!format_sp || !format_sp->NonCacheable()))
+ if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
{
- m_format_cache.SetFormat(type_name, format_sp);
+ m_format_cache.SetFormat(match_data.GetTypeForCache(), format_sp);
}
return format_sp.get() != nullptr;
}
bool
-LanguageCategory::GetHardcoded (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormatManager& fmt_mgr,
+LanguageCategory::GetHardcoded (FormatManager& fmt_mgr,
+ FormattersMatchData& match_data,
lldb::TypeSummaryImplSP& format_sp)
{
if (!IsEnabled())
return false;
-
- ConstString type_name = FormatManager::GetTypeForCache(valobj, use_dynamic);
+ ValueObject& valobj(match_data.GetValueObject());
+ lldb::DynamicValueType use_dynamic(match_data.GetDynamicValueType());
+
for (auto& candidate : m_hardcoded_summaries)
{
if ((format_sp = candidate(valobj, use_dynamic, fmt_mgr)))
break;
}
- if (type_name && (!format_sp || !format_sp->NonCacheable()))
+ if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
{
- m_format_cache.SetSummary(type_name, format_sp);
+ m_format_cache.SetSummary(match_data.GetTypeForCache(), format_sp);
}
return format_sp.get() != nullptr;
}
bool
-LanguageCategory::GetHardcoded (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormatManager& fmt_mgr,
+LanguageCategory::GetHardcoded (FormatManager& fmt_mgr,
+ FormattersMatchData& match_data,
lldb::SyntheticChildrenSP& format_sp)
{
if (!IsEnabled())
return false;
- ConstString type_name = FormatManager::GetTypeForCache(valobj, use_dynamic);
+ ValueObject& valobj(match_data.GetValueObject());
+ lldb::DynamicValueType use_dynamic(match_data.GetDynamicValueType());
for (auto& candidate : m_hardcoded_synthetics)
{
if ((format_sp = candidate(valobj, use_dynamic, fmt_mgr)))
break;
}
- if (type_name && (!format_sp || !format_sp->NonCacheable()))
+ if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
{
- m_format_cache.SetSynthetic(type_name, format_sp);
+ m_format_cache.SetSynthetic(match_data.GetTypeForCache(), format_sp);
}
return format_sp.get() != nullptr;
}
bool
-LanguageCategory::GetHardcoded (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormatManager& fmt_mgr,
+LanguageCategory::GetHardcoded (FormatManager& fmt_mgr,
+ FormattersMatchData& match_data,
lldb::TypeValidatorImplSP& format_sp)
{
if (!IsEnabled())
return false;
- ConstString type_name = FormatManager::GetTypeForCache(valobj, use_dynamic);
+ ValueObject& valobj(match_data.GetValueObject());
+ lldb::DynamicValueType use_dynamic(match_data.GetDynamicValueType());
for (auto& candidate : m_hardcoded_validators)
{
if ((format_sp = candidate(valobj, use_dynamic, fmt_mgr)))
break;
}
- if (type_name && (!format_sp || !format_sp->NonCacheable()))
+ if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
{
- m_format_cache.SetValidator(type_name, format_sp);
+ m_format_cache.SetValidator(match_data.GetTypeForCache(), format_sp);
}
return format_sp.get() != nullptr;
}
diff --git a/lldb/source/DataFormatters/TypeCategoryMap.cpp b/lldb/source/DataFormatters/TypeCategoryMap.cpp
index 1ebfbd528b9..0b3e056f5da 100644
--- a/lldb/source/DataFormatters/TypeCategoryMap.cpp
+++ b/lldb/source/DataFormatters/TypeCategoryMap.cpp
@@ -218,9 +218,7 @@ TypeCategoryMap::AnyMatches (ConstString type_name,
}
lldb::TypeFormatImplSP
-TypeCategoryMap::GetFormat (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormattersMatchVector matches)
+TypeCategoryMap::GetFormat (FormattersMatchData& match_data)
{
Mutex::Locker locker(m_map_mutex);
@@ -231,7 +229,7 @@ TypeCategoryMap::GetFormat (ValueObject& valobj,
if (log)
{
- for (auto match : matches)
+ for (auto match : match_data.GetMatchesVector())
{
log->Printf("[CategoryMap::GetSummaryFormat] candidate match = %s %s %s %s reason = %" PRIu32,
match.GetTypeName().GetCString(),
@@ -248,7 +246,7 @@ TypeCategoryMap::GetFormat (ValueObject& valobj,
lldb::TypeFormatImplSP current_format;
if (log)
log->Printf("[TypeCategoryMap::GetFormat] Trying to use category %s", category_sp->GetName());
- if (!category_sp->Get(valobj, matches, current_format, &reason_why))
+ if (!category_sp->Get(match_data.GetValueObject(), match_data.GetMatchesVector(), current_format, &reason_why))
continue;
return current_format;
}
@@ -258,9 +256,7 @@ TypeCategoryMap::GetFormat (ValueObject& valobj,
}
lldb::TypeSummaryImplSP
-TypeCategoryMap::GetSummaryFormat (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormattersMatchVector matches)
+TypeCategoryMap::GetSummaryFormat (FormattersMatchData& match_data)
{
Mutex::Locker locker(m_map_mutex);
@@ -271,7 +267,7 @@ TypeCategoryMap::GetSummaryFormat (ValueObject& valobj,
if (log)
{
- for (auto match : matches)
+ for (auto match : match_data.GetMatchesVector())
{
log->Printf("[CategoryMap::GetSummaryFormat] candidate match = %s %s %s %s reason = %" PRIu32,
match.GetTypeName().GetCString(),
@@ -288,7 +284,7 @@ TypeCategoryMap::GetSummaryFormat (ValueObject& valobj,
lldb::TypeSummaryImplSP current_format;
if (log)
log->Printf("[CategoryMap::GetSummaryFormat] Trying to use category %s", category_sp->GetName());
- if (!category_sp->Get(valobj, matches, current_format, &reason_why))
+ if (!category_sp->Get(match_data.GetValueObject(), match_data.GetMatchesVector(), current_format, &reason_why))
continue;
return current_format;
}
@@ -299,9 +295,7 @@ TypeCategoryMap::GetSummaryFormat (ValueObject& valobj,
#ifndef LLDB_DISABLE_PYTHON
lldb::SyntheticChildrenSP
-TypeCategoryMap::GetSyntheticChildren (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormattersMatchVector matches)
+TypeCategoryMap::GetSyntheticChildren (FormattersMatchData& match_data)
{
Mutex::Locker locker(m_map_mutex);
@@ -313,7 +307,7 @@ TypeCategoryMap::GetSyntheticChildren (ValueObject& valobj,
if (log)
{
- for (auto match : matches)
+ for (auto match : match_data.GetMatchesVector())
{
log->Printf("[CategoryMap::GetSummaryFormat] candidate match = %s %s %s %s reason = %" PRIu32,
match.GetTypeName().GetCString(),
@@ -330,7 +324,7 @@ TypeCategoryMap::GetSyntheticChildren (ValueObject& valobj,
lldb::SyntheticChildrenSP current_format;
if (log)
log->Printf("[CategoryMap::GetSyntheticChildren] Trying to use category %s", category_sp->GetName());
- if (!category_sp->Get(valobj, matches, current_format, &reason_why))
+ if (!category_sp->Get(match_data.GetValueObject(), match_data.GetMatchesVector(), current_format, &reason_why))
continue;
return current_format;
}
@@ -341,9 +335,7 @@ TypeCategoryMap::GetSyntheticChildren (ValueObject& valobj,
#endif
lldb::TypeValidatorImplSP
-TypeCategoryMap::GetValidator (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic,
- FormattersMatchVector matches)
+TypeCategoryMap::GetValidator (FormattersMatchData& match_data)
{
Mutex::Locker locker(m_map_mutex);
@@ -354,7 +346,7 @@ TypeCategoryMap::GetValidator (ValueObject& valobj,
if (log)
{
- for (auto match : matches)
+ for (auto match : match_data.GetMatchesVector())
{
log->Printf("[CategoryMap::GetValidator] candidate match = %s %s %s %s reason = %" PRIu32,
match.GetTypeName().GetCString(),
@@ -371,7 +363,7 @@ TypeCategoryMap::GetValidator (ValueObject& valobj,
lldb::TypeValidatorImplSP current_format;
if (log)
log->Printf("[CategoryMap::GetValidator] Trying to use category %s", category_sp->GetName());
- if (!category_sp->Get(valobj, matches, current_format, &reason_why))
+ if (!category_sp->Get(match_data.GetValueObject(), match_data.GetMatchesVector(), current_format, &reason_why))
continue;
return current_format;
}
OpenPOWER on IntegriCloud