Files
swift-mirror/stdlib/public/runtime/ErrorDefaultImpls.cpp
Joe Groff 681a96b45c Runtime: Tolerate unknown metadata kinds.
We want to be able to potentially introduce new metadata kinds in future Swift compilers, so a runtime ought to be able to degrade gracefully in the face of metadata kinds it doesn't know about. Remove attempts to exhaustively switch over metadata kinds and instead treat unknown metadata kinds as opaque.
2018-05-17 15:35:06 -07:00

44 lines
1.4 KiB
C++

//===--- ErrorDefaultImpls.cpp - Error default implementations ------------===//
//
// 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 implements helpers for the default implementations of Error protocol
// members.
//
//===----------------------------------------------------------------------===//
#include "swift/Runtime/Config.h"
#include "swift/Runtime/Metadata.h"
using namespace swift;
// @_silgen_name("_swift_stdlib_getDefaultErrorCode")
// func _getDefaultErrorCode<T : Error>(_ x: T) -> Int
SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_SPI
intptr_t _swift_stdlib_getDefaultErrorCode(OpaqueValue *error,
const Metadata *T,
const WitnessTable *Error) {
intptr_t result;
switch (T->getKind()) {
case MetadataKind::Enum:
result = T->vw_getEnumTag(error);
break;
default:
result = 1;
break;
}
// Destroy the value.
SWIFT_CC_PLUSONE_GUARD(T->vw_destroy(error));
return result;
}