Serialization and deserialization support for layout requirements.

This commit is contained in:
Roman Levenstein
2017-01-11 23:58:34 -08:00
parent 5accebf556
commit a6ae300574
7 changed files with 93 additions and 13 deletions

View File

@@ -252,6 +252,18 @@ enum GenericRequirementKind : uint8_t {
};
using GenericRequirementKindField = BCFixed<2>;
// These IDs must \em not be renumbered or reordered without incrementing
// VERSION_MAJOR.
enum LayoutRequirementKind : uint8_t {
UnknownLayout = 0,
TrivialOfExactSize = 1,
TrivialOfAtMostSize = 2,
Trivial = 3,
RefCountedObject = 4,
NativeRefCountedObject = 5,
};
using LayoutRequirementKindField = BCFixed<3>;
// These IDs must \em not be renumbered or reordered without incrementing
// VERSION_MAJOR.
enum Associativity : uint8_t {
@@ -1102,6 +1114,14 @@ namespace decls_block {
TypeIDField // same-type; one for value witness marker)
>;
using LayoutRequirementLayout = BCRecordLayout<
LAYOUT_REQUIREMENT,
LayoutRequirementKindField, // requirement kind
TypeIDField, // type being constrained
BCFixed<24>, // size
BCFixed<32> // alignment
>;
/// Specifies the private discriminator string for a private declaration. This
/// identifies the declaration's original source file in some opaque way.
using PrivateDiscriminatorLayout = BCRecordLayout<