blob: 9afc664836cf2cb9a01b08f39f67ca4c21721474 [file] [log] [blame]
//===--- MappedTypes.def - Automatically Mapped Type Database ---*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// This file defines the database of C types that are imported as swift stdlib
// types.
//
// MAP_TYPE(C_TYPE_NAME, C_TYPE_KIND, C_TYPE_BITWIDTH,
// SWIFT_MODULE_NAME, SWIFT_TYPE_NAME,
// CAN_BE_MISSING, C_NAME_MAPPING)
// - C_TYPE_NAME is the name of the C type.
// - C_TYPE_KIND is the expected kind of the C type (see MappedCTypeKind
// enum).
// - C_TYPE_BITWIDTH is the expected size of the C type; a zero value
// means "don't check".
// - SWIFT_MODULE_NAME is the name of the swift library module.
// - SWIFT_TYPE_NAME is the name of the corresponding stdlib type.
// - CAN_BE_MISSING is true if it is OK for swift type to be missing in the
// stdlib.
// - C_NAME_MAPPING specifies if we should create a typealias in the
// imported Clang module (see MappedTypeNameKind enum).
//
//===----------------------------------------------------------------------===//
#define MAP_STDLIB_TYPE(C_TYPE_NAME, C_TYPE_KIND, C_TYPE_BITWIDTH, \
SWIFT_TYPE_NAME, CAN_BE_MISSING, \
C_NAME_MAPPING) \
MAP_TYPE(C_TYPE_NAME, C_TYPE_KIND, C_TYPE_BITWIDTH, \
"Swift", SWIFT_TYPE_NAME, CAN_BE_MISSING, \
C_NAME_MAPPING)
// MacTypes.h defines typedefs UIntXX, SIntXX, FloatXX.
MAP_STDLIB_TYPE("UInt8", UnsignedInt, 8, "UInt8", false, DoNothing)
MAP_STDLIB_TYPE("UInt16", UnsignedInt, 16, "UInt16", false, DoNothing)
MAP_STDLIB_TYPE("UInt32", UnsignedInt, 32, "UInt32", false, DoNothing)
MAP_STDLIB_TYPE("UInt64", UnsignedInt, 64, "UInt64", false, DoNothing)
MAP_STDLIB_TYPE("SInt8", SignedInt, 8, "Int8", false, DoNothing)
MAP_STDLIB_TYPE("SInt16", SignedInt, 16, "Int16", false, DoNothing)
MAP_STDLIB_TYPE("SInt32", SignedInt, 32, "Int32", false, DoNothing)
MAP_STDLIB_TYPE("SInt64", SignedInt, 64, "Int64", false, DoNothing)
MAP_STDLIB_TYPE("Float32", FloatIEEEsingle, 32, "Float32", false,
DoNothing)
MAP_STDLIB_TYPE("Float64", FloatIEEEdouble, 64, "Float64", false,
DoNothing)
MAP_STDLIB_TYPE("Float80", FloatX87DoubleExtended, 80, "Float80", true,
DoNothing)
MAP_STDLIB_TYPE("Byte", UnsignedInt, 8, "UInt8", false, DoNothing)
MAP_STDLIB_TYPE("SignedByte", SignedInt, 8, "Int8", false, DoNothing)
MAP_STDLIB_TYPE("ItemCount", UnsignedWord, 0, "Int", false, DoNothing)
MAP_STDLIB_TYPE("ByteCount", UnsignedWord, 0, "Int", false, DoNothing)
MAP_STDLIB_TYPE("UniCharCount", UnsignedWord, 0, "Int", false, DoNothing)
MAP_TYPE("Boolean", UnsignedInt, 8, "Darwin", "DarwinBoolean", true,
DoNothing)
// stdint.h types.
MAP_STDLIB_TYPE("uint8_t", UnsignedInt, 8, "UInt8", false, DoNothing)
MAP_STDLIB_TYPE("uint16_t", UnsignedInt, 16, "UInt16", false, DoNothing)
MAP_STDLIB_TYPE("uint32_t", UnsignedInt, 32, "UInt32", false, DoNothing)
MAP_STDLIB_TYPE("uint64_t", UnsignedInt, 64, "UInt64", false, DoNothing)
MAP_STDLIB_TYPE("int8_t", SignedInt, 8, "Int8", false, DoNothing)
MAP_STDLIB_TYPE("int16_t", SignedInt, 16, "Int16", false, DoNothing)
MAP_STDLIB_TYPE("int32_t", SignedInt, 32, "Int32", false, DoNothing)
MAP_STDLIB_TYPE("int64_t", SignedInt, 64, "Int64", false, DoNothing)
MAP_STDLIB_TYPE("intptr_t", SignedWord, 0, "Int", false, DefineOnly)
MAP_STDLIB_TYPE("uintptr_t", UnsignedWord, 0, "UInt", false, DefineOnly)
// SwiftStdint.h defines its own copy of stdint.h types.
MAP_STDLIB_TYPE("__swift_uint8_t", UnsignedInt, 8, "UInt8", false,
DoNothing)
MAP_STDLIB_TYPE("__swift_uint16_t", UnsignedInt, 16, "UInt16", false,
DoNothing)
MAP_STDLIB_TYPE("__swift_uint32_t", UnsignedInt, 32, "UInt32", false,
DoNothing)
MAP_STDLIB_TYPE("__swift_uint64_t", UnsignedInt, 64, "UInt64", false,
DoNothing)
MAP_STDLIB_TYPE("__swift_int8_t", SignedInt, 8, "Int8", false, DoNothing)
MAP_STDLIB_TYPE("__swift_int16_t", SignedInt, 16, "Int16", false,
DoNothing)
MAP_STDLIB_TYPE("__swift_int32_t", SignedInt, 32, "Int32", false,
DoNothing)
MAP_STDLIB_TYPE("__swift_int64_t", SignedInt, 64, "Int64", false,
DoNothing)
MAP_STDLIB_TYPE("__swift_intptr_t", SignedWord, 0, "Int", false,
DefineOnly)
MAP_STDLIB_TYPE("__swift_uintptr_t", UnsignedWord, 0, "UInt", false,
DefineOnly)
// stddef.h types.
MAP_STDLIB_TYPE("ptrdiff_t", SignedWord, 0, "Int", false, DefineOnly)
MAP_STDLIB_TYPE("size_t", UnsignedWord, 0, "Int", false, DefineOnly)
MAP_STDLIB_TYPE("rsize_t", UnsignedWord, 0, "Int", false, DefineOnly)
// SwiftStddef.h defines its own copy of stddef.h types.
MAP_STDLIB_TYPE("__swift_ptrdiff_t", SignedWord, 0, "Int", false,
DefineOnly)
MAP_STDLIB_TYPE("__swift_size_t", UnsignedWord, 0, "Int", false,
DefineOnly)
MAP_STDLIB_TYPE("__swift_ssize_t", SignedWord, 0, "Int", false,
DefineOnly)
// POSIX sys/types.h.
MAP_STDLIB_TYPE("ssize_t", SignedWord, 0, "Int", false, DefineOnly)
MAP_STDLIB_TYPE("u_int8_t", UnsignedInt, 8, "UInt8", false, DoNothing)
MAP_STDLIB_TYPE("u_int16_t", UnsignedInt, 16, "UInt16", false, DoNothing)
MAP_STDLIB_TYPE("u_int32_t", UnsignedInt, 32, "UInt32", false, DoNothing)
MAP_STDLIB_TYPE("u_int64_t", UnsignedInt, 64, "UInt64", false, DoNothing)
// stdarg.h types.
// Note: this does not catch va_list on platforms where va_list is an array.
// There's an explicit workaround in ImportType.cpp's VisitDecayedType for that.
MAP_STDLIB_TYPE("va_list", VaList, 0, "CVaListPointer", false, DoNothing)
MAP_STDLIB_TYPE("__gnuc_va_list", VaList, 0, "CVaListPointer", false, DoNothing)
MAP_STDLIB_TYPE("__va_list", VaList, 0, "CVaListPointer", false, DoNothing)
// libkern/OSTypes.h types.
MAP_STDLIB_TYPE("UInt", UnsignedInt, 32, "CUnsignedInt", false, DoNothing)
MAP_STDLIB_TYPE("SInt", SignedInt, 32, "CInt", false, DoNothing)
// Dispatch types.
MAP_TYPE("dispatch_block_t", Block, 0, "Dispatch", "dispatch_block_t",
true, DoNothing)
MAP_TYPE("__swift_shims_dispatch_block_t", Block, 0, "Dispatch", "_DispatchBlock",
true, DoNothing)
MAP_TYPE("__swift_shims_dispatch_data_t", ObjCId, 0, "Dispatch", "dispatch_data_t",
true, DoNothing)
// Objective-C types.
MAP_TYPE("BOOL", ObjCBool, 8, "ObjectiveC", "ObjCBool", false, DoNothing)
MAP_TYPE("SEL", ObjCSel, 0, "ObjectiveC", "Selector", false, DoNothing)
MAP_STDLIB_TYPE("Class", ObjCClass, 0, "AnyClass", false, DoNothing)
MAP_STDLIB_TYPE(
Impl.SwiftContext.getSwiftName(KnownFoundationEntity::NSInteger),
SignedWord, 0, "Int", false, DefineOnly)
// Treat NSUInteger specially: exposing it as a typealias for "Int" would be
// confusing.
MAP_STDLIB_TYPE(
Impl.SwiftContext.getSwiftName(KnownFoundationEntity::NSUInteger),
UnsignedWord, 0, "Int", false, DoNothing)
// CoreGraphics types.
MAP_TYPE("CGFloat", CGFloat, 0, "CoreGraphics", "CGFloat", false, DoNothing)
// CoreFoundation types.
// Note that we're preserving the typealias for CFIndex.
MAP_STDLIB_TYPE("CFTypeID", UnsignedWord, 0, "UInt", false, DefineAndUse)
MAP_STDLIB_TYPE("CFOptionFlags", UnsignedWord, 0, "UInt", false, DefineAndUse)
MAP_STDLIB_TYPE("CFHashCode", UnsignedWord, 0, "UInt", false, DefineAndUse)
MAP_STDLIB_TYPE("CFIndex", SignedWord, 0, "Int", false, DefineAndUse)
// Foundation types.
// FIXME: <rdar://problem/16074941> NSStringEncoding doesn't work on 32-bit
MAP_STDLIB_TYPE("NSStringEncoding", UnsignedWord, 0, "UInt", false, DoNothing)
#undef MAP_STDLIB_TYPE
#undef MAP_TYPE