45 std::string register_type_name =
"__lldb_register_fields_" + name;
48 type_system->GetTypeForIdentifier<clang::CXXRecordDecl>(
49 type_system->getASTContext(), register_type_name);
59 fields_type = type_system->CreateRecordType(
62 type_system->StartTagDeclarationDefinition(fields_type);
69 if (
const FieldEnum *enum_type = field.GetEnum()) {
71 if (!enumerators.empty()) {
76 std::string enum_type_name =
"__lldb_register_fields_enum_" +
77 enum_type->GetID() +
"_" +
78 std::to_string(byte_size);
83 type_system->GetTypeForIdentifier<clang::EnumDecl>(
84 type_system->getASTContext(), enum_type_name);
87 field_type = field_enum_type;
89 field_type = type_system->CreateEnumerationType(
90 enum_type_name, type_system->GetTranslationUnitDecl(),
93 type_system->StartTagDeclarationDefinition(field_type);
96 for (
auto enumerator : enumerators) {
97 type_system->AddEnumerationValueToEnumerationType(
98 field_type, decl, enumerator.m_name.c_str(),
99 enumerator.m_value, byte_size * 8);
102 type_system->CompleteTagDeclarationDefinition(field_type);
107 type_system->AddFieldToRecordType(fields_type, field.GetName(),
108 field_type, field.GetSizeInBits());
111 type_system->CompleteTagDeclarationDefinition(fields_type);
113 type_system->SetIsPacked(fields_type);
116 assert(llvm::expectedToOptional(fields_type.
GetByteSize(
nullptr))
117 .value_or(0) == flags.
GetSize());