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);
|
||||
}
|
||||
|
||||
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
|
||||
BuildIndirectFields (clang::ASTContext *ast,
|
||||
lldb::clang_type_t record_qual_type);
|
||||
|
|
|
@ -1685,7 +1685,18 @@ SymbolFileDWARF::ParseChildMembers
|
|||
|
||||
// Skip static members
|
||||
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;
|
||||
}
|
||||
|
||||
if (is_artificial == false)
|
||||
{
|
||||
|
|
|
@ -1990,10 +1990,10 @@ ClangASTContext::AddFieldToRecordType
|
|||
}
|
||||
}
|
||||
|
||||
field->setAccess (ConvertAccessTypeToAccessSpecifier (access));
|
||||
|
||||
if (field)
|
||||
{
|
||||
field->setAccess (ConvertAccessTypeToAccessSpecifier (access));
|
||||
|
||||
record_decl->addDecl(field);
|
||||
|
||||
#ifdef LLDB_CONFIGURATION_DEBUG
|
||||
|
@ -2008,18 +2008,63 @@ ClangASTContext::AddFieldToRecordType
|
|||
{
|
||||
bool is_synthesized = false;
|
||||
field = ClangASTContext::AddObjCClassIVar (ast,
|
||||
record_clang_type,
|
||||
name,
|
||||
field_type,
|
||||
access,
|
||||
bitfield_bit_size,
|
||||
is_synthesized);
|
||||
record_clang_type,
|
||||
name,
|
||||
field_type,
|
||||
access,
|
||||
bitfield_bit_size,
|
||||
is_synthesized);
|
||||
}
|
||||
}
|
||||
}
|
||||
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,
|
||||
clang::AccessSpecifier rhs)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue