@@ -472,63 +472,66 @@ and sugar_expr ctxt f e =
472
472
| Pexp_apply ({ pexp_desc = Pexp_ident {txt = id; _};
473
473
pexp_attributes= [] ; _}, args)
474
474
when List. for_all (fun (lab , _ ) -> lab = Nolabel ) args -> begin
475
- let print a assign left right print_index indexes rem_args =
476
- match assign, rem_args with
477
- | true , [] ->
478
- pp f " @[%a.%s%a%s@]"
479
- (simple_expr ctxt) a
480
- left (list ~sep: " ," print_index) indexes right; true
481
- | false , [v] ->
482
- pp f " @[%a.%s%a%s@ <-@;<1 2>%a@]"
483
- (simple_expr ctxt) a
484
- left (list ~sep: " ," print_index) indexes right
475
+ let print_indexop a path_prefix assign left right print_index indices
476
+ rem_args =
477
+ let print_path ppf = function
478
+ | None -> ()
479
+ | Some m -> pp ppf " .%a" longident m in
480
+ match assign, rem_args with
481
+ | false , [] ->
482
+ pp f " @[%a%a%s%a%s@]"
483
+ (simple_expr ctxt) a print_path path_prefix
484
+ left (list ~sep: " ," print_index) indices right; true
485
+ | true , [v] ->
486
+ pp f " @[%a%a%s%a%s@ <-@;<1 2>%a@]"
487
+ (simple_expr ctxt) a print_path path_prefix
488
+ left (list ~sep: " ," print_index) indices right
485
489
(simple_expr ctxt) v; true
486
490
| _ -> false in
487
491
match id, List. map snd args with
488
492
| Lident "!" , [e] ->
489
493
pp f " @[<hov>!%a@]" (simple_expr ctxt) e; true
490
494
| Ldot (path , ("get" |"set" as func )), a :: other_args -> begin
491
- let assign = func = " get " in
492
- let print = print a assign in
495
+ let assign = func = " set " in
496
+ let print = print_indexop a None assign in
493
497
match path, other_args with
494
498
| Lident "Array" , i :: rest ->
495
- print " (" " )" (expression ctxt) [i] rest
499
+ print " . (" " )" (expression ctxt) [i] rest
496
500
| Lident "String" , i :: rest ->
497
- print " [" " ]" (expression ctxt) [i] rest
501
+ print " . [" " ]" (expression ctxt) [i] rest
498
502
| Ldot (Lident "Bigarray" , "Array1" ), i1 :: rest ->
499
- print " {" " }" (simple_expr ctxt) [i1] rest
503
+ print " . {" " }" (simple_expr ctxt) [i1] rest
500
504
| Ldot (Lident "Bigarray" , "Array2" ), i1 :: i2 :: rest ->
501
- print " {" " }" (simple_expr ctxt) [i1; i2] rest
505
+ print " . {" " }" (simple_expr ctxt) [i1; i2] rest
502
506
| Ldot (Lident "Bigarray" , "Array3" ), i1 :: i2 :: i3 :: rest ->
503
- print " {" " }" (simple_expr ctxt) [i1; i2; i3] rest
507
+ print " . {" " }" (simple_expr ctxt) [i1; i2; i3] rest
504
508
| Ldot (Lident " Bigarray" , " Genarray" ),
505
509
{pexp_desc = Pexp_array indexes; pexp_attributes = [] } :: rest ->
506
- print " {" " }" (simple_expr ctxt) indexes rest
510
+ print " . {" " }" (simple_expr ctxt) indexes rest
507
511
| _ -> false
508
512
end
509
- | Lident s , a :: other_args when s.[0 ] = '.' ->
510
- begin match other_args with
511
- | i :: rest ->
512
- let n = String. length s in
513
- (* extract operator:
514
- assignment operators end with [right_bracket ^ "<-"],
515
- access operators end with [right_bracket] directly
516
- *)
517
- let assign =
518
- s.[n - 1 ] = '-' in
519
- let kind =
520
- (* extract the right end bracket *)
521
- if assign then s.[n - 3 ] else s.[n - 1 ] in
522
- let left, right = match kind with
523
- | ')' -> '(' , " )"
524
- | ']' -> '[' , " ]"
525
- | '}' -> '{' , " }"
526
- | _ -> assert false in
527
- let prefix = String. sub s 0 (1 + String. index s left) in
528
- print a assign prefix right
529
- (simple_expr ctxt) [i] rest
530
- | _ -> false
531
- end
513
+ | (Lident s | Ldot (_,s)) , a :: i :: rest
514
+ when s.[0 ] = '.' ->
515
+ let n = String. length s in
516
+ (* extract operator:
517
+ assignment operators end with [right_bracket ^ "<-"],
518
+ access operators end with [right_bracket] directly
519
+ *)
520
+ let assign = s.[n - 1 ] = '-' in
521
+ let kind =
522
+ (* extract the right end bracket *)
523
+ if assign then s.[n - 3 ] else s.[n - 1 ] in
524
+ let left, right = match kind with
525
+ | ')' -> '(' , " )"
526
+ | ']' -> '[' , " ]"
527
+ | '}' -> '{' , " }"
528
+ | _ -> assert false in
529
+ let path_prefix = match id with
530
+ | Ldot (m ,_ ) -> Some m
531
+ | _ -> None in
532
+ let left = String. sub s 0 (1 + String. index s left) in
533
+ print_indexop a path_prefix assign left right
534
+ (expression ctxt) [i] rest
532
535
| _ -> false
533
536
end
534
537
| _ -> false
0 commit comments