@@ -418,12 +418,6 @@ let meet_global mode =
418
418
let meet_unique mode =
419
419
Value. meet [mode; (Value. max_with_uniqueness Uniqueness. unique)]
420
420
421
- let meet_many mode =
422
- Value. meet [mode; (Value. max_with_linearity Linearity. many)]
423
-
424
- let join_shared mode =
425
- Value. join [mode; Value. min_with_uniqueness Uniqueness. shared]
426
-
427
421
let value_regional_to_local mode =
428
422
mode
429
423
|> value_to_alloc_r2l
@@ -434,29 +428,6 @@ let value_regional_to_global mode =
434
428
|> value_to_alloc_r2g
435
429
|> alloc_as_value
436
430
437
- (* Describes how a modality affects field projection. Returns the mode
438
- of the projection given the mode of the record. *)
439
- let modality_unbox_left global_flag mode =
440
- let mode = Value. disallow_right mode in
441
- match global_flag with
442
- | Global_flag. Global ->
443
- mode
444
- |> Value. meet_with_regionality Regionality.Const. Global
445
- |> join_shared
446
- |> Value. meet_with_linearity Linearity.Const. Many
447
- | Global_flag. Unrestricted -> mode
448
-
449
- (* Describes how a modality affects record construction. Gives the
450
- expected mode of the field given the expected mode of the record. *)
451
- let modality_box_right global_flag mode =
452
- match global_flag with
453
- | Global_flag. Global ->
454
- mode
455
- |> meet_global
456
- |> Value. join_with_uniqueness Uniqueness.Const. max
457
- |> meet_many
458
- | Global_flag. Unrestricted -> mode
459
-
460
431
let mode_default mode =
461
432
{ position = RNontail ;
462
433
closure_context = None ;
@@ -495,8 +466,8 @@ let mode_subcomponent expected_mode =
495
466
let mode = alloc_as_value (value_to_alloc_r2g expected_mode.mode) in
496
467
mode_default mode
497
468
498
- let mode_box_modality gf expected_mode =
499
- mode_default (modality_box_right gf expected_mode.mode)
469
+ let mode_box_modalities gf expected_mode =
470
+ mode_default (Modality.Vector. apply_right gf expected_mode.mode)
500
471
501
472
let mode_global expected_mode =
502
473
let mode = meet_global expected_mode.mode in
@@ -2672,7 +2643,7 @@ and type_pat_aux
2672
2643
let args =
2673
2644
List. map2
2674
2645
(fun p (ty , gf ) ->
2675
- let alloc_mode = modality_unbox_left gf alloc_mode.mode in
2646
+ let alloc_mode = Modality.Vector. apply_left gf alloc_mode.mode in
2676
2647
let alloc_mode = simple_pat_mode alloc_mode in
2677
2648
type_pat ~alloc_mode tps Value p ty)
2678
2649
sargs (List. combine ty_args_ty ty_args_gf)
@@ -2716,7 +2687,7 @@ and type_pat_aux
2716
2687
let ty_arg =
2717
2688
solve_Ppat_record_field ~refine loc env label label_lid record_ty in
2718
2689
let alloc_mode =
2719
- modality_unbox_left label.lbl_global alloc_mode.mode
2690
+ Modality.Vector. apply_left label.lbl_modalities alloc_mode.mode
2720
2691
in
2721
2692
let alloc_mode = simple_pat_mode alloc_mode in
2722
2693
(label_lid, label, type_pat tps Value ~alloc_mode sarg ty_arg)
@@ -5623,14 +5594,14 @@ and type_expect_
5623
5594
unify_exp_types loc env ty_arg1 ty_arg2;
5624
5595
with_explanation (fun () ->
5625
5596
unify_exp_types loc env (instance ty_expected) ty_res2);
5626
- let mode = modality_unbox_left lbl.lbl_global mode in
5597
+ let mode = Modality.Vector. apply_left lbl.lbl_modalities mode in
5627
5598
let rmode =
5628
5599
(* We skip a potential [mode_subcomponent] since
5629
5600
it does not affect uniqueness. *)
5630
5601
expected_mode
5631
5602
in
5632
5603
let expected_mode =
5633
- mode_box_modality lbl.lbl_global rmode
5604
+ mode_box_modalities lbl.lbl_modalities rmode
5634
5605
in
5635
5606
Kept (ty_arg1, lbl.lbl_mut,
5636
5607
unique_use ~loc ~env mode expected_mode.mode)
@@ -5671,7 +5642,7 @@ and type_expect_
5671
5642
| Record_float -> Some (register_allocation expected_mode)
5672
5643
| _ -> None
5673
5644
in
5674
- let mode = modality_unbox_left label.lbl_global rmode in
5645
+ let mode = Modality.Vector. apply_left label.lbl_modalities rmode in
5675
5646
let ty_arg =
5676
5647
with_local_level_if_principal begin fun () ->
5677
5648
(* ty_arg is the type of field *)
@@ -5693,7 +5664,7 @@ and type_expect_
5693
5664
exp_attributes = sexp.pexp_attributes;
5694
5665
exp_env = env }
5695
5666
| Pexp_setfield (srecord , lid , snewval ) ->
5696
- let (record, rmode, label, expected_type) =
5667
+ let (record, ( rmode : Value.lr ) , label, expected_type) =
5697
5668
type_label_access env srecord Env. Mutation lid in
5698
5669
let ty_record =
5699
5670
if expected_type = None
@@ -7158,7 +7129,7 @@ and type_label_exp create env (expected_mode : expected_mode) loc ty_expected
7158
7129
expected_mode
7159
7130
| _ -> mode_subcomponent expected_mode
7160
7131
in
7161
- let arg_mode = mode_box_modality label.lbl_global rmode in
7132
+ let arg_mode = mode_box_modalities label.lbl_modalities rmode in
7162
7133
(* #4682: we try two type-checking approaches for [arg] using backtracking:
7163
7134
- first try: we try with [ty_arg] as expected type;
7164
7135
- second try; if that fails, we backtrack and try without
@@ -7741,7 +7712,7 @@ and type_construct env (expected_mode : expected_mode) loc lid sarg
7741
7712
let args =
7742
7713
List. map2
7743
7714
(fun e ((ty , gf ),t0 ) ->
7744
- let argument_mode = mode_box_modality gf argument_mode in
7715
+ let argument_mode = mode_box_modalities gf argument_mode in
7745
7716
type_argument ~recarg env argument_mode e ty t0)
7746
7717
sargs (List. combine ty_args ty_args0)
7747
7718
in
0 commit comments