@@ -648,24 +648,26 @@ int reflectEnumValue(SwiftReflectionContextRef RC,
648
648
{
649
649
// Get the pointer value from the target
650
650
void * outFreeContext = NULL ;
651
- const void * rawPtr = PipeMemoryReader_readBytes ((void * )& Pipe , EnumInstance , 8 , & outFreeContext );
651
+ const void * rawPtr
652
+ = PipeMemoryReader_readBytes ((void * )& Pipe , EnumInstance , 8 , & outFreeContext );
652
653
uintptr_t instance = * (uintptr_t * )rawPtr ;
654
+ PipeMemoryReader_freeBytes ((void * )& Pipe , rawPtr , outFreeContext );
653
655
654
656
// Indirect enum is stored as the first field of a closure context...
655
657
swift_typeinfo_t TI = swift_reflection_infoForInstance (RC , instance );
656
658
if (TI .Kind == SWIFT_CLOSURE_CONTEXT ) {
657
659
swift_childinfo_t CaseInfo
658
660
= swift_reflection_childOfInstance (RC , instance , 0 );
659
- if (CaseInfo .TR != 0 ) {
660
- if (CaseInfo .Kind == SWIFT_NO_PAYLOAD_ENUM
661
- || CaseInfo .Kind == SWIFT_SINGLE_PAYLOAD_ENUM
662
- || CaseInfo .Kind == SWIFT_MULTI_PAYLOAD_ENUM ) {
663
- EnumTypeRef = CaseInfo .TR ;
664
- EnumInstance = instance + CaseInfo .Offset ;
665
- break ;
666
- }
661
+ if (CaseInfo .Kind == SWIFT_NO_PAYLOAD_ENUM
662
+ || CaseInfo .Kind == SWIFT_SINGLE_PAYLOAD_ENUM
663
+ || CaseInfo .Kind == SWIFT_MULTI_PAYLOAD_ENUM ) {
664
+ // Found the indirect enum storage, loop to print it out.
665
+ EnumTypeRef = CaseInfo .TR ;
666
+ EnumInstance = instance + CaseInfo .Offset ;
667
+ break ;
667
668
}
668
669
}
670
+ // Not an indirect enum, fall through...
669
671
__attribute__((fallthrough ));
670
672
}
671
673
default :
@@ -679,7 +681,6 @@ int reflectEnumValue(SwiftReflectionContextRef RC,
679
681
break ;
680
682
}
681
683
}
682
-
683
684
}
684
685
for (int i = 0 ; i < parens ; ++ i ) {
685
686
printf (")" );
0 commit comments