summaryrefslogtreecommitdiff
path: root/src/hir/serialise.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-11-25 14:49:55 +0800
committerJohn Hodge <tpg@mutabah.net>2016-11-25 14:49:55 +0800
commit6ceb82723d6594d96a1308aa16f9ec863246935d (patch)
tree5eb6541a066d8022b00e85958203294022c99814 /src/hir/serialise.cpp
parent7b0dfc5a859d8fb2cc940764d0c8106c87b5f05b (diff)
downloadmrust-6ceb82723d6594d96a1308aa16f9ec863246935d.tar.gz
HIR - Shift markings to their own pass, store in crate metadata.
Diffstat (limited to 'src/hir/serialise.cpp')
-rw-r--r--src/hir/serialise.cpp31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/hir/serialise.cpp b/src/hir/serialise.cpp
index dd68a792..bf28a53f 100644
--- a/src/hir/serialise.cpp
+++ b/src/hir/serialise.cpp
@@ -727,11 +727,14 @@ namespace {
serialise_generics(ta.m_params);
serialise_type(ta.m_type);
}
- void serialise(const ::HIR::Enum& ta)
+ void serialise(const ::HIR::Enum& item)
{
- serialise_generics(ta.m_params);
- m_out.write_tag( static_cast<int>(ta.m_repr) );
- serialise_vec( ta.m_variants );
+ serialise_generics(item.m_params);
+ m_out.write_tag( static_cast<int>(item.m_repr) );
+
+ serialise_vec( item.m_variants );
+
+ serialise(item.m_markings);
}
void serialise(const ::HIR::Enum::Variant& v)
{
@@ -751,6 +754,21 @@ namespace {
)
)
}
+
+ void serialise(const ::HIR::TraitMarkings& m)
+ {
+ uint8_t bitflag_1 = 0;
+ #define BIT(i,fld) if(fld) bitflag_1 |= 1 << (i);
+ BIT(0, m.can_coerce)
+ BIT(1, m.can_unsize)
+ BIT(2, m.has_a_deref)
+ BIT(3, m.is_always_unsized)
+ BIT(4, m.is_always_sized)
+ BIT(5, m.is_copy)
+ #undef BIT
+ m_out.write_u8(bitflag_1);
+ // TODO: auto_impls
+ }
void serialise(const ::HIR::Struct& item)
{
@@ -770,6 +788,8 @@ namespace {
serialise_vec(e);
)
)
+
+ serialise(item.m_markings);
}
void serialise(const ::HIR::Union& item)
{
@@ -777,7 +797,10 @@ namespace {
serialise_generics(item.m_params);
m_out.write_tag( static_cast<int>(item.m_repr) );
+
serialise_vec(item.m_variants);
+
+ serialise(item.m_markings);
}
void serialise(const ::HIR::Trait& item)
{