diff options
Diffstat (limited to 'src/mir/from_hir_match.cpp')
| -rw-r--r-- | src/mir/from_hir_match.cpp | 22 | 
1 files changed, 22 insertions, 0 deletions
| diff --git a/src/mir/from_hir_match.cpp b/src/mir/from_hir_match.cpp index 0edc6800..a6446a27 100644 --- a/src/mir/from_hir_match.cpp +++ b/src/mir/from_hir_match.cpp @@ -531,6 +531,9 @@ void PatternRulesetBuilder::append_from_lit(const Span& sp, const ::HIR::Literal      (TraitObject,          TODO(sp, "Match trait object with literal?");          ), +    (ErasedType, +        TODO(sp, "Match erased type with literal?"); +        ),      (Array,          ASSERT_BUG(sp, lit.is_List(), "Matching array with non-list literal - " << lit);          const auto& list = lit.as_List(); @@ -927,6 +930,13 @@ void PatternRulesetBuilder::append_from(const Span& sp, const ::HIR::Pattern& pa              ERROR(sp, E0000, "Attempting to match over a trait object");          }          ), +    (ErasedType, +        if( pat.m_data.is_Any() ) { +        } +        else { +            ERROR(sp, E0000, "Attempting to match over an erased type"); +        } +        ),      (Array,          // Sequential match just like tuples.          m_field_path.push_back(0); @@ -1363,6 +1373,12 @@ int MIR_LowerHIR_Match_Simple__GeneratePattern(MirBuilder& builder, const Span&          }          return 1;          ), +    (ErasedType, +        if( !rule.is_Any() ) { +            BUG(sp, "Attempting to match an erased type"); +        } +        return 1; +        ),      (Array,          if( !rule.is_Any() ) {              unsigned int total = 0; @@ -2747,6 +2763,9 @@ void DecisionTreeGen::get_ty_and_val(          (TraitObject,              BUG(sp, "Destructuring a trait object - " << *cur_ty);              ), +        (ErasedType, +            BUG(sp, "Destructuring an erased type - " << *cur_ty); +            ),          (Array,              assert(idx < e.size_val);              cur_ty = &*e.inner; @@ -2880,6 +2899,9 @@ void DecisionTreeGen::generate_tree_code(      (TraitObject,          ERROR(sp, E0000, "Attempting to match over a trait object");          ), +    (ErasedType, +        ERROR(sp, E0000, "Attempting to match over an erased type"); +        ),      (Array,          // TODO: Slice patterns, sequential comparison/sub-match          TODO(sp, "Match over array"); | 
