@@ -527,6 +527,9 @@ struct Tag {
527
527
Optional<bool > SwiftPrivate;
528
528
Optional<StringRef> SwiftBridge;
529
529
Optional<StringRef> NSErrorDomain;
530
+ Optional<std::string> SwiftImportAs;
531
+ Optional<std::string> SwiftRetainOp;
532
+ Optional<std::string> SwiftReleaseOp;
530
533
Optional<EnumExtensibilityKind> EnumExtensibility;
531
534
Optional<bool > FlagEnum;
532
535
Optional<EnumConvenienceAliasKind> EnumConvenienceKind;
@@ -557,6 +560,9 @@ template <> struct MappingTraits<Tag> {
557
560
IO.mapOptional (" SwiftName" , T.SwiftName , StringRef (" " ));
558
561
IO.mapOptional (" SwiftBridge" , T.SwiftBridge );
559
562
IO.mapOptional (" NSErrorDomain" , T.NSErrorDomain );
563
+ IO.mapOptional (" SwiftImportAs" , T.SwiftImportAs );
564
+ IO.mapOptional (" SwiftReleaseOp" , T.SwiftReleaseOp );
565
+ IO.mapOptional (" SwiftRetainOp" , T.SwiftRetainOp );
560
566
IO.mapOptional (" EnumExtensibility" , T.EnumExtensibility );
561
567
IO.mapOptional (" FlagEnum" , T.FlagEnum );
562
568
IO.mapOptional (" EnumKind" , T.EnumConvenienceKind );
@@ -1130,6 +1136,27 @@ namespace {
1130
1136
if (convertCommonType (t, tagInfo, t.Name ))
1131
1137
continue ;
1132
1138
1139
+ if ((t.SwiftRetainOp .has_value () || t.SwiftReleaseOp .has_value ()) &&
1140
+ !t.SwiftImportAs ) {
1141
+ emitError (llvm::Twine (" should declare SwiftImportAs to use "
1142
+ " SwiftRetainOp and SwiftReleaseOp (for " ) +
1143
+ t.Name + " )" );
1144
+ continue ;
1145
+ }
1146
+ if (t.SwiftReleaseOp .has_value () != t.SwiftRetainOp .has_value ()) {
1147
+ emitError (llvm::Twine (" should declare both SwiftReleaseOp and "
1148
+ " SwiftRetainOp (for " ) +
1149
+ t.Name + " )" );
1150
+ continue ;
1151
+ }
1152
+
1153
+ if (t.SwiftImportAs )
1154
+ tagInfo.SwiftImportAs = t.SwiftImportAs ;
1155
+ if (t.SwiftRetainOp )
1156
+ tagInfo.SwiftRetainOp = t.SwiftRetainOp ;
1157
+ if (t.SwiftReleaseOp )
1158
+ tagInfo.SwiftReleaseOp = t.SwiftReleaseOp ;
1159
+
1133
1160
if (t.EnumConvenienceKind ) {
1134
1161
if (t.EnumExtensibility ) {
1135
1162
emitError (llvm::Twine (
0 commit comments