diff options
author | John Hodge <tpg@mutabah.net> | 2016-12-07 07:15:35 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-12-07 07:15:35 +0800 |
commit | 4fcbd6a038e4ea0c4aaf6602dd0ea0c2f24d3ec0 (patch) | |
tree | e25237ab40e3366201698c9dd66edb5ee0f961f6 /src/hir/deserialise.cpp | |
parent | b43ff7f871f4c9630dc3fdd715ab793d47169299 (diff) | |
download | mrust-4fcbd6a038e4ea0c4aaf6602dd0ea0c2f24d3ec0.tar.gz |
HIR VTables - Handle traits with duplicate method names form different sub-traits
Diffstat (limited to 'src/hir/deserialise.cpp')
-rw-r--r-- | src/hir/deserialise.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp index 45876d88..348b016c 100644 --- a/src/hir/deserialise.cpp +++ b/src/hir/deserialise.cpp @@ -60,6 +60,20 @@ namespace { } return rv; } + template<typename V> + ::std::unordered_multimap< ::std::string,V> deserialise_strummap() + { + size_t n = m_in.read_count(); + ::std::unordered_multimap< ::std::string, V> rv; + //rv.reserve(n); + for(size_t i = 0; i < n; i ++) + { + auto s = m_in.read_string(); + DEBUG("- " << s); + rv.insert( ::std::make_pair( mv$(s), D<V>::des(*this) ) ); + } + return rv; + } template<typename T> ::std::vector<T> deserialise_vec() @@ -871,7 +885,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_value_indexes = deserialise_strumap< unsigned int>(); + rv.m_value_indexes = deserialise_strummap< ::std::pair<unsigned int, ::HIR::GenericPath> >(); rv.m_type_indexes = deserialise_strumap< unsigned int>(); return rv; } |