| //===--- FormalLinkage.h - Formal linkage of types and decls ----*- 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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef SWIFT_SIL_FORMALLINKAGE_H |
| #define SWIFT_SIL_FORMALLINKAGE_H |
| |
| namespace swift { |
| |
| class CanType; |
| class RootProtocolConformance; |
| class ValueDecl; |
| enum class SILLinkage : unsigned char; |
| enum ForDefinition_t : bool; |
| |
| /// Formal linkage is a property of types and declarations that |
| /// informs, but is not completely equivalent to, the linkage of |
| /// symbols corresponding to those types and declarations. |
| enum class FormalLinkage { |
| /// This entity is visible in multiple Swift modules and has a |
| /// unique file that is known to define it. |
| PublicUnique, |
| |
| /// This entity is visible in multiple Swift modules, but does not |
| /// have a unique file that is known to define it. |
| PublicNonUnique, |
| |
| /// This entity is visible in only a single Swift module and has a |
| /// unique file that is known to define it. |
| HiddenUnique, |
| |
| /// This entity is visible in only a single Swift file. These are by |
| /// definition unique. |
| Private, |
| }; |
| |
| FormalLinkage getDeclLinkage(const ValueDecl *decl); |
| SILLinkage getSILLinkage(FormalLinkage linkage, |
| ForDefinition_t forDefinition); |
| SILLinkage |
| getLinkageForProtocolConformance(const RootProtocolConformance *C, |
| ForDefinition_t definition); |
| |
| } // end swift namespace |
| |
| #endif |