diff options
author | John Hodge <tpg@mutabah.net> | 2016-09-01 12:05:18 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-09-01 12:05:18 +0800 |
commit | 0e84f7ae6f77001ddbb211f89e1f438b7fe96d6c (patch) | |
tree | 2e6364a03bf47ca41fb2b1ee153705535d9db7a2 /src/hir/from_ast.cpp | |
parent | def3719f94f1bed17b6018975b9919c46ca43f16 (diff) | |
download | mrust-0e84f7ae6f77001ddbb211f89e1f438b7fe96d6c.tar.gz |
Resolve - HIR pointers for enum variants
Diffstat (limited to 'src/hir/from_ast.cpp')
-rw-r--r-- | src/hir/from_ast.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp index 930c549f..dfe6b8ab 100644 --- a/src/hir/from_ast.cpp +++ b/src/hir/from_ast.cpp @@ -200,9 +200,16 @@ BUG(pat.span(), "Encountered StructTuple pattern not pointing to a enum variant or a struct - " << e.path); ), (EnumVar, - assert( pb.enum_ ); - const auto& var = pb.enum_->variants()[pb.idx].m_data; - unsigned int field_count = var.as_Tuple().m_sub_types.size(); + assert( pb.enum_ || pb.hir ); + unsigned int field_count; + if( pb.enum_ ) { + const auto& var = pb.enum_->variants()[pb.idx].m_data; + field_count = var.as_Tuple().m_sub_types.size(); + } + else { + const auto& var = pb.hir->m_variants.at(pb.idx).second; + field_count = var.as_Tuple().size(); + } ::std::vector<HIR::Pattern> sub_patterns; if( e.tup_pat.has_wildcard ) { @@ -240,8 +247,14 @@ }; ), (Struct, - assert( pb.struct_ ); - unsigned int field_count = pb.struct_->m_data.as_Tuple().ents.size(); + assert( pb.struct_ || pb.hir ); + unsigned int field_count; + if( pb.struct_ ) { + field_count = pb.struct_->m_data.as_Tuple().ents.size(); + } + else { + field_count = pb.hir->m_data.as_Tuple().size(); + } ::std::vector<HIR::Pattern> sub_patterns; if( e.tup_pat.has_wildcard ) { |