@@ -1231,23 +1231,14 @@ findFieldWithName(const std::vector<swift::reflection::FieldInfo> &fields,
1231
1231
static llvm::Optional<std::string>
1232
1232
GetMultiPayloadEnumCaseName (const swift::reflection::EnumTypeInfo *eti,
1233
1233
const DataExtractor &data) {
1234
- using namespace swift ::reflection;
1235
- assert (eti->getEnumKind () == EnumKind::MultiPayloadEnum);
1236
- const auto &cases = eti->getCases ();
1237
- auto it = std::max_element (cases.begin (), cases.end (),
1238
- [](const auto &a, const auto &b) {
1239
- return a.TI .getSize () < b.TI .getSize ();
1240
- });
1241
- if (it == cases.end ())
1242
- return {};
1243
-
1244
- auto payload_capacity = it->TI .getSize ();
1234
+ assert (eti->getEnumKind () == swift::reflection::EnumKind::MultiPayloadEnum);
1235
+ auto payload_capacity = eti->getPayloadSize ();
1245
1236
if (data.GetByteSize () == payload_capacity + 1 ) {
1246
1237
auto tag = data.GetDataStart ()[payload_capacity];
1238
+ const auto &cases = eti->getCases ();
1247
1239
if (tag >= 0 && tag < cases.size ())
1248
1240
return cases[tag].Name ;
1249
1241
}
1250
-
1251
1242
return {};
1252
1243
}
1253
1244
@@ -1268,7 +1259,9 @@ llvm::Optional<std::string> SwiftLanguageRuntimeImpl::GetEnumCaseName(
1268
1259
return eti->getCases ()[case_index].Name ;
1269
1260
1270
1261
// Temporary workaround.
1271
- if (eti->getEnumKind () == EnumKind::MultiPayloadEnum)
1262
+ if (eti->getEnumKind () == EnumKind::MultiPayloadEnum &&
1263
+ type.GetMangledTypeName ().GetStringRef ().startswith (
1264
+ " $s10Foundation9IndexPathV7Storage10" ))
1272
1265
return GetMultiPayloadEnumCaseName (eti, data);
1273
1266
1274
1267
return {};
0 commit comments