mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[Serialization] Support factory initializers.
These never appear in Swift code, but they can appear when serializing the
full output of SILGen ("SIB" format) because that includes code synthesized
for imported Clang declarations.
rdar://problem/22098491
Swift SVN r31364
This commit is contained in:
@@ -167,9 +167,11 @@ using AccessorKindField = BCFixed<3>;
|
||||
// VERSION_MAJOR.
|
||||
enum CtorInitializerKind : uint8_t {
|
||||
Designated = 0,
|
||||
Convenience = 1
|
||||
Convenience = 1,
|
||||
Factory = 2,
|
||||
ConvenienceFactory = 3,
|
||||
};
|
||||
using CtorInitializerKindField = BCFixed<1>;
|
||||
using CtorInitializerKindField = BCFixed<2>;
|
||||
|
||||
// These IDs must \em not be renumbered or reordered without incrementing
|
||||
// VERSION_MAJOR.
|
||||
|
||||
@@ -955,11 +955,14 @@ bool ModuleFile::readMembers(SmallVectorImpl<Decl *> &Members) {
|
||||
static Optional<swift::CtorInitializerKind>
|
||||
getActualCtorInitializerKind(uint8_t raw) {
|
||||
switch (serialization::CtorInitializerKind(raw)) {
|
||||
case serialization::Designated:
|
||||
return swift::CtorInitializerKind::Designated;
|
||||
|
||||
case serialization::Convenience:
|
||||
return swift::CtorInitializerKind::Convenience;
|
||||
#define CASE(NAME) \
|
||||
case serialization::CtorInitializerKind::NAME: \
|
||||
return swift::CtorInitializerKind::NAME;
|
||||
CASE(Designated)
|
||||
CASE(Convenience)
|
||||
CASE(Factory)
|
||||
CASE(ConvenienceFactory)
|
||||
#undef CASE
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
@@ -1257,16 +1257,12 @@ static serialization::AccessorKind getStableAccessorKind(swift::AccessorKind K){
|
||||
static serialization::CtorInitializerKind
|
||||
getStableCtorInitializerKind(swift::CtorInitializerKind K){
|
||||
switch (K) {
|
||||
case swift::CtorInitializerKind::ConvenienceFactory:
|
||||
llvm_unreachable("Convenience factory initializers cannot be uttered");
|
||||
|
||||
case swift::CtorInitializerKind::Factory:
|
||||
llvm_unreachable("Factory initializers cannot be uttered");
|
||||
|
||||
#define CASE(NAME) \
|
||||
case swift::CtorInitializerKind::NAME: return serialization::NAME;
|
||||
CASE(Designated)
|
||||
CASE(Convenience)
|
||||
CASE(Factory)
|
||||
CASE(ConvenienceFactory)
|
||||
#undef CASE
|
||||
}
|
||||
}
|
||||
|
||||
12
test/SIL/Serialization/clang_sib.swift
Normal file
12
test/SIL/Serialization/clang_sib.swift
Normal file
@@ -0,0 +1,12 @@
|
||||
// RUN: rm -rf %t && mkdir %t
|
||||
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-sib -o %t -primary-file %s -module-name main
|
||||
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir -o /dev/null -primary-file %t/clang_sib.sib -module-name main
|
||||
|
||||
// REQUIRES: objc_interop
|
||||
|
||||
import Foundation
|
||||
|
||||
func test() {
|
||||
// Use a factory initializer.
|
||||
_ = Hive(queen: Bee())
|
||||
}
|
||||
Reference in New Issue
Block a user