diff options
author | John Hodge <tpg@mutabah.net> | 2017-01-01 10:22:02 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2017-01-01 10:22:02 +0800 |
commit | 70e550dc591db6437acfbae69f28f4eb0796ddf3 (patch) | |
tree | 15b87c1923366b57641ab9f031130636a62c65bb /src/trans/enumerate.cpp | |
parent | 22e7a0315896090245a04381157f8310dcfc29a4 (diff) | |
download | mrust-70e550dc591db6437acfbae69f28f4eb0796ddf3.tar.gz |
Trans Enumerate - Unions
Diffstat (limited to 'src/trans/enumerate.cpp')
-rw-r--r-- | src/trans/enumerate.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/trans/enumerate.cpp b/src/trans/enumerate.cpp index f8494f3f..7948adfd 100644 --- a/src/trans/enumerate.cpp +++ b/src/trans/enumerate.cpp @@ -195,7 +195,22 @@ namespace { ) } void visit_union(const ::HIR::GenericPath& path, const ::HIR::Union& item) { - // TODO: . + static Span sp; + ::HIR::TypeRef tmp; + auto monomorph = [&](const auto& x)->const auto& { + if( monomorphise_type_needed(x) ) { + tmp = monomorphise_type(sp, item.m_params, path.m_params, x); + m_resolve.expand_associated_types(sp, tmp); + return tmp; + } + else { + return x; + } + }; + for(const auto& variant : item.m_variants) + { + visit_type( monomorph(variant.second.ent) ); + } } void visit_enum(const ::HIR::GenericPath& path, const ::HIR::Enum& item) { static Span sp; |