forked from OSchip/llvm-project
Static variables inside classes were not being added to the RecordDecl, now they are. This gets us closer to being able to display static variables in classes.
llvm-svn: 179296
This commit is contained in:
parent
9eb4b33f85
commit
973b6c9b00
|
@ -336,6 +336,26 @@ public:
|
||||||
bitfield_bit_size);
|
bitfield_bit_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clang::VarDecl *
|
||||||
|
AddVariableToRecordType (lldb::clang_type_t record_opaque_type,
|
||||||
|
const char *name,
|
||||||
|
lldb::clang_type_t var_opaque_type,
|
||||||
|
lldb::AccessType access)
|
||||||
|
{
|
||||||
|
return ClangASTContext::AddVariableToRecordType (getASTContext(),
|
||||||
|
record_opaque_type,
|
||||||
|
name,
|
||||||
|
var_opaque_type,
|
||||||
|
access);
|
||||||
|
}
|
||||||
|
|
||||||
|
static clang::VarDecl *
|
||||||
|
AddVariableToRecordType (clang::ASTContext *ast,
|
||||||
|
lldb::clang_type_t record_opaque_type,
|
||||||
|
const char *name,
|
||||||
|
lldb::clang_type_t var_opaque_type,
|
||||||
|
lldb::AccessType access);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
BuildIndirectFields (clang::ASTContext *ast,
|
BuildIndirectFields (clang::ASTContext *ast,
|
||||||
lldb::clang_type_t record_qual_type);
|
lldb::clang_type_t record_qual_type);
|
||||||
|
|
|
@ -1685,7 +1685,18 @@ SymbolFileDWARF::ParseChildMembers
|
||||||
|
|
||||||
// Skip static members
|
// Skip static members
|
||||||
if (is_external && member_byte_offset == UINT32_MAX)
|
if (is_external && member_byte_offset == UINT32_MAX)
|
||||||
|
{
|
||||||
|
Type *var_type = ResolveTypeUID(encoding_uid);
|
||||||
|
|
||||||
|
if (var_type)
|
||||||
|
{
|
||||||
|
GetClangASTContext().AddVariableToRecordType (class_clang_type,
|
||||||
|
name,
|
||||||
|
var_type->GetClangLayoutType(),
|
||||||
|
accessibility);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (is_artificial == false)
|
if (is_artificial == false)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1990,10 +1990,10 @@ ClangASTContext::AddFieldToRecordType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
field->setAccess (ConvertAccessTypeToAccessSpecifier (access));
|
|
||||||
|
|
||||||
if (field)
|
if (field)
|
||||||
{
|
{
|
||||||
|
field->setAccess (ConvertAccessTypeToAccessSpecifier (access));
|
||||||
|
|
||||||
record_decl->addDecl(field);
|
record_decl->addDecl(field);
|
||||||
|
|
||||||
#ifdef LLDB_CONFIGURATION_DEBUG
|
#ifdef LLDB_CONFIGURATION_DEBUG
|
||||||
|
@ -2008,18 +2008,63 @@ ClangASTContext::AddFieldToRecordType
|
||||||
{
|
{
|
||||||
bool is_synthesized = false;
|
bool is_synthesized = false;
|
||||||
field = ClangASTContext::AddObjCClassIVar (ast,
|
field = ClangASTContext::AddObjCClassIVar (ast,
|
||||||
record_clang_type,
|
record_clang_type,
|
||||||
name,
|
name,
|
||||||
field_type,
|
field_type,
|
||||||
access,
|
access,
|
||||||
bitfield_bit_size,
|
bitfield_bit_size,
|
||||||
is_synthesized);
|
is_synthesized);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return field;
|
return field;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clang::VarDecl *
|
||||||
|
ClangASTContext::AddVariableToRecordType (clang::ASTContext *ast,
|
||||||
|
lldb::clang_type_t record_opaque_type,
|
||||||
|
const char *name,
|
||||||
|
lldb::clang_type_t var_type,
|
||||||
|
AccessType access)
|
||||||
|
{
|
||||||
|
clang::VarDecl *var_decl = NULL;
|
||||||
|
|
||||||
|
if (record_opaque_type == NULL || var_type == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
IdentifierTable *identifier_table = &ast->Idents;
|
||||||
|
|
||||||
|
assert (ast != NULL);
|
||||||
|
assert (identifier_table != NULL);
|
||||||
|
|
||||||
|
const RecordType *record_type = dyn_cast<RecordType>(QualType::getFromOpaquePtr(record_opaque_type).getTypePtr());
|
||||||
|
|
||||||
|
if (record_type)
|
||||||
|
{
|
||||||
|
RecordDecl *record_decl = record_type->getDecl();
|
||||||
|
|
||||||
|
var_decl = VarDecl::Create (*ast, // ASTContext &
|
||||||
|
record_decl, // DeclContext *
|
||||||
|
SourceLocation(), // SourceLocation StartLoc
|
||||||
|
SourceLocation(), // SourceLocation IdLoc
|
||||||
|
name ? &identifier_table->get(name) : NULL, // IdentifierInfo *
|
||||||
|
QualType::getFromOpaquePtr(var_type), // Variable QualType
|
||||||
|
NULL, // TypeSourceInfo *
|
||||||
|
SC_Static); // StorageClass
|
||||||
|
if (var_decl)
|
||||||
|
{
|
||||||
|
var_decl->setAccess(ConvertAccessTypeToAccessSpecifier (access));
|
||||||
|
record_decl->addDecl(var_decl);
|
||||||
|
|
||||||
|
#ifdef LLDB_CONFIGURATION_DEBUG
|
||||||
|
VerifyDecl(var_decl);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return var_decl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static clang::AccessSpecifier UnifyAccessSpecifiers (clang::AccessSpecifier lhs,
|
static clang::AccessSpecifier UnifyAccessSpecifiers (clang::AccessSpecifier lhs,
|
||||||
clang::AccessSpecifier rhs)
|
clang::AccessSpecifier rhs)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue