Skip to content

Commit eea5af6

Browse files
committed
fixup cherry-pick of ModuleFormat
1 parent 172d9b2 commit eea5af6

File tree

1 file changed

+64
-114
lines changed

1 file changed

+64
-114
lines changed

lib/Serialization/ModuleFormat.h

Lines changed: 64 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -965,48 +965,6 @@ namespace decls_block {
965965
#include "DeclTypeRecordNodes.def"
966966
};
967967

968-
namespace detail {
969-
enum TypeRecords : uint16_t {
970-
#define TYPE(Id) Id##_TYPE = decls_block::RecordKind::Id##_TYPE,
971-
#include "DeclTypeRecordNodes.def"
972-
};
973-
974-
template <TypeRecords Record>
975-
class TypeRecordDispatch {};
976-
977-
template <TypeRecords RecordCode, typename ...Ts>
978-
struct code { public: constexpr static TypeRecords value = RecordCode; };
979-
980-
struct function_deserializer {
981-
static llvm::Expected<Type>
982-
deserialize(ModuleFile &MF, SmallVectorImpl<uint64_t> &scratch,
983-
StringRef blobData, bool isGeneric);
984-
};
985-
986-
#define TYPE_LAYOUT_IMPL(LAYOUT, ...) \
987-
using LAYOUT = BCRecordLayout<__VA_ARGS__>; \
988-
template <> \
989-
class detail::TypeRecordDispatch< \
990-
detail::code<detail::TypeRecords::__VA_ARGS__>::value> { \
991-
friend class swift::ModuleFile; \
992-
static llvm::Expected<Type> \
993-
deserialize(ModuleFile &MF, \
994-
llvm::SmallVectorImpl<uint64_t> &scratch, \
995-
StringRef blobData); \
996-
}
997-
} // namespace detail
998-
999-
/// This \c TYPE_LAYOUT(...) macro replaces the usual \c BCRecordLayout coding
1000-
/// structures below by enforcing structural checks for the definition of
1001-
/// deserialization members. If you forget to define a \c TYPE_LAYOUT(...) for a
1002-
/// \c TYPE(...) there will be a gnarly SFINAE error pointing at it in
1003-
/// DeclTypeRecordNodes.def.
1004-
///
1005-
/// This macro pairs with \c DESERIALIZE_TYPE(...) in Deserialization.cpp such
1006-
/// that if you forget \c DESERIALIZE_TYPE(...) you will come up
1007-
/// with a linker error.
1008-
#define TYPE_LAYOUT(LAYOUT, ...) TYPE_LAYOUT_IMPL(LAYOUT, __VA_ARGS__)
1009-
1010968
using ClangTypeLayout = BCRecordLayout<
1011969
CLANG_TYPE,
1012970
BCArray<BCVBR<6>>
@@ -1018,61 +976,60 @@ namespace decls_block {
1018976
>;
1019977

1020978
/// A placeholder for invalid types
1021-
TYPE_LAYOUT(ErrorTypeLayout,
979+
using ErrorTypeLayout = BCRecordLayout<
1022980
ERROR_TYPE,
1023981
TypeIDField // original type (if any)
1024-
);
982+
>;
1025983

1026-
TYPE_LAYOUT(BuiltinAliasTypeLayout,
984+
using BuiltinAliasTypeLayout = BCRecordLayout<
1027985
BUILTIN_ALIAS_TYPE,
1028986
DeclIDField, // typealias decl
1029987
TypeIDField // canonical type (a fallback)
1030-
);
988+
>;
1031989

1032-
TYPE_LAYOUT(TypeAliasTypeLayout,
990+
using TypeAliasTypeLayout = BCRecordLayout<
1033991
NAME_ALIAS_TYPE,
1034992
DeclIDField, // typealias decl
1035993
TypeIDField, // parent type
1036994
TypeIDField, // underlying type
1037995
TypeIDField, // substituted type
1038996
SubstitutionMapIDField // substitution map
1039-
);
997+
>;
1040998

1041-
TYPE_LAYOUT(GenericTypeParamTypeLayout,
1042-
GENERIC_TYPE_PARAM_TYPE,
999+
using GenericTypeParamTypeLayout = BCRecordLayout<GENERIC_TYPE_PARAM_TYPE,
10431000
BCFixed<1>, // type sequence?
10441001
DeclIDField, // generic type parameter decl or depth
10451002
BCVBR<4> // index + 1, or zero if we have a generic type
10461003
// parameter decl
1047-
);
1004+
>;
10481005

1049-
TYPE_LAYOUT(DependentMemberTypeLayout,
1006+
using DependentMemberTypeLayout = BCRecordLayout<
10501007
DEPENDENT_MEMBER_TYPE,
10511008
TypeIDField, // base type
10521009
DeclIDField // associated type decl
1053-
);
1054-
TYPE_LAYOUT(NominalTypeLayout,
1010+
>;
1011+
using NominalTypeLayout = BCRecordLayout<
10551012
NOMINAL_TYPE,
10561013
DeclIDField, // decl
10571014
TypeIDField // parent
1058-
);
1015+
>;
10591016

1060-
TYPE_LAYOUT(ParenTypeLayout,
1017+
using ParenTypeLayout = BCRecordLayout<
10611018
PAREN_TYPE,
10621019
TypeIDField // inner type
1063-
);
1020+
>;
10641021

1065-
TYPE_LAYOUT(TupleTypeLayout,
1022+
using TupleTypeLayout = BCRecordLayout<
10661023
TUPLE_TYPE
1067-
);
1024+
>;
10681025

10691026
using TupleTypeEltLayout = BCRecordLayout<
10701027
TUPLE_TYPE_ELT,
10711028
IdentifierIDField, // name
10721029
TypeIDField // type
10731030
>;
10741031

1075-
TYPE_LAYOUT(FunctionTypeLayout,
1032+
using FunctionTypeLayout = BCRecordLayout<
10761033
FUNCTION_TYPE,
10771034
TypeIDField, // output
10781035
FunctionTypeRepresentationField, // representation
@@ -1084,7 +1041,7 @@ namespace decls_block {
10841041
DifferentiabilityKindField, // differentiability kind
10851042
TypeIDField // global actor
10861043
// trailed by parameters
1087-
);
1044+
>;
10881045

10891046
using FunctionParamLayout = BCRecordLayout<
10901047
FUNCTION_PARAM,
@@ -1100,69 +1057,69 @@ namespace decls_block {
11001057
BCFixed<1> // compileTimeConst
11011058
>;
11021059

1103-
TYPE_LAYOUT(MetatypeTypeLayout,
1060+
using MetatypeTypeLayout = BCRecordLayout<
11041061
METATYPE_TYPE,
11051062
TypeIDField, // instance type
11061063
MetatypeRepresentationField // representation
1107-
);
1064+
>;
11081065

1109-
TYPE_LAYOUT(ExistentialMetatypeTypeLayout,
1066+
using ExistentialMetatypeTypeLayout = BCRecordLayout<
11101067
EXISTENTIAL_METATYPE_TYPE,
11111068
TypeIDField, // instance type
11121069
MetatypeRepresentationField // representation
1113-
);
1070+
>;
11141071

1115-
TYPE_LAYOUT(PrimaryArchetypeTypeLayout,
1072+
using PrimaryArchetypeTypeLayout = BCRecordLayout<
11161073
PRIMARY_ARCHETYPE_TYPE,
11171074
GenericSignatureIDField, // generic environment
11181075
TypeIDField // interface type
1119-
);
1076+
>;
11201077

1121-
TYPE_LAYOUT(OpenedArchetypeTypeLayout,
1078+
using OpenedArchetypeTypeLayout = BCRecordLayout<
11221079
OPENED_ARCHETYPE_TYPE,
11231080
TypeIDField, // the existential type
11241081
TypeIDField, // the interface type
11251082
GenericSignatureIDField // generic signature
1126-
);
1083+
>;
11271084

1128-
TYPE_LAYOUT(OpaqueArchetypeTypeLayout,
1085+
using OpaqueArchetypeTypeLayout = BCRecordLayout<
11291086
OPAQUE_ARCHETYPE_TYPE,
11301087
DeclIDField, // the opaque type decl
11311088
TypeIDField, // the interface type
11321089
SubstitutionMapIDField // the arguments
1133-
);
1090+
>;
11341091

1135-
TYPE_LAYOUT(SequenceArchetypeTypeLayout,
1092+
using SequenceArchetypeTypeLayout = BCRecordLayout<
11361093
SEQUENCE_ARCHETYPE_TYPE,
11371094
GenericSignatureIDField, // generic environment
11381095
TypeIDField // interface type
1139-
);
1096+
>;
11401097

1141-
TYPE_LAYOUT(DynamicSelfTypeLayout,
1098+
using DynamicSelfTypeLayout = BCRecordLayout<
11421099
DYNAMIC_SELF_TYPE,
11431100
TypeIDField // self type
1144-
);
1101+
>;
11451102

1146-
TYPE_LAYOUT(ProtocolCompositionTypeLayout,
1103+
using ProtocolCompositionTypeLayout = BCRecordLayout<
11471104
PROTOCOL_COMPOSITION_TYPE,
11481105
BCFixed<1>, // has AnyObject constraint
11491106
BCArray<TypeIDField> // protocols
1150-
);
1107+
>;
11511108

1152-
TYPE_LAYOUT(ParameterizedProtocolTypeLayout,
1109+
using ParameterizedProtocolTypeLayout = BCRecordLayout<
11531110
PARAMETERIZED_PROTOCOL_TYPE,
11541111
TypeIDField, // base
11551112
BCArray<TypeIDField> // arguments
1156-
);
1113+
>;
11571114

1158-
TYPE_LAYOUT(BoundGenericTypeLayout,
1115+
using BoundGenericTypeLayout = BCRecordLayout<
11591116
BOUND_GENERIC_TYPE,
11601117
DeclIDField, // generic decl
11611118
TypeIDField, // parent
11621119
BCArray<TypeIDField> // generic arguments
1163-
);
1120+
>;
11641121

1165-
TYPE_LAYOUT(GenericFunctionTypeLayout,
1122+
using GenericFunctionTypeLayout = BCRecordLayout<
11661123
GENERIC_FUNCTION_TYPE,
11671124
TypeIDField, // output
11681125
FunctionTypeRepresentationField, // representation
@@ -1171,12 +1128,12 @@ namespace decls_block {
11711128
BCFixed<1>, // throws?
11721129
DifferentiabilityKindField, // differentiability kind
11731130
TypeIDField, // global actor
1174-
GenericSignatureIDField // generic signature
1131+
GenericSignatureIDField // generic signture
11751132

11761133
// trailed by parameters
1177-
);
1134+
>;
11781135

1179-
TYPE_LAYOUT(SILFunctionTypeLayout,
1136+
using SILFunctionTypeLayout = BCRecordLayout<
11801137
SIL_FUNCTION_TYPE,
11811138
BCFixed<1>, // concurrent?
11821139
BCFixed<1>, // async?
@@ -1199,57 +1156,55 @@ namespace decls_block {
11991156
// followed by error result type/convention
12001157
// Optionally a protocol conformance (for witness_methods)
12011158
// Optionally a substitution map (for substituted function types)
1202-
);
1159+
>;
12031160

1204-
TYPE_LAYOUT(SILBlockStorageTypeLayout,
1161+
using SILBlockStorageTypeLayout = BCRecordLayout<
12051162
SIL_BLOCK_STORAGE_TYPE,
12061163
TypeIDField // capture type
1207-
);
1208-
1209-
TYPE_LAYOUT(SILMoveOnlyTypeLayout,
1210-
SIL_MOVE_ONLY_TYPE,
1211-
TypeIDField // inner type
1212-
);
1164+
>;
12131165

12141166
using SILLayoutLayout = BCRecordLayout<
12151167
SIL_LAYOUT,
12161168
GenericSignatureIDField, // generic signature
1217-
BCFixed<1>, // captures generic env
12181169
BCVBR<8>, // number of fields
12191170
BCArray<TypeIDWithBitField> // field types with mutability
12201171
>;
12211172

1222-
TYPE_LAYOUT(SILBoxTypeLayout,
1173+
using SILBoxTypeLayout = BCRecordLayout<
12231174
SIL_BOX_TYPE,
12241175
SILLayoutIDField, // layout
12251176
SubstitutionMapIDField // substitutions
1226-
);
1177+
>;
12271178

1228-
#define SYNTAX_SUGAR_TYPE_LAYOUT(LAYOUT, CODE) \
1229-
TYPE_LAYOUT(LAYOUT, CODE, TypeIDField)
1179+
template <unsigned Code>
1180+
using SyntaxSugarTypeLayout = BCRecordLayout<
1181+
Code,
1182+
TypeIDField // element type
1183+
>;
12301184

1231-
SYNTAX_SUGAR_TYPE_LAYOUT(ArraySliceTypeLayout, ARRAY_SLICE_TYPE);
1232-
SYNTAX_SUGAR_TYPE_LAYOUT(OptionalTypeLayout, OPTIONAL_TYPE);
1233-
SYNTAX_SUGAR_TYPE_LAYOUT(VariadicSequenceTypeLayout, VARIADIC_SEQUENCE_TYPE);
1234-
SYNTAX_SUGAR_TYPE_LAYOUT(ExistentialTypeLayout, EXISTENTIAL_TYPE);
1185+
using ArraySliceTypeLayout = SyntaxSugarTypeLayout<ARRAY_SLICE_TYPE>;
1186+
using OptionalTypeLayout = SyntaxSugarTypeLayout<OPTIONAL_TYPE>;
1187+
using VariadicSequenceTypeLayout = SyntaxSugarTypeLayout<VARIADIC_SEQUENCE_TYPE>;
1188+
using ExistentialTypeLayout =
1189+
SyntaxSugarTypeLayout<EXISTENTIAL_TYPE>;
12351190

1236-
TYPE_LAYOUT(DictionaryTypeLayout,
1191+
using DictionaryTypeLayout = BCRecordLayout<
12371192
DICTIONARY_TYPE,
12381193
TypeIDField, // key type
12391194
TypeIDField // value type
1240-
);
1195+
>;
12411196

1242-
TYPE_LAYOUT(ReferenceStorageTypeLayout,
1197+
using ReferenceStorageTypeLayout = BCRecordLayout<
12431198
REFERENCE_STORAGE_TYPE,
12441199
ReferenceOwnershipField, // ownership
12451200
TypeIDField // implementation type
1246-
);
1201+
>;
12471202

1248-
TYPE_LAYOUT(UnboundGenericTypeLayout,
1203+
using UnboundGenericTypeLayout = BCRecordLayout<
12491204
UNBOUND_GENERIC_TYPE,
12501205
DeclIDField, // generic decl
12511206
TypeIDField // parent
1252-
);
1207+
>;
12531208

12541209
using TypeAliasLayout = BCRecordLayout<
12551210
TYPE_ALIAS_DECL,
@@ -1655,8 +1610,7 @@ namespace decls_block {
16551610

16561611
using AnyPatternLayout = BCRecordLayout<
16571612
ANY_PATTERN,
1658-
TypeIDField, // type
1659-
BCFixed<1> // isAsyncLet
1613+
TypeIDField // type
16601614
// FIXME: is the type necessary?
16611615
>;
16621616

@@ -2086,10 +2040,6 @@ namespace decls_block {
20862040
BC_AVAIL_TUPLE, // OS version
20872041
BCVBR<5> // platform
20882042
>;
2089-
2090-
#undef SYNTAX_SUGAR_TYPE_LAYOUT
2091-
#undef TYPE_LAYOUT
2092-
#undef TYPE_LAYOUT_IMPL
20932043
}
20942044

20952045
/// Returns the encoding kind for the given decl.

0 commit comments

Comments
 (0)