summaryrefslogtreecommitdiff
path: root/src/hir/deserialise.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/deserialise.cpp')
-rw-r--r--src/hir/deserialise.cpp48
1 files changed, 29 insertions, 19 deletions
diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp
index 21fc9cea..2301898d 100644
--- a/src/hir/deserialise.cpp
+++ b/src/hir/deserialise.cpp
@@ -591,19 +591,31 @@ namespace {
::HIR::TraitMarkings m;
uint8_t bitflag_1 = m_in.read_u8();
#define BIT(i,fld) fld = (bitflag_1 & (1 << (i))) != 0;
+ BIT(0, m.has_a_deref)
+ BIT(1, m.is_copy)
+ BIT(2, m.has_drop_impl)
+ #undef BIT
+ // TODO: auto_impls
+ return m;
+ }
+ ::HIR::StructMarkings deserialise_str_markings()
+ {
+ ::HIR::StructMarkings m;
+ uint8_t bitflag_1 = m_in.read_u8();
+ #define BIT(i,fld) fld = (bitflag_1 & (1 << (i))) != 0;
BIT(0, m.can_unsize)
- BIT(1, m.has_a_deref)
- BIT(2, m.is_copy)
- BIT(3, m.has_drop_impl)
#undef BIT
- m.dst_type = static_cast< ::HIR::TraitMarkings::DstType>( m_in.read_tag() );
+ m.dst_type = static_cast< ::HIR::StructMarkings::DstType>( m_in.read_tag() );
+ m.coerce_unsized = static_cast<::HIR::StructMarkings::Coerce>( m_in.read_tag() );
m.coerce_unsized_index = m_in.read_count( );
+ m.coerce_param = m_in.read_count( );
m.unsized_field = m_in.read_count( );
m.unsized_param = m_in.read_count();
// TODO: auto_impls
return m;
}
+
::HIR::Enum deserialise_enum();
::HIR::Enum::Variant deserialise_enumvariant();
@@ -906,32 +918,30 @@ namespace {
auto repr = static_cast< ::HIR::Struct::Repr>( m_in.read_tag() );
DEBUG("params = " << params.fmt_args() << params.fmt_bounds());
+ ::HIR::Struct::Data data;
switch( m_in.read_tag() )
{
case ::HIR::Struct::Data::TAG_Unit:
DEBUG("Unit");
- return ::HIR::Struct {
- mv$(params), repr,
- ::HIR::Struct::Data::make_Unit( {} ),
- deserialise_markings()
- };
+ data = ::HIR::Struct::Data::make_Unit( {} );
+ break;
case ::HIR::Struct::Data::TAG_Tuple:
DEBUG("Tuple");
- return ::HIR::Struct {
- mv$(params), repr,
- ::HIR::Struct::Data( deserialise_vec< ::HIR::VisEnt< ::HIR::TypeRef> >() ),
- deserialise_markings()
- };
+ data = ::HIR::Struct::Data( deserialise_vec< ::HIR::VisEnt< ::HIR::TypeRef> >() );
+ break;
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> > >() ),
- deserialise_markings()
- };
+ data = ::HIR::Struct::Data( deserialise_vec< ::std::pair< ::std::string, ::HIR::VisEnt< ::HIR::TypeRef> > >() );
+ break;
default:
throw "";
}
+ auto markings = deserialise_markings();
+ auto str_markings = deserialise_str_markings();
+
+ return ::HIR::Struct {
+ mv$(params), repr, mv$(data), mv$(markings), mv$(str_markings)
+ };
}
::HIR::Trait HirDeserialiser::deserialise_trait()
{