Files
swift-mirror/stdlib/public/SwiftShims/KeyPath.h
Joe Groff 4c2dde56a0 IRGen: Lower external key path components.
The key path pattern needs to include a reference to the external descriptor, along with hooks for lowering its type arguments and indices, if any. The runtime will need to instantiate and interpolate the external component when the key path object is instantiated.

While we're here, let's also reserve some more component header bytes for future expansion, since this is an ABI we're going to be living with for a while.
2018-02-23 19:03:15 -08:00

105 lines
3.5 KiB
C++

//===--- KeyPath.h - ABI constants for key path objects ---------*- 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
//
//===----------------------------------------------------------------------===//
//
// Constants used in the layout of key path objects.
//
//===----------------------------------------------------------------------===//
#ifndef __SWIFT_SHIMS_KEYPATH_H__
#define __SWIFT_SHIMS_KEYPATH_H__
#include "SwiftStdint.h"
#ifdef __cplusplus
namespace swift {
extern "C" {
#endif
// Bitfields for the key path buffer header.
static const __swift_uint32_t _SwiftKeyPathBufferHeader_SizeMask
= 0x00FFFFFFU;
static const __swift_uint32_t _SwiftKeyPathBufferHeader_TrivialFlag
= 0x80000000U;
static const __swift_uint32_t _SwiftKeyPathBufferHeader_HasReferencePrefixFlag
= 0x40000000U;
static const __swift_uint32_t _SwiftKeyPathBufferHeader_ReservedMask
= 0x3F000000U;
// Bitfields for a key path component header.
static const __swift_uint32_t _SwiftKeyPathComponentHeader_PayloadMask
= 0x00FFFFFFU;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_DiscriminatorMask
= 0x7F000000U;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_DiscriminatorShift
= 24;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_StructTag
= 0;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedTag
= 1;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ClassTag
= 2;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_OptionalTag
= 3;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ExternalTag
= 0x7F;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_MaximumOffsetPayload
= 0x00FFFFFCU;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_UnresolvedIndirectOffsetPayload
= 0x00FFFFFDU;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_UnresolvedFieldOffsetPayload
= 0x00FFFFFEU;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_OutOfLineOffsetPayload
= 0x00FFFFFFU;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_OptionalChainPayload
= 0;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_OptionalWrapPayload
= 1;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_OptionalForcePayload
= 2;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_EndOfReferencePrefixFlag
= 0x80000000U;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedMutatingFlag
= 0x00800000U;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedSettableFlag
= 0x00400000U;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedIDByStoredPropertyFlag
= 0x00200000U;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedIDByVTableOffsetFlag
= 0x00100000U;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedHasArgumentsFlag
= 0x00080000U;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedIDResolutionMask
= 0x0000000FU;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedIDResolved
= 0x00000000U;
static const __swift_uint32_t _SwiftKeyPathComponentHeader_ComputedIDUnresolvedIndirectPointer
= 0x00000002U;
#ifdef __cplusplus
} // extern "C"
} // namespace swift
#endif
#endif // __SWIFT_SHIMS_KEYPATH_H__