[AST] Introduce BuiltinProtocolConformance

This commit is contained in:
Azoy
2020-05-23 11:07:38 -04:00
parent 64ec60bbd4
commit f21a306ae5
16 changed files with 294 additions and 27 deletions

View File

@@ -2,7 +2,7 @@
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
// Copyright (c) 2014 - 2020 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
@@ -845,6 +845,8 @@ void Serializer::writeBlockInfoBlock() {
decls_block::SPECIALIZED_PROTOCOL_CONFORMANCE);
BLOCK_RECORD_WITH_NAMESPACE(sil_block,
decls_block::INHERITED_PROTOCOL_CONFORMANCE);
BLOCK_RECORD_WITH_NAMESPACE(sil_block,
decls_block::BUILTIN_PROTOCOL_CONFORMANCE);
BLOCK_RECORD_WITH_NAMESPACE(sil_block,
decls_block::NORMAL_PROTOCOL_CONFORMANCE_ID);
BLOCK_RECORD_WITH_NAMESPACE(sil_block,
@@ -1506,6 +1508,17 @@ Serializer::writeConformance(ProtocolConformanceRef conformanceRef,
writeConformance(conf->getInheritedConformance(), abbrCodes, genericEnv);
break;
}
case ProtocolConformanceKind::Builtin:
auto builtin = cast<BuiltinProtocolConformance>(conformance);
unsigned abbrCode = abbrCodes[BuiltinProtocolConformanceLayout::Code];
auto typeID = addTypeRef(builtin->getType());
auto protocolID = addDeclRef(builtin->getProtocol());
BuiltinProtocolConformanceLayout::emitRecord(Out, ScratchRecord, abbrCode,
typeID, protocolID,
builtin->getConformances().size());
writeConformances(builtin->getConformances(), abbrCodes);
break;
}
}
@@ -4588,6 +4601,7 @@ void Serializer::writeAllDeclsAndTypes() {
registerDeclTypeAbbr<SpecializedProtocolConformanceLayout>();
registerDeclTypeAbbr<InheritedProtocolConformanceLayout>();
registerDeclTypeAbbr<InvalidProtocolConformanceLayout>();
registerDeclTypeAbbr<BuiltinProtocolConformanceLayout>();
registerDeclTypeAbbr<NormalProtocolConformanceIdLayout>();
registerDeclTypeAbbr<ProtocolConformanceXrefLayout>();