@@ -1171,9 +1171,9 @@ llvm::Expected<CompilerType> SwiftLanguageRuntime::GetChildCompilerTypeAtIndex(
1171
1171
auto get_from_field_info =
1172
1172
[&](const swift::reflection::FieldInfo &field,
1173
1173
std::optional<TypeSystemSwift::TupleElement> tuple,
1174
- bool hide_existentials) -> CompilerType {
1174
+ bool hide_existentials, bool is_enum ) -> CompilerType {
1175
1175
bool is_indirect_enum =
1176
- !field.Offset && field.TR &&
1176
+ is_enum && !field.Offset && field.TR &&
1177
1177
llvm::isa<swift::reflection::BuiltinTypeRef>(field.TR ) &&
1178
1178
llvm::isa<swift::reflection::ReferenceTypeInfo>(field.TI ) &&
1179
1179
llvm::cast<swift::reflection::ReferenceTypeInfo>(field.TI )
@@ -1258,7 +1258,9 @@ llvm::Expected<CompilerType> SwiftLanguageRuntime::GetChildCompilerTypeAtIndex(
1258
1258
return llvm::createStringError (llvm::Twine (" index" ) + llvm::Twine (idx) +
1259
1259
" is out of bounds (" +
1260
1260
llvm::Twine (fields.size ()) + " )" );
1261
- return get_from_field_info (fields[idx - 3 ], tuple, false );
1261
+ return get_from_field_info (fields[idx - 3 ], tuple,
1262
+ /* hide_existentials=*/ false ,
1263
+ /* is_enum=*/ false );
1262
1264
}
1263
1265
if (rti->getRecordKind () ==
1264
1266
swift::reflection::RecordKind::ClassExistential) {
@@ -1281,7 +1283,8 @@ llvm::Expected<CompilerType> SwiftLanguageRuntime::GetChildCompilerTypeAtIndex(
1281
1283
return llvm::createStringError (llvm::Twine (" index" ) + llvm::Twine (idx) +
1282
1284
" is out of bounds (" +
1283
1285
llvm::Twine (fields.size ()) + " )" );
1284
- return get_from_field_info (fields[idx], tuple, true );
1286
+ return get_from_field_info (fields[idx], tuple, /* hide_existentials=*/ true ,
1287
+ /* is_enum=*/ false );
1285
1288
}
1286
1289
// Enums.
1287
1290
if (auto *eti = llvm::dyn_cast_or_null<swift::reflection::EnumTypeInfo>(ti)) {
@@ -1291,7 +1294,8 @@ llvm::Expected<CompilerType> SwiftLanguageRuntime::GetChildCompilerTypeAtIndex(
1291
1294
if (!enum_case.TR )
1292
1295
continue ;
1293
1296
if (i++ == idx)
1294
- return get_from_field_info (enum_case, {}, true );
1297
+ return get_from_field_info (enum_case, {}, /* hide_existentials=*/ true ,
1298
+ /* is_enum=*/ true );
1295
1299
}
1296
1300
return llvm::createStringError (
1297
1301
llvm::inconvertibleErrorCode (),
@@ -1414,7 +1418,9 @@ llvm::Expected<CompilerType> SwiftLanguageRuntime::GetChildCompilerTypeAtIndex(
1414
1418
auto fields = rti->getFields ();
1415
1419
if (idx < fields.size ()) {
1416
1420
std::optional<TypeSystemSwift::TupleElement> tuple;
1417
- return get_from_field_info (fields[idx], tuple, true );
1421
+ return get_from_field_info (fields[idx], tuple,
1422
+ /* hide_existentials=*/ true ,
1423
+ /* is_enum=*/ false );
1418
1424
}
1419
1425
}
1420
1426
return llvm::createStringError (llvm::Twine (" index" ) + llvm::Twine (idx) +
@@ -1461,7 +1467,8 @@ llvm::Expected<CompilerType> SwiftLanguageRuntime::GetChildCompilerTypeAtIndex(
1461
1467
return llvm::createStringError (" no record type info" );
1462
1468
for (auto &field : object->getFields ())
1463
1469
if (i++ == idx)
1464
- return get_from_field_info (field, {}, true );
1470
+ return get_from_field_info (field, {}, /* hide_existentials=*/ true ,
1471
+ /* is_enum=*/ false );
1465
1472
1466
1473
return llvm::createStringError (llvm::Twine (" index" ) + llvm::Twine (idx) +
1467
1474
" is out of bounds (" + llvm::Twine (i - 1 ) +
0 commit comments