summaryrefslogtreecommitdiff
path: root/src/hir/deserialise.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-12-07 07:15:35 +0800
committerJohn Hodge <tpg@mutabah.net>2016-12-07 07:15:35 +0800
commit4fcbd6a038e4ea0c4aaf6602dd0ea0c2f24d3ec0 (patch)
treee25237ab40e3366201698c9dd66edb5ee0f961f6 /src/hir/deserialise.cpp
parentb43ff7f871f4c9630dc3fdd715ab793d47169299 (diff)
downloadmrust-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.cpp16
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;
}