[Lldb-commits] [lldb] r249366 - Introduce a FormattersMatchData class which contains all the information that data formatters need in one place, and also allows for lazy computation of expensive chunks of information if need be
Enrico Granata via lldb-commits
lldb-commits at lists.llvm.org
Mon Oct 5 18:02:48 PDT 2015
Author: enrico
Date: Mon Oct 5 20:02:47 2015
New Revision: 249366
URL: http://llvm.org/viewvc/llvm-project?rev=249366&view=rev
Log:
Introduce a FormattersMatchData class which contains all the information that data formatters need in one place, and also allows for lazy computation of expensive chunks of information if need be
This is a NFC commit that is essentially plumbing the new currency through the system
Modified:
lldb/trunk/include/lldb/DataFormatters/FormatClasses.h
lldb/trunk/include/lldb/DataFormatters/FormatManager.h
lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h
lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h
lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme
lldb/trunk/source/DataFormatters/FormatClasses.cpp
lldb/trunk/source/DataFormatters/FormatManager.cpp
lldb/trunk/source/DataFormatters/LanguageCategory.cpp
lldb/trunk/source/DataFormatters/TypeCategoryMap.cpp
Modified: lldb/trunk/include/lldb/DataFormatters/FormatClasses.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/FormatClasses.h?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/include/lldb/DataFormatters/FormatClasses.h (original)
+++ lldb/trunk/include/lldb/DataFormatters/FormatClasses.h Mon Oct 5 20:02:47 2015
@@ -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
{
Modified: lldb/trunk/include/lldb/DataFormatters/FormatManager.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/FormatManager.h?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/include/lldb/DataFormatters/FormatManager.h (original)
+++ lldb/trunk/include/lldb/DataFormatters/FormatManager.h Mon Oct 5 20:02:47 2015
@@ -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
Modified: lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h (original)
+++ lldb/trunk/include/lldb/DataFormatters/LanguageCategory.h Mon Oct 5 20:02:47 2015
@@ -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
Modified: lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h (original)
+++ lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h Mon Oct 5 20:02:47 2015
@@ -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:
Modified: lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme (original)
+++ lldb/trunk/lldb.xcodeproj/xcshareddata/xcschemes/lldb-tool.xcscheme Mon Oct 5 20:02:47 2015
@@ -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
Modified: lldb/trunk/source/DataFormatters/FormatClasses.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/FormatClasses.cpp?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/source/DataFormatters/FormatClasses.cpp (original)
+++ lldb/trunk/source/DataFormatters/FormatClasses.cpp Mon Oct 5 20:02:47 2015
@@ -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;
+}
Modified: lldb/trunk/source/DataFormatters/FormatManager.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/FormatManager.cpp?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/source/DataFormatters/FormatManager.cpp (original)
+++ lldb/trunk/source/DataFormatters/FormatManager.cpp Mon Oct 5 20:02:47 2015
@@ -697,16 +697,15 @@ FormatManager::GetCategoryForLanguage (l
}
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& v
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& v
{
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& v
}
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 (ValueOb
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 (ValueOb
{
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 (ValueOb
#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 (Val
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 (Val
{
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
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
{
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
}
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;
}
}
Modified: lldb/trunk/source/DataFormatters/LanguageCategory.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/LanguageCategory.cpp?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/source/DataFormatters/LanguageCategory.cpp (original)
+++ lldb/trunk/source/DataFormatters/LanguageCategory.cpp Mon Oct 5 20:02:47 2015
@@ -45,9 +45,7 @@ LanguageCategory::LanguageCategory (lldb
}
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& valo
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& valo
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& valo
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& valo
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;
}
Modified: lldb/trunk/source/DataFormatters/TypeCategoryMap.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/TypeCategoryMap.cpp?rev=249366&r1=249365&r2=249366&view=diff
==============================================================================
--- lldb/trunk/source/DataFormatters/TypeCategoryMap.cpp (original)
+++ lldb/trunk/source/DataFormatters/TypeCategoryMap.cpp Mon Oct 5 20:02:47 2015
@@ -218,9 +218,7 @@ TypeCategoryMap::AnyMatches (ConstString
}
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&
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&
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&
}
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 (Value
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 (Value
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 (Value
#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 (V
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 (V
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 (V
#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 (ValueObje
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 (ValueObje
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;
}
More information about the lldb-commits
mailing list