@@ -124,7 +124,7 @@ let filter_matrix matcher pss =
124
124
let rec filter_rec = function
125
125
| (p ::ps )::rem ->
126
126
begin match p.pat_desc with
127
- | Tpat_alias (p ,_ ) ->
127
+ | Tpat_alias (p ,_ , _ ) ->
128
128
filter_rec ((p::ps)::rem)
129
129
| Tpat_var _ ->
130
130
filter_rec ((omega::ps)::rem)
@@ -162,9 +162,9 @@ let make_default matcher env =
162
162
let ctx_matcher p =
163
163
let p = normalize_pat p in
164
164
match p.pat_desc with
165
- | Tpat_construct (cstr ,omegas ) ->
165
+ | Tpat_construct (_ , _ , cstr ,omegas , _ ) ->
166
166
(fun q rem -> match q.pat_desc with
167
- | Tpat_construct (cstr' ,args ) when cstr.cstr_tag= cstr'.cstr_tag ->
167
+ | Tpat_construct (_ , _ , cstr' ,args , _ ) when cstr.cstr_tag= cstr'.cstr_tag ->
168
168
p,args @ rem
169
169
| Tpat_any -> p,omegas @ rem
170
170
| _ -> raise NoMatch )
@@ -197,12 +197,12 @@ let ctx_matcher p =
197
197
(fun q rem -> match q.pat_desc with
198
198
| Tpat_tuple args -> p,args @ rem
199
199
| _ -> p, omegas @ rem)
200
- | Tpat_record l -> (* Records are normalized *)
200
+ | Tpat_record ( l , _ ) -> (* Records are normalized *)
201
201
(fun q rem -> match q.pat_desc with
202
- | Tpat_record l' ->
202
+ | Tpat_record ( l' , _ ) ->
203
203
let l' = all_record_args l' in
204
- p, List. fold_right (fun (_ ,p ) r -> p::r) l' rem
205
- | _ -> p,List. fold_right (fun (_ ,p ) r -> p::r) l rem)
204
+ p, List. fold_right (fun (_ , _ , _ , p ) r -> p::r) l' rem
205
+ | _ -> p,List. fold_right (fun (_ , _ , _ , p ) r -> p::r) l rem)
206
206
| Tpat_lazy omega ->
207
207
(fun q rem -> match q.pat_desc with
208
208
| Tpat_lazy arg -> p, (arg::rem)
@@ -221,7 +221,7 @@ let filter_ctx q ctx =
221
221
begin match p.pat_desc with
222
222
| Tpat_or (p1 ,p2 ,_ ) ->
223
223
filter_rec ({l with right= p1 ::ps}::{l with right= p2 ::ps}::rem)
224
- | Tpat_alias (p ,_ ) ->
224
+ | Tpat_alias (p ,_ , _ ) ->
225
225
filter_rec ({l with right= p ::ps}::rem)
226
226
| Tpat_var _ ->
227
227
filter_rec ({l with right= omega ::ps}::rem)
@@ -507,11 +507,11 @@ exception Var of pattern
507
507
let simplify_or p =
508
508
let rec simpl_rec p = match p with
509
509
| {pat_desc = Tpat_any |Tpat_var _ } -> raise (Var p)
510
- | {pat_desc = Tpat_alias (q ,id )} ->
510
+ | {pat_desc = Tpat_alias (q ,id , s )} ->
511
511
begin try
512
- {p with pat_desc = Tpat_alias (simpl_rec q,id)}
512
+ {p with pat_desc = Tpat_alias (simpl_rec q,id,s )}
513
513
with
514
- | Var q -> raise (Var {p with pat_desc = Tpat_alias (q,id)})
514
+ | Var q -> raise (Var {p with pat_desc = Tpat_alias (q,id,s )})
515
515
end
516
516
| {pat_desc = Tpat_or (p1 ,p2 ,o )} ->
517
517
let q1 = simpl_rec p1 in
@@ -521,9 +521,9 @@ let simplify_or p =
521
521
with
522
522
| Var q2 -> raise (Var {p with pat_desc = Tpat_or (q1, q2, o)})
523
523
end
524
- | {pat_desc = Tpat_record lbls } ->
524
+ | {pat_desc = Tpat_record ( lbls , closed ) } ->
525
525
let all_lbls = all_record_args lbls in
526
- {p with pat_desc= Tpat_record all_lbls}
526
+ {p with pat_desc= Tpat_record ( all_lbls, closed) }
527
527
| _ -> p in
528
528
try
529
529
simpl_rec p
@@ -537,19 +537,19 @@ let simplify_cases args cls = match args with
537
537
| [] -> []
538
538
| ((pat :: patl , action ) as cl ) :: rem ->
539
539
begin match pat.pat_desc with
540
- | Tpat_var id ->
540
+ | Tpat_var ( id , _ ) ->
541
541
(omega :: patl, bind Alias id arg action) ::
542
542
simplify rem
543
543
| Tpat_any ->
544
544
cl :: simplify rem
545
- | Tpat_alias (p , id ) ->
545
+ | Tpat_alias (p , id , _ ) ->
546
546
simplify ((p :: patl, bind Alias id arg action) :: rem)
547
- | Tpat_record [] ->
547
+ | Tpat_record ( [] , _ ) ->
548
548
(omega :: patl, action)::
549
549
simplify rem
550
- | Tpat_record lbls ->
550
+ | Tpat_record ( lbls , closed ) ->
551
551
let all_lbls = all_record_args lbls in
552
- let full_pat = {pat with pat_desc= Tpat_record all_lbls} in
552
+ let full_pat = {pat with pat_desc= Tpat_record ( all_lbls, closed) } in
553
553
(full_pat::patl,action)::
554
554
simplify rem
555
555
| Tpat_or _ ->
@@ -574,7 +574,7 @@ let simplify_cases args cls = match args with
574
574
575
575
let rec what_is_cases cases = match cases with
576
576
| ({pat_desc =Tpat_any } :: _ , _ ) :: rem -> what_is_cases rem
577
- | (({pat_desc= (Tpat_var _| Tpat_or (_,_,_)| Tpat_alias (_,_))}::_),_)::_
577
+ | (({pat_desc= (Tpat_var _| Tpat_or (_,_,_)| Tpat_alias (_,_,_ ))}::_),_)::_
578
578
-> assert false (* applies to simplified matchings only *)
579
579
| (p ::_ ,_ )::_ -> p
580
580
| [] -> omega
@@ -606,16 +606,16 @@ let default_compat p def =
606
606
607
607
(* Or-pattern expansion, variables are a complication w.r.t. the article *)
608
608
let rec extract_vars r p = match p.pat_desc with
609
- | Tpat_var id -> IdentSet. add id r
610
- | Tpat_alias (p , id ) ->
609
+ | Tpat_var ( id , _ ) -> IdentSet. add id r
610
+ | Tpat_alias (p , id , _ ) ->
611
611
extract_vars (IdentSet. add id r) p
612
612
| Tpat_tuple pats ->
613
613
List. fold_left extract_vars r pats
614
- | Tpat_record lpats ->
614
+ | Tpat_record ( lpats , _ ) ->
615
615
List. fold_left
616
- (fun r (_ ,p ) -> extract_vars r p)
616
+ (fun r (_ , _ , _ , p ) -> extract_vars r p)
617
617
r lpats
618
- | Tpat_construct (_ ,pats ) ->
618
+ | Tpat_construct (_ , _ , _ , pats , _ ) ->
619
619
List. fold_left extract_vars r pats
620
620
| Tpat_array pats ->
621
621
List. fold_left extract_vars r pats
@@ -643,9 +643,9 @@ let rec explode_or_pat arg patl mk_action rem vars aliases = function
643
643
arg patl mk_action
644
644
(explode_or_pat arg patl mk_action rem vars aliases p2)
645
645
vars aliases p1
646
- | {pat_desc = Tpat_alias (p ,id )} ->
646
+ | {pat_desc = Tpat_alias (p ,id , _ )} ->
647
647
explode_or_pat arg patl mk_action rem vars (id::aliases) p
648
- | {pat_desc = Tpat_var x } ->
648
+ | {pat_desc = Tpat_var ( x , _ ) } ->
649
649
let env = mk_alpha_env arg (x::aliases) vars in
650
650
(omega::patl,mk_action (List. map snd env))::rem
651
651
| p ->
@@ -665,7 +665,7 @@ let group_constant = function
665
665
| _ -> false
666
666
667
667
and group_constructor = function
668
- | {pat_desc = Tpat_construct (_ , _ )} -> true
668
+ | {pat_desc = Tpat_construct (_ , _ , _ , _ , _ )} -> true
669
669
| _ -> false
670
670
671
671
and group_variant = function
@@ -695,7 +695,7 @@ and group_lazy = function
695
695
let get_group p = match p.pat_desc with
696
696
| Tpat_any -> group_var
697
697
| Tpat_constant _ -> group_constant
698
- | Tpat_construct (_ , _ ) -> group_constructor
698
+ | Tpat_construct (_ , _ , _ , _ , _ ) -> group_constructor
699
699
| Tpat_tuple _ -> group_tuple
700
700
| Tpat_record _ -> group_record
701
701
| Tpat_array _ -> group_array
@@ -1129,15 +1129,15 @@ let make_field_args binding_kind arg first_pos last_pos argl =
1129
1129
in make_args first_pos
1130
1130
1131
1131
let get_key_constr = function
1132
- | {pat_desc =Tpat_construct (cstr ,_ )} -> cstr.cstr_tag
1132
+ | {pat_desc =Tpat_construct (_ , _ , cstr , _ ,_ )} -> cstr.cstr_tag
1133
1133
| _ -> assert false
1134
1134
1135
1135
let get_args_constr p rem = match p with
1136
- | {pat_desc =Tpat_construct (_ ,args )} -> args @ rem
1136
+ | {pat_desc =Tpat_construct (_ , _ , _ , args , _ )} -> args @ rem
1137
1137
| _ -> assert false
1138
1138
1139
1139
let pat_as_constr = function
1140
- | {pat_desc =Tpat_construct (cstr ,_ )} -> cstr
1140
+ | {pat_desc =Tpat_construct (_ , _ , cstr , _ ,_ )} -> cstr
1141
1141
| _ -> fatal_error " Matching.pat_as_constr"
1142
1142
1143
1143
@@ -1151,7 +1151,7 @@ let matcher_constr cstr = match cstr.cstr_arity with
1151
1151
with
1152
1152
| NoMatch -> matcher_rec p2 rem
1153
1153
end
1154
- | Tpat_construct (cstr1 , [] ) when cstr.cstr_tag = cstr1.cstr_tag ->
1154
+ | Tpat_construct (_ , _ , cstr1 , [] , _ ) when cstr.cstr_tag = cstr1.cstr_tag ->
1155
1155
rem
1156
1156
| Tpat_any -> rem
1157
1157
| _ -> raise NoMatch in
@@ -1172,15 +1172,15 @@ pat_desc = Tpat_or (a1, a2, None)}::
1172
1172
rem
1173
1173
| _ , _ -> assert false
1174
1174
end
1175
- | Tpat_construct (cstr1 , [arg ]) when cstr.cstr_tag = cstr1.cstr_tag ->
1175
+ | Tpat_construct (_ , _ , cstr1 , [arg ], _ ) when cstr.cstr_tag = cstr1.cstr_tag ->
1176
1176
arg::rem
1177
1177
| Tpat_any -> omega::rem
1178
1178
| _ -> raise NoMatch in
1179
1179
matcher_rec
1180
1180
| _ ->
1181
1181
fun q rem -> match q.pat_desc with
1182
1182
| Tpat_or (_ ,_ ,_ ) -> raise OrPat
1183
- | Tpat_construct (cstr1, args)
1183
+ | Tpat_construct (_, _, cstr1, args,_ )
1184
1184
when cstr.cstr_tag = cstr1.cstr_tag -> args @ rem
1185
1185
| Tpat_any -> Parmatch. omegas cstr.cstr_arity @ rem
1186
1186
| _ -> raise NoMatch
@@ -1446,13 +1446,13 @@ let divide_tuple arity p ctx pm =
1446
1446
1447
1447
let record_matching_line num_fields lbl_pat_list =
1448
1448
let patv = Array. create num_fields omega in
1449
- List. iter (fun (lbl , pat ) -> patv.(lbl.lbl_pos) < - pat) lbl_pat_list;
1449
+ List. iter (fun (_ , _ , lbl , pat ) -> patv.(lbl.lbl_pos) < - pat) lbl_pat_list;
1450
1450
Array. to_list patv
1451
1451
1452
1452
let get_args_record num_fields p rem = match p with
1453
1453
| {pat_desc =Tpat_any } ->
1454
1454
record_matching_line num_fields [] @ rem
1455
- | {pat_desc =Tpat_record lbl_pat_list } ->
1455
+ | {pat_desc =Tpat_record ( lbl_pat_list , _ ) } ->
1456
1456
record_matching_line num_fields lbl_pat_list @ rem
1457
1457
| _ -> assert false
1458
1458
@@ -1846,7 +1846,7 @@ let rec extract_pat seen k p = match p.pat_desc with
1846
1846
| Tpat_or (p1 ,p2 ,_ ) ->
1847
1847
let k1,seen1 = extract_pat seen k p1 in
1848
1848
extract_pat seen1 k1 p2
1849
- | Tpat_alias (p ,_ ) ->
1849
+ | Tpat_alias (p ,_ , _ ) ->
1850
1850
extract_pat seen k p
1851
1851
| Tpat_var _ |Tpat_any ->
1852
1852
raise All
@@ -2367,8 +2367,8 @@ let rec comp_match_handlers comp_fun partial ctx arg first_match next_matchs = m
2367
2367
let rec name_pattern default = function
2368
2368
(pat :: patl , action ) :: rem ->
2369
2369
begin match pat.pat_desc with
2370
- Tpat_var id -> id
2371
- | Tpat_alias (p , id ) -> id
2370
+ Tpat_var ( id , _ ) -> id
2371
+ | Tpat_alias (p , id , _ ) -> id
2372
2372
| _ -> name_pattern default rem
2373
2373
end
2374
2374
| _ -> Ident. create default
@@ -2438,7 +2438,7 @@ and do_compile_matching repr partial ctx arg pmh = match pmh with
2438
2438
compile_no_test
2439
2439
(divide_tuple (List. length patl) (normalize_pat pat)) ctx_combine
2440
2440
repr partial ctx pm
2441
- | Tpat_record ((lbl ,_ )::_ ) ->
2441
+ | Tpat_record ((_ , _ , lbl ,_ )::_ , _ ) ->
2442
2442
compile_no_test
2443
2443
(divide_record lbl.lbl_all (normalize_pat pat))
2444
2444
ctx_combine repr partial ctx pm
@@ -2448,7 +2448,7 @@ and do_compile_matching repr partial ctx arg pmh = match pmh with
2448
2448
divide_constant
2449
2449
(combine_constant arg cst partial)
2450
2450
ctx pm
2451
- | Tpat_construct (cstr , _ ) ->
2451
+ | Tpat_construct (_ , _ , cstr , _ , _ ) ->
2452
2452
compile_test
2453
2453
(compile_match repr partial) partial
2454
2454
divide_constructor (combine_constructor arg pat cstr partial)
@@ -2591,7 +2591,7 @@ let rec flatten_pat_line size p k = match p.pat_desc with
2591
2591
| Tpat_any -> omegas size::k
2592
2592
| Tpat_tuple args -> args::k
2593
2593
| Tpat_or (p1 ,p2 ,_ ) -> flatten_pat_line size p1 (flatten_pat_line size p2 k)
2594
- | Tpat_alias (p ,_ ) -> (* Note: if this 'as' pat is here, then this is a useless
2594
+ | Tpat_alias (p ,_ , _ ) -> (* Note: if this 'as' pat is here, then this is a useless
2595
2595
binding, solves PR #3780 *)
2596
2596
flatten_pat_line size p k
2597
2597
| _ -> fatal_error " Matching.flatten_pat_line"
0 commit comments