46 std::string register_type_name =
"__lldb_register_fields_" + name;
49 type_system->GetTypeForIdentifier<clang::CXXRecordDecl>(
50 type_system->getASTContext(), register_type_name);
60 fields_type = type_system->CreateRecordType(
62 register_type_name, llvm::to_underlying(clang::TagTypeKind::Struct),
64 type_system->StartTagDeclarationDefinition(fields_type);
71 if (
const FieldEnum *enum_type = field.GetEnum()) {
73 if (!enumerators.empty()) {
78 std::string enum_type_name =
"__lldb_register_fields_enum_" +
79 enum_type->GetID() +
"_" +
80 std::to_string(byte_size);
85 type_system->GetTypeForIdentifier<clang::EnumDecl>(
86 type_system->getASTContext(), enum_type_name);
89 field_type = field_enum_type;
91 field_type = type_system->CreateEnumerationType(
92 enum_type_name, type_system->GetTranslationUnitDecl(),
95 type_system->StartTagDeclarationDefinition(field_type);
98 for (
auto enumerator : enumerators) {
99 type_system->AddEnumerationValueToEnumerationType(
100 field_type, decl, enumerator.m_name.c_str(),
101 enumerator.m_value, byte_size * 8);
104 type_system->CompleteTagDeclarationDefinition(field_type);
109 type_system->AddFieldToRecordType(fields_type, field.GetName(),
111 field.GetSizeInBits());
114 type_system->CompleteTagDeclarationDefinition(fields_type);
116 type_system->SetIsPacked(fields_type);
119 assert(llvm::expectedToOptional(fields_type.
GetByteSize(
nullptr))
120 .value_or(0) == flags.
GetSize());