@@ -24,11 +24,20 @@ void PrimitiveTypeMapping::initialize(ASTContext &ctx) {
2424 mappedTypeNames[{ctx.StdlibModuleName , ctx.getIdentifier (#SWIFT_NAME)}] = { \
2525 CLANG_REPR, \
2626 Optional<StringRef>(CLANG_REPR), \
27+ Optional<StringRef>(CLANG_REPR), \
2728 NEEDS_NULLABILITY \
2829 }
2930#define MAP_C (SWIFT_NAME, OBJC_REPR, C_REPR, NEEDS_NULLABILITY ) \
3031 mappedTypeNames[{ctx.StdlibModuleName , ctx.getIdentifier (#SWIFT_NAME)}] = { \
31- OBJC_REPR, Optional<StringRef>(C_REPR), NEEDS_NULLABILITY}
32+ OBJC_REPR, \
33+ Optional<StringRef>(C_REPR), \
34+ Optional<StringRef>(C_REPR), \
35+ NEEDS_NULLABILITY \
36+ }
37+ #define MAP_CXX (SWIFT_NAME, OBJC_REPR, C_REPR, CXX_REPR, NEEDS_NULLABILITY ) \
38+ mappedTypeNames[{ctx.StdlibModuleName , ctx.getIdentifier (#SWIFT_NAME)}] = { \
39+ OBJC_REPR, Optional<StringRef>(C_REPR), Optional<StringRef>(CXX_REPR), \
40+ NEEDS_NULLABILITY}
3241
3342 MAP (CBool, " bool" , false );
3443
@@ -66,8 +75,8 @@ void PrimitiveTypeMapping::initialize(ASTContext &ctx) {
6675 MAP (Float32, " float" , false );
6776 MAP (Float64, " double" , false );
6877
69- MAP_C (Int, " NSInteger" , " ptrdiff_t" , false );
70- MAP_C (UInt, " NSUInteger" , " size_t" , false );
78+ MAP_CXX (Int, " NSInteger" , " ptrdiff_t" , " swift::Int " , false );
79+ MAP_CXX (UInt, " NSUInteger" , " size_t" , " swift::UInt " , false );
7180 MAP_C (Bool, " BOOL" , " bool" , false );
7281
7382 MAP (OpaquePointer, " void *" , true );
@@ -76,40 +85,40 @@ void PrimitiveTypeMapping::initialize(ASTContext &ctx) {
7685
7786 Identifier ID_ObjectiveC = ctx.Id_ObjectiveC ;
7887 mappedTypeNames[{ID_ObjectiveC, ctx.getIdentifier (" ObjCBool" )}] = {
79- " BOOL" , None, false };
88+ " BOOL" , None, None, false };
8089 mappedTypeNames[{ID_ObjectiveC, ctx.getIdentifier (" Selector" )}] = {
81- " SEL" , None, true };
90+ " SEL" , None, None, true };
8291 mappedTypeNames[{ID_ObjectiveC, ctx.getIdentifier (ctx.getSwiftName (
8392 KnownFoundationEntity::NSZone))}] = {
84- " struct _NSZone *" , None, true };
93+ " struct _NSZone *" , None, None, true };
8594
8695 mappedTypeNames[{ctx.Id_Darwin , ctx.getIdentifier (" DarwinBoolean" )}] = {
87- " Boolean" , None, false };
96+ " Boolean" , None, None, false };
8897
8998 mappedTypeNames[{ctx.Id_CoreGraphics , ctx.Id_CGFloat }] = {" CGFloat" , None,
90- false };
99+ None, false };
91100
92101 mappedTypeNames[{ctx.Id_CoreFoundation , ctx.Id_CGFloat }] = {" CGFloat" , None,
93- false };
102+ None, false };
94103
95104 // Use typedefs we set up for SIMD vector types.
96105#define MAP_SIMD_TYPE (BASENAME, _, __ ) \
106+ StringRef simd2##BASENAME = " swift_" #BASENAME " 2" ; \
97107 mappedTypeNames[{ctx.Id_simd , ctx.getIdentifier (#BASENAME " 2" )}] = { \
98- " swift_ " # BASENAME " 2 " , Optional<StringRef>( " swift_ " # BASENAME " 2 " ), \
99- false }; \
108+ simd2## BASENAME, simd2## BASENAME, simd2##BASENAME, false }; \
109+ StringRef simd3##BASENAME = " swift_ " #BASENAME " 3 " ; \
100110 mappedTypeNames[{ctx.Id_simd , ctx.getIdentifier (#BASENAME " 3" )}] = { \
101- " swift_ " # BASENAME " 3 " , Optional<StringRef>( " swift_ " # BASENAME " 3 " ), \
102- false }; \
111+ simd3## BASENAME, simd3## BASENAME, simd3##BASENAME, false }; \
112+ StringRef simd4##BASENAME = " swift_ " #BASENAME " 4 " ; \
103113 mappedTypeNames[{ctx.Id_simd , ctx.getIdentifier (#BASENAME " 4" )}] = { \
104- " swift_" #BASENAME " 4" , Optional<StringRef>(" swift_" #BASENAME " 4" ), \
105- false };
114+ simd4##BASENAME, simd4##BASENAME, simd4##BASENAME, false };
106115#include " swift/ClangImporter/SIMDMappedTypes.def"
107116 static_assert (SWIFT_MAX_IMPORTED_SIMD_ELEMENTS == 4 ,
108117 " must add or remove special name mappings if max number of "
109118 " SIMD elements is changed" );
110119}
111120
112- PrimitiveTypeMapping::ClangTypeInfo *
121+ PrimitiveTypeMapping::FullClangTypeInfo *
113122PrimitiveTypeMapping::getMappedTypeInfoOrNull (const TypeDecl *typeDecl) {
114123 if (mappedTypeNames.empty ())
115124 initialize (typeDecl->getASTContext ());
@@ -122,18 +131,27 @@ PrimitiveTypeMapping::getMappedTypeInfoOrNull(const TypeDecl *typeDecl) {
122131 return &iter->second ;
123132}
124133
125- Optional<PrimitiveTypeMapping::ObjCClangTypeInfo >
134+ Optional<PrimitiveTypeMapping::ClangTypeInfo >
126135PrimitiveTypeMapping::getKnownObjCTypeInfo (const TypeDecl *typeDecl) {
127136 if (auto *typeInfo = getMappedTypeInfoOrNull (typeDecl))
128- return ObjCClangTypeInfo {typeInfo->objcName , typeInfo->canBeNullable };
137+ return ClangTypeInfo {typeInfo->objcName , typeInfo->canBeNullable };
129138 return None;
130139}
131140
132- Optional<PrimitiveTypeMapping::CClangTypeInfo >
141+ Optional<PrimitiveTypeMapping::ClangTypeInfo >
133142PrimitiveTypeMapping::getKnownCTypeInfo (const TypeDecl *typeDecl) {
134143 if (auto *typeInfo = getMappedTypeInfoOrNull (typeDecl)) {
135144 if (typeInfo->cName )
136- return CClangTypeInfo{*typeInfo->cName , typeInfo->canBeNullable };
145+ return ClangTypeInfo{*typeInfo->cName , typeInfo->canBeNullable };
146+ }
147+ return None;
148+ }
149+
150+ Optional<PrimitiveTypeMapping::ClangTypeInfo>
151+ PrimitiveTypeMapping::getKnownCxxTypeInfo (const TypeDecl *typeDecl) {
152+ if (auto *typeInfo = getMappedTypeInfoOrNull (typeDecl)) {
153+ if (typeInfo->cxxName )
154+ return ClangTypeInfo{*typeInfo->cxxName , typeInfo->canBeNullable };
137155 }
138156 return None;
139157}
0 commit comments