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.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/mir/from_hir_match.cpp b/src/mir/from_hir_match.cpp
index 2cdcc288..756e5ef5 100644
--- a/src/mir/from_hir_match.cpp
+++ b/src/mir/from_hir_match.cpp
@@ -557,7 +557,21 @@ int MIR_LowerHIR_Match_Simple__GeneratePattern(MirBuilder& builder, const Span&
),
(Array,
if( !rule.is_Any() ) {
- TODO(sp, "Match over Array");
+ unsigned int total = 0;
+ for( unsigned int i = 0; i < te.size_val; i ++ ) {
+ unsigned int cnt = MIR_LowerHIR_Match_Simple__GeneratePattern(
+ builder, sp,
+ rules, num_rules, *te.inner,
+ ::MIR::LValue::make_Field({ box$(match_val.clone()), i }),
+ fail_bb
+ );
+ total += cnt;
+ rules += cnt;
+ num_rules -= cnt;
+ if( num_rules == 0 )
+ return total;
+ }
+ return total;
}
return 1;
),