summaryrefslogtreecommitdiff
path: root/src/hir/from_ast.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-09-01 12:05:18 +0800
committerJohn Hodge <tpg@mutabah.net>2016-09-01 12:05:18 +0800
commit0e84f7ae6f77001ddbb211f89e1f438b7fe96d6c (patch)
tree2e6364a03bf47ca41fb2b1ee153705535d9db7a2 /src/hir/from_ast.cpp
parentdef3719f94f1bed17b6018975b9919c46ca43f16 (diff)
downloadmrust-0e84f7ae6f77001ddbb211f89e1f438b7fe96d6c.tar.gz
Resolve - HIR pointers for enum variants
Diffstat (limited to 'src/hir/from_ast.cpp')
-rw-r--r--src/hir/from_ast.cpp23
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 ) {