diff options
author | John Hodge <tpg@mutabah.net> | 2016-11-25 14:49:55 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-11-25 14:49:55 +0800 |
commit | 6ceb82723d6594d96a1308aa16f9ec863246935d (patch) | |
tree | 5eb6541a066d8022b00e85958203294022c99814 /src/hir/deserialise.cpp | |
parent | 7b0dfc5a859d8fb2cc940764d0c8106c87b5f05b (diff) | |
download | mrust-6ceb82723d6594d96a1308aa16f9ec863246935d.tar.gz |
HIR - Shift markings to their own pass, store in crate metadata.
Diffstat (limited to 'src/hir/deserialise.cpp')
-rw-r--r-- | src/hir/deserialise.cpp | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp index fffff7fa..1880b660 100644 --- a/src/hir/deserialise.cpp +++ b/src/hir/deserialise.cpp @@ -510,6 +510,22 @@ namespace { deserialise_type() }; } + ::HIR::TraitMarkings deserialise_markings() + { + ::HIR::TraitMarkings m; + uint8_t bitflag_1 = m_in.read_u8(); + #define BIT(i,fld) fld = (bitflag_1 & (1 << (i))) != 0; + 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 + // TODO: auto_impls + return m; + } + ::HIR::Enum deserialise_enum(); ::HIR::Enum::Variant deserialise_enumvariant(); @@ -751,14 +767,15 @@ namespace { throw ""; } } - + ::HIR::Enum HirDeserialiser::deserialise_enum() { TRACE_FUNCTION; return ::HIR::Enum { deserialise_genericparams(), static_cast< ::HIR::Enum::Repr>(m_in.read_tag()), - deserialise_vec< ::std::pair< ::std::string, ::HIR::Enum::Variant> >() + deserialise_vec< ::std::pair< ::std::string, ::HIR::Enum::Variant> >(), + deserialise_markings() }; } ::HIR::Enum::Variant HirDeserialiser::deserialise_enumvariant() @@ -785,10 +802,11 @@ namespace { TRACE_FUNCTION; auto params = deserialise_genericparams(); auto repr = static_cast< ::HIR::Union::Repr>( m_in.read_tag() ); + auto variants = deserialise_vec< ::std::pair< ::std::string, ::HIR::VisEnt< ::HIR::TypeRef> > >(); + auto markings = deserialise_markings(); return ::HIR::Union { - mv$(params), repr, - deserialise_vec< ::std::pair< ::std::string, ::HIR::VisEnt< ::HIR::TypeRef> > >() + mv$(params), repr, mv$(variants), mv$(markings) }; } ::HIR::Struct HirDeserialiser::deserialise_struct() @@ -804,19 +822,22 @@ namespace { DEBUG("Unit"); return ::HIR::Struct { mv$(params), repr, - ::HIR::Struct::Data::make_Unit( {} ) + ::HIR::Struct::Data::make_Unit( {} ), + deserialise_markings() }; case ::HIR::Struct::Data::TAG_Tuple: DEBUG("Tuple"); return ::HIR::Struct { mv$(params), repr, - ::HIR::Struct::Data( deserialise_vec< ::HIR::VisEnt< ::HIR::TypeRef> >() ) + ::HIR::Struct::Data( deserialise_vec< ::HIR::VisEnt< ::HIR::TypeRef> >() ), + deserialise_markings() }; case ::HIR::Struct::Data::TAG_Named: DEBUG("Named"); return ::HIR::Struct { mv$(params), repr, - ::HIR::Struct::Data( deserialise_vec< ::std::pair< ::std::string, ::HIR::VisEnt< ::HIR::TypeRef> > >() ) + ::HIR::Struct::Data( deserialise_vec< ::std::pair< ::std::string, ::HIR::VisEnt< ::HIR::TypeRef> > >() ), + deserialise_markings() }; default: throw ""; |