summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Expression/ClangFunction.h2
-rw-r--r--lldb/include/lldb/Symbol/ClangASTContext.h3
-rw-r--r--lldb/include/lldb/Symbol/ClangASTType.h13
-rw-r--r--lldb/source/API/SBType.cpp2
-rw-r--r--lldb/source/Core/ValueObjectChild.cpp2
-rw-r--r--lldb/source/Core/ValueObjectConstResult.cpp2
-rw-r--r--lldb/source/Core/ValueObjectDynamicValue.cpp2
-rw-r--r--lldb/source/Core/ValueObjectMemory.cpp6
-rw-r--r--lldb/source/Core/ValueObjectRegister.cpp2
-rw-r--r--lldb/source/Expression/ClangFunction.cpp8
-rw-r--r--lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp2
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp2
-rw-r--r--lldb/source/Symbol/ClangASTContext.cpp30
-rw-r--r--lldb/source/Symbol/ClangASTType.cpp95
-rw-r--r--lldb/source/Symbol/Type.cpp8
-rw-r--r--lldb/test/lang/c/forward/TestForwardDeclaration.py4
-rw-r--r--lldb/test/lang/cpp/dynamic-value/TestDynamicValue.py2
-rw-r--r--lldb/test/lang/objc/foundation/TestObjCMethods.py2
18 files changed, 94 insertions, 93 deletions
diff --git a/lldb/include/lldb/Expression/ClangFunction.h b/lldb/include/lldb/Expression/ClangFunction.h
index 4a0397d5ecd..111b29ae892 100644
--- a/lldb/include/lldb/Expression/ClangFunction.h
+++ b/lldb/include/lldb/Expression/ClangFunction.h
@@ -612,7 +612,7 @@ private:
Function *m_function_ptr; ///< The function we're going to call. May be NULL if we don't have debug info for the function.
Address m_function_addr; ///< If we don't have the FunctionSP, we at least need the address & return type.
- void *m_function_return_qual_type; ///< The opaque clang qual type for the function return type.
+ lldb::clang_type_t m_function_return_qual_type; ///< The opaque clang qual type for the function return type.
ClangASTContext *m_clang_ast_context; ///< This is the clang_ast_context that we're getting types from the and value, and the function return the function pointer is NULL.
std::string m_wrapper_function_name; ///< The name of the wrapper function.
diff --git a/lldb/include/lldb/Symbol/ClangASTContext.h b/lldb/include/lldb/Symbol/ClangASTContext.h
index 00f27d28ad4..3e503fa8f46 100644
--- a/lldb/include/lldb/Symbol/ClangASTContext.h
+++ b/lldb/include/lldb/Symbol/ClangASTContext.h
@@ -659,9 +659,6 @@ public:
//------------------------------------------------------------------
// Type names
//------------------------------------------------------------------
- static std::string
- GetTypeName(lldb::clang_type_t clang_type);
-
static bool
IsFloatingPointType (lldb::clang_type_t clang_type, uint32_t &count, bool &is_complex);
diff --git a/lldb/include/lldb/Symbol/ClangASTType.h b/lldb/include/lldb/Symbol/ClangASTType.h
index cc75f6106cb..86bef932843 100644
--- a/lldb/include/lldb/Symbol/ClangASTType.h
+++ b/lldb/include/lldb/Symbol/ClangASTType.h
@@ -69,14 +69,17 @@ public:
}
ConstString
- GetClangTypeName ();
+ GetConstTypeName ();
static ConstString
- GetClangTypeName (lldb::clang_type_t clang_type);
-
- static ConstString
- GetClangTypeName (clang::QualType qual_type);
+ GetConstTypeName (lldb::clang_type_t clang_type);
+ static std::string
+ GetTypeNameForQualType (clang::QualType qual_type);
+
+ static std::string
+ GetTypeNameForOpaqueQualType (lldb::clang_type_t opaque_qual_type);
+
uint32_t
GetClangTypeBitWidth ();
diff --git a/lldb/source/API/SBType.cpp b/lldb/source/API/SBType.cpp
index 4f20124d22f..c49f61b7f37 100644
--- a/lldb/source/API/SBType.cpp
+++ b/lldb/source/API/SBType.cpp
@@ -71,7 +71,7 @@ const char *
SBType::GetName ()
{
if (IsValid ())
- return ClangASTType::GetClangTypeName (m_type).AsCString(NULL);
+ return ClangASTType::GetConstTypeName (m_type).AsCString(NULL);
return NULL;
}
diff --git a/lldb/source/Core/ValueObjectChild.cpp b/lldb/source/Core/ValueObjectChild.cpp
index 509852f4b3a..dcbb90a99ea 100644
--- a/lldb/source/Core/ValueObjectChild.cpp
+++ b/lldb/source/Core/ValueObjectChild.cpp
@@ -71,7 +71,7 @@ ValueObjectChild::GetTypeName()
{
if (m_type_name.IsEmpty())
{
- m_type_name = ClangASTType::GetClangTypeName (GetClangType());
+ m_type_name = ClangASTType::GetConstTypeName (GetClangType());
if (m_type_name)
{
if (m_bitfield_bit_size > 0)
diff --git a/lldb/source/Core/ValueObjectConstResult.cpp b/lldb/source/Core/ValueObjectConstResult.cpp
index fbb35eb42aa..7ceddc99607 100644
--- a/lldb/source/Core/ValueObjectConstResult.cpp
+++ b/lldb/source/Core/ValueObjectConstResult.cpp
@@ -273,7 +273,7 @@ ConstString
ValueObjectConstResult::GetTypeName()
{
if (m_type_name.IsEmpty())
- m_type_name = ClangASTType::GetClangTypeName (GetClangType());
+ m_type_name = ClangASTType::GetConstTypeName (GetClangType());
return m_type_name;
}
diff --git a/lldb/source/Core/ValueObjectDynamicValue.cpp b/lldb/source/Core/ValueObjectDynamicValue.cpp
index 0188ad2099f..0a90b85bfdd 100644
--- a/lldb/source/Core/ValueObjectDynamicValue.cpp
+++ b/lldb/source/Core/ValueObjectDynamicValue.cpp
@@ -62,7 +62,7 @@ ValueObjectDynamicValue::GetTypeName()
{
const bool success = UpdateValueIfNeeded();
if (success && m_type_sp)
- return ClangASTType::GetClangTypeName (GetClangType());
+ return ClangASTType::GetConstTypeName (GetClangType());
else
return m_parent->GetTypeName();
}
diff --git a/lldb/source/Core/ValueObjectMemory.cpp b/lldb/source/Core/ValueObjectMemory.cpp
index ad8c8f011da..900d27fbb1a 100644
--- a/lldb/source/Core/ValueObjectMemory.cpp
+++ b/lldb/source/Core/ValueObjectMemory.cpp
@@ -140,11 +140,7 @@ ValueObjectMemory::GetTypeName()
{
if (m_type_sp)
return m_type_sp->GetName();
- ConstString name;
- std::string type_name (ClangASTContext::GetTypeName (m_clang_type.GetOpaqueQualType()));
- if (!type_name.empty())
- name.SetCString (type_name.c_str());
- return name;
+ return ClangASTType::GetConstTypeName (m_clang_type.GetOpaqueQualType());
}
uint32_t
diff --git a/lldb/source/Core/ValueObjectRegister.cpp b/lldb/source/Core/ValueObjectRegister.cpp
index bcefc3064d7..db3d559efa3 100644
--- a/lldb/source/Core/ValueObjectRegister.cpp
+++ b/lldb/source/Core/ValueObjectRegister.cpp
@@ -322,7 +322,7 @@ ConstString
ValueObjectRegister::GetTypeName()
{
if (m_type_name.IsEmpty())
- m_type_name = ClangASTType::GetClangTypeName (GetClangType());
+ m_type_name = ClangASTType::GetConstTypeName (GetClangType());
return m_type_name;
}
diff --git a/lldb/source/Expression/ClangFunction.cpp b/lldb/source/Expression/ClangFunction.cpp
index f3a57d5e9ee..21e2cd2e652 100644
--- a/lldb/source/Expression/ClangFunction.cpp
+++ b/lldb/source/Expression/ClangFunction.cpp
@@ -118,7 +118,7 @@ ClangFunction::CompileFunction (Stream &errors)
// FIXME: How does clang tell us there's no return value? We need to handle that case.
unsigned num_errors = 0;
- std::string return_type_str = ClangASTContext::GetTypeName(m_function_return_qual_type);
+ std::string return_type_str (ClangASTType::GetTypeNameForOpaqueQualType (m_function_return_qual_type));
// Cons up the function we're going to wrap our call in, then compile it...
// We declare the function "extern "C"" because the compiler might be in C++
@@ -164,15 +164,15 @@ ClangFunction::CompileFunction (Stream &errors)
if (trust_function)
{
lldb::clang_type_t arg_clang_type = m_function_ptr->GetArgumentTypeAtIndex(i);
- type_name = ClangASTContext::GetTypeName(arg_clang_type);
+ type_name = ClangASTType::GetTypeNameForOpaqueQualType (arg_clang_type);
}
else
{
Value *arg_value = m_arg_values.GetValueAtIndex(i);
- void *clang_qual_type = arg_value->GetClangType ();
+ lldb::clang_type_t clang_qual_type = arg_value->GetClangType ();
if (clang_qual_type != NULL)
{
- type_name = ClangASTContext::GetTypeName(clang_qual_type);
+ type_name = ClangASTType::GetTypeNameForOpaqueQualType (clang_qual_type);
}
else
{
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
index fd7fc50b493..3cbdc7946ac 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
@@ -528,7 +528,7 @@ AppleObjCRuntimeV2::CreateObjectChecker(const char *name)
size_t
AppleObjCRuntimeV2::GetByteOffsetForIvar (ClangASTType &parent_ast_type, const char *ivar_name)
{
- const char *class_name = parent_ast_type.GetClangTypeName().AsCString();
+ const char *class_name = parent_ast_type.GetConstTypeName().AsCString();
if (!class_name || *class_name == '\0' || !ivar_name || *ivar_name == '\0')
return LLDB_INVALID_IVAR_OFFSET;
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 9a7e7fdfc3b..7740d6fd70b 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -1493,7 +1493,7 @@ SymbolFileDWARF::ResolveClangOpaqueTypeDefinition (lldb::clang_type_t clang_type
if (class_language == eLanguageTypeObjC)
{
- std::string class_str (ClangASTContext::GetTypeName (clang_type));
+ std::string class_str (ClangASTType::GetTypeNameForOpaqueQualType(clang_type));
if (!class_str.empty())
{
diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp
index fb55a51344f..9da3c703ac8 100644
--- a/lldb/source/Symbol/ClangASTContext.cpp
+++ b/lldb/source/Symbol/ClangASTContext.cpp
@@ -2571,9 +2571,8 @@ ClangASTContext::GetChildClangTypeAtIndex
// Base classes should be a multiple of 8 bits in size
assert (bit_offset % 8 == 0);
child_byte_offset = bit_offset/8;
- std::string base_class_type_name(base_class->getType().getAsString());
-
- child_name.assign(base_class_type_name.c_str());
+
+ child_name = ClangASTType::GetTypeNameForQualType(base_class->getType());
uint64_t clang_type_info_bit_size = ast->getTypeSize(base_class->getType());
@@ -3401,7 +3400,8 @@ ClangASTContext::GetIndexOfChildWithName
if (omit_empty_base_classes && RecordHasFields(base_class_decl) == false)
continue;
- if (base_class->getType().getAsString().compare (name) == 0)
+ std::string base_class_type_name (ClangASTType::GetTypeNameForQualType(base_class->getType()));
+ if (base_class_type_name.compare (name) == 0)
return child_idx;
++child_idx;
}
@@ -4660,28 +4660,6 @@ ClangASTContext::CreateTypedefType (const char *name, clang_type_t clang_type, D
return NULL;
}
-
-std::string
-ClangASTContext::GetTypeName (clang_type_t opaque_qual_type)
-{
- std::string return_name;
-
- QualType qual_type(QualType::getFromOpaquePtr(opaque_qual_type));
-
- const TypedefType *typedef_type = qual_type->getAs<TypedefType>();
- if (typedef_type)
- {
- const TypedefNameDecl *typedef_decl = typedef_type->getDecl();
- return_name = typedef_decl->getQualifiedNameAsString();
- }
- else
- {
- return_name = qual_type.getAsString();
- }
-
- return return_name;
-}
-
// Disable this for now since I can't seem to get a nicely formatted float
// out of the APFloat class without just getting the float, double or quad
// and then using a formatted print on it which defeats the purpose. We ideally
diff --git a/lldb/source/Symbol/ClangASTType.cpp b/lldb/source/Symbol/ClangASTType.cpp
index 53011f00fb4..c94d605b25c 100644
--- a/lldb/source/Symbol/ClangASTType.cpp
+++ b/lldb/source/Symbol/ClangASTType.cpp
@@ -38,57 +38,88 @@
#include "lldb/Target/ExecutionContext.h"
#include "lldb/Target/Process.h"
-
using namespace lldb;
using namespace lldb_private;
-ClangASTType::~ClangASTType()
-{
-}
-ConstString
-ClangASTType::GetClangTypeName ()
+ClangASTType::~ClangASTType()
{
- return GetClangTypeName (m_type);
}
-ConstString
-ClangASTType::GetClangTypeName (clang_type_t clang_type)
+std::string
+ClangASTType::GetTypeNameForQualType (clang::QualType qual_type)
{
- ConstString clang_type_name;
- if (clang_type)
+ std::string type_name;
+
+ const clang::TypedefType *typedef_type = qual_type->getAs<clang::TypedefType>();
+ if (typedef_type)
{
- clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
- return GetClangTypeName(qual_type);
-
+ const clang::TypedefNameDecl *typedef_decl = typedef_type->getDecl();
+ type_name = typedef_decl->getQualifiedNameAsString();
}
else
{
- clang_type_name.SetCString ("<invalid>");
+ type_name = qual_type.getAsString();
+ }
+
+ // There is no call to a clang type to get the type name without the
+ // class/struct/union on the front, so lets strip it here
+ const char *type_name_cstr = type_name.c_str();
+ if (type_name_cstr[0] == 'c' &&
+ type_name_cstr[1] == 'l' &&
+ type_name_cstr[2] == 'a' &&
+ type_name_cstr[3] == 's' &&
+ type_name_cstr[4] == 's' &&
+ type_name_cstr[5] == ' ')
+ {
+ type_name.erase (0, 6);
+ }
+ else if (type_name_cstr[0] == 's' &&
+ type_name_cstr[1] == 't' &&
+ type_name_cstr[2] == 'r' &&
+ type_name_cstr[3] == 'u' &&
+ type_name_cstr[4] == 'c' &&
+ type_name_cstr[5] == 't' &&
+ type_name_cstr[6] == ' ')
+ {
+ type_name.erase (0, 7);
}
+ else if (type_name_cstr[0] == 'u' &&
+ type_name_cstr[1] == 'n' &&
+ type_name_cstr[2] == 'i' &&
+ type_name_cstr[3] == 'o' &&
+ type_name_cstr[4] == 'n' &&
+ type_name_cstr[5] == ' ')
+ {
+ type_name.erase (0, 6);
+ }
+ return type_name;
+}
- return clang_type_name;
+std::string
+ClangASTType::GetTypeNameForOpaqueQualType (clang_type_t opaque_qual_type)
+{
+ return GetTypeNameForQualType (clang::QualType::getFromOpaquePtr(opaque_qual_type));
}
+
ConstString
-ClangASTType::GetClangTypeName (clang::QualType qual_type)
+ClangASTType::GetConstTypeName ()
{
- ConstString clang_type_name;
- const clang::TypedefType *typedef_type = qual_type->getAs<clang::TypedefType>();
- if (typedef_type)
- {
- const clang::TypedefNameDecl *typedef_decl = typedef_type->getDecl();
- std::string clang_typedef_name (typedef_decl->getQualifiedNameAsString());
- if (!clang_typedef_name.empty())
- clang_type_name.SetCString (clang_typedef_name.c_str());
- }
+ return GetConstTypeName (m_type);
+}
+
+ConstString
+ClangASTType::GetConstTypeName (clang_type_t clang_type)
+{
+ clang::QualType qual_type(clang::QualType::getFromOpaquePtr(clang_type));
+ std::string type_name (GetTypeNameForQualType (qual_type));
+ ConstString const_type_name;
+ if (type_name.empty())
+ const_type_name.SetCString ("<invalid>");
else
- {
- std::string type_name(qual_type.getAsString());
- if (!type_name.empty())
- clang_type_name.SetCString (type_name.c_str());
- }
- return clang_type_name;
+ const_type_name.SetCString(type_name.c_str());
+ return const_type_name;
}
clang_type_t
diff --git a/lldb/source/Symbol/Type.cpp b/lldb/source/Symbol/Type.cpp
index 71cbcdd2953..f9cd1015aba 100644
--- a/lldb/source/Symbol/Type.cpp
+++ b/lldb/source/Symbol/Type.cpp
@@ -194,14 +194,10 @@ Type::Dump (Stream *s, bool show_context)
const ConstString &
Type::GetName()
{
- if (!(m_name))
+ if (!m_name)
{
if (ResolveClangType(eResolveStateForward))
- {
- std::string type_name = ClangASTContext::GetTypeName (m_clang_type);
- if (!type_name.empty())
- m_name.SetCString (type_name.c_str());
- }
+ m_name = ClangASTType::GetConstTypeName (m_clang_type);
}
return m_name;
}
diff --git a/lldb/test/lang/c/forward/TestForwardDeclaration.py b/lldb/test/lang/c/forward/TestForwardDeclaration.py
index d336e5a5614..2270e56f9f5 100644
--- a/lldb/test/lang/c/forward/TestForwardDeclaration.py
+++ b/lldb/test/lang/c/forward/TestForwardDeclaration.py
@@ -47,13 +47,13 @@ class ForwardDeclarationTestCase(TestBase):
# This should display correctly.
# Note that the member fields of a = 1 and b = 2 is by design.
self.expect("frame variable -T *bar_ptr", VARIABLES_DISPLAYED_CORRECTLY,
- substrs = ['(struct bar) *bar_ptr = ',
+ substrs = ['(bar) *bar_ptr = ',
'(int) a = 1',
'(int) b = 2'])
# And so should this.
self.expect("expression *bar_ptr", VARIABLES_DISPLAYED_CORRECTLY,
- substrs = ['(struct bar)',
+ substrs = ['(bar)',
'(int) a = 1',
'(int) b = 2'])
diff --git a/lldb/test/lang/cpp/dynamic-value/TestDynamicValue.py b/lldb/test/lang/cpp/dynamic-value/TestDynamicValue.py
index d44f52dd8b0..dd6cf221303 100644
--- a/lldb/test/lang/cpp/dynamic-value/TestDynamicValue.py
+++ b/lldb/test/lang/cpp/dynamic-value/TestDynamicValue.py
@@ -168,7 +168,7 @@ class DynamicValueTestCase(TestBase):
# make sure that works as well:
self.expect('frame var -d run-target anotherA.m_client_A._M_ptr', 'frame var finds its way into a child member',
- patterns = ['\(.* B \*\)'])
+ patterns = ['\(B \*\)'])
# Now make sure we also get it right for a reference as well:
diff --git a/lldb/test/lang/objc/foundation/TestObjCMethods.py b/lldb/test/lang/objc/foundation/TestObjCMethods.py
index 0bcff3c21d5..6e6f3ac58bc 100644
--- a/lldb/test/lang/objc/foundation/TestObjCMethods.py
+++ b/lldb/test/lang/objc/foundation/TestObjCMethods.py
@@ -143,7 +143,7 @@ class FoundationTestCase(TestBase):
self.expect("frame variable -T -s", VARIABLES_DISPLAYED_CORRECTLY,
substrs = ["ARG: (MyString *) self"],
patterns = ["ARG: \(.*\) _cmd",
- "(struct objc_selector *)|(SEL)"])
+ "(objc_selector *)|(SEL)"])
# rdar://problem/8651752
# don't crash trying to ask clang how many children an empty record has
OpenPOWER on IntegriCloud