mirror of
https://github.com/opnsense/src.git
synced 2026-02-21 00:40:33 -05:00
57 lines
1.9 KiB
C++
57 lines
1.9 KiB
C++
//===--- Linkage.h - Linkage enumeration and utilities ----------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the Linkage enumeration and various utility
|
|
// functions.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef LLVM_CLANG_BASIC_LINKAGE_H
|
|
#define LLVM_CLANG_BASIC_LINKAGE_H
|
|
|
|
namespace clang {
|
|
|
|
/// \brief Describes the different kinds of linkage
|
|
/// (C++ [basic.link], C99 6.2.2) that an entity may have.
|
|
enum Linkage {
|
|
/// \brief No linkage, which means that the entity is unique and
|
|
/// can only be referred to from within its scope.
|
|
NoLinkage = 0,
|
|
|
|
/// \brief Internal linkage, which indicates that the entity can
|
|
/// be referred to from within the translation unit (but not other
|
|
/// translation units).
|
|
InternalLinkage,
|
|
|
|
/// \brief External linkage within a unique namespace. From the
|
|
/// langauge perspective, these entities have external
|
|
/// linkage. However, since they reside in an anonymous namespace,
|
|
/// their names are unique to this translation unit, which is
|
|
/// equivalent to having internal linkage from the code-generation
|
|
/// point of view.
|
|
UniqueExternalLinkage,
|
|
|
|
/// \brief External linkage, which indicates that the entity can
|
|
/// be referred to from other translation units.
|
|
ExternalLinkage
|
|
};
|
|
|
|
/// \brief Determine whether the given linkage is semantically
|
|
/// external.
|
|
inline bool isExternalLinkage(Linkage L) {
|
|
return L == UniqueExternalLinkage || L == ExternalLinkage;
|
|
}
|
|
|
|
/// \brief Compute the minimum linkage given two linages.
|
|
static inline Linkage minLinkage(Linkage L1, Linkage L2) {
|
|
return L1 < L2? L1 : L2;
|
|
}
|
|
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_BASIC_LINKAGE_H
|