Files
swift-mirror/lib/AST/Bridging/AvailabilityBridging.cpp

131 lines
4.8 KiB
C++

//===--- Bridging/AvailabilityBridging.cpp --------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2025 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
//
//===----------------------------------------------------------------------===//
#include "swift/AST/ASTBridging.h"
#include "swift/AST/AvailabilitySpec.h"
#include "swift/AST/PlatformKind.h"
using namespace swift;
//===----------------------------------------------------------------------===//
// MARK: BridgedAvailabilityMacroMap
//===----------------------------------------------------------------------===//
bool BridgedAvailabilityMacroMap_hasName(BridgedAvailabilityMacroMap map,
BridgedStringRef name) {
return map.unbridged()->hasMacroName(name.unbridged());
}
bool BridgedAvailabilityMacroMap_hasNameAndVersion(
BridgedAvailabilityMacroMap map, BridgedStringRef name,
BridgedVersionTuple version) {
return map.unbridged()->hasMacroNameVersion(name.unbridged(),
version.unbridged());
}
BridgedArrayRef
BridgedAvailabilityMacroMap_getSpecs(BridgedAvailabilityMacroMap map,
BridgedStringRef name,
BridgedVersionTuple version) {
return map.unbridged()->getEntry(name.unbridged(), version.unbridged());
}
//===----------------------------------------------------------------------===//
// MARK: PlatformKind
//===----------------------------------------------------------------------===//
BridgedPlatformKind BridgedPlatformKind_fromString(BridgedStringRef cStr) {
auto optKind = platformFromString(cStr.unbridged());
if (!optKind)
return BridgedPlatformKind_None;
switch (*optKind) {
case PlatformKind::none:
return BridgedPlatformKind_None;
#define AVAILABILITY_PLATFORM(X, PrettyName) \
case PlatformKind::X: \
return BridgedPlatformKind_##X;
#include "swift/AST/PlatformKinds.def"
}
}
BridgedPlatformKind
BridgedPlatformKind_fromIdentifier(BridgedIdentifier cIdent) {
return BridgedPlatformKind_fromString(cIdent.unbridged().str());
}
PlatformKind unbridge(BridgedPlatformKind platform) {
switch (platform) {
case BridgedPlatformKind_None:
return PlatformKind::none;
#define AVAILABILITY_PLATFORM(X, PrettyName) \
case BridgedPlatformKind_##X: \
return PlatformKind::X;
#include "swift/AST/PlatformKinds.def"
}
llvm_unreachable("unhandled enum value");
}
//===----------------------------------------------------------------------===//
// MARK: AvailabilitySpec
//===----------------------------------------------------------------------===//
BridgedAvailabilitySpec
BridgedAvailabilitySpec_createWildcard(BridgedASTContext cContext,
BridgedSourceLoc cLoc) {
return AvailabilitySpec::createWildcard(cContext.unbridged(),
cLoc.unbridged());
}
BridgedAvailabilitySpec BridgedAvailabilitySpec_createForDomainIdentifier(
BridgedASTContext cContext, BridgedIdentifier cName, BridgedSourceLoc cLoc,
BridgedVersionTuple cVersion, BridgedSourceRange cVersionRange) {
return AvailabilitySpec::createForDomainIdentifier(
cContext.unbridged(), cName.unbridged(), cLoc.unbridged(),
cVersion.unbridged(), cVersionRange.unbridged());
}
BridgedAvailabilitySpec
BridgedAvailabilitySpec_clone(BridgedAvailabilitySpec spec,
BridgedASTContext cContext) {
return spec.unbridged()->clone(cContext.unbridged());
}
void BridgedAvailabilitySpec_setMacroLoc(BridgedAvailabilitySpec spec,
BridgedSourceLoc cLoc) {
spec.unbridged()->setMacroLoc(cLoc.unbridged());
}
BridgedAvailabilityDomainOrIdentifier
BridgedAvailabilitySpec_getDomainOrIdentifier(BridgedAvailabilitySpec spec) {
return spec.unbridged()->getDomainOrIdentifier();
}
BridgedSourceRange
BridgedAvailabilitySpec_getSourceRange(BridgedAvailabilitySpec spec) {
return spec.unbridged()->getSourceRange();
}
bool BridgedAvailabilitySpec_isWildcard(BridgedAvailabilitySpec spec) {
return spec.unbridged()->isWildcard();
}
BridgedVersionTuple
BridgedAvailabilitySpec_getRawVersion(BridgedAvailabilitySpec spec) {
return spec.unbridged()->getRawVersion();
}
BridgedSourceRange
BridgedAvailabilitySpec_getVersionRange(BridgedAvailabilitySpec spec) {
return spec.unbridged()->getVersionSrcRange();
}