summaryrefslogtreecommitdiff
path: root/src/mir/from_hir_match.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mir/from_hir_match.cpp')
-rw-r--r--src/mir/from_hir_match.cpp22
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");