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.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp
index 649d97fd..3d84c9d6 100644
--- a/src/hir/deserialise.cpp
+++ b/src/hir/deserialise.cpp
@@ -31,6 +31,7 @@ namespace {
{}
::std::string read_string() { return m_in.read_string(); }
+ size_t deserialise_count() { return m_in.read_count(); }
template<typename V>
::std::map< ::std::string,V> deserialise_strmap()
@@ -359,6 +360,9 @@ namespace {
_(DstMeta, {
deserialise_mir_lvalue()
})
+ _(DstPtr, {
+ deserialise_mir_lvalue()
+ })
_(MakeDst, {
deserialise_mir_lvalue(),
deserialise_mir_lvalue()
@@ -535,9 +539,12 @@ namespace {
::HIR::TraitValueItem deserialise_traitvalueitem()
{
- switch( m_in.read_tag() )
+ auto tag = m_in.read_tag();
+ auto idx = m_in.read_count();
+ ::HIR::TraitValueItem rv;
+ switch( tag )
{
- #define _(x, ...) case ::HIR::TraitValueItem::TAG_##x: DEBUG("- " #x); return ::HIR::TraitValueItem::make_##x( __VA_ARGS__ );
+ #define _(x, ...) case ::HIR::TraitValueItem::TAG_##x: DEBUG("- " #x); rv = ::HIR::TraitValueItem::make_##x( __VA_ARGS__ ); break;
_(Constant, deserialise_constant() )
_(Static, deserialise_static() )
_(Function, deserialise_function() )
@@ -546,6 +553,8 @@ namespace {
DEBUG("Invalid TraitValueItem tag");
throw "";
}
+ rv.vtable_ofs = idx;
+ return rv;
}
::HIR::AssociatedType deserialise_associatedtype()
{
@@ -602,6 +611,7 @@ namespace {
template<> DEF_D( ::HIR::TypeImpl, return d.deserialise_typeimpl(); )
template<> DEF_D( ::MacroRulesPtr, return d.deserialise_macrorulesptr(); )
+ template<> DEF_D( unsigned int, return static_cast<unsigned int>(d.deserialise_count()); )
::HIR::TypeRef HirDeserialiser::deserialise_type()
{
@@ -722,7 +732,6 @@ namespace {
box$( deserialise_type() ),
deserialise_genericpath(),
m_in.read_string(),
- deserialise_pathparams(),
deserialise_pathparams()
} );
default:
@@ -857,6 +866,7 @@ namespace {
rv.m_is_marker = m_in.read_bool();
rv.m_types = deserialise_strumap< ::HIR::AssociatedType>();
rv.m_values = deserialise_strumap< ::HIR::TraitValueItem>();
+ rv.m_type_indexes = deserialise_strumap< unsigned int>();
return rv;
}