//===--- 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("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
