@@ -1102,6 +1102,12 @@ let package_type_of_module_type pmty =
1102
1102
| _ ->
1103
1103
err pmty.pmty_loc
1104
1104
" only module type identifier and 'with type' constraints are supported"
1105
+
1106
+ let mklist lst startp endp =
1107
+ let seq, ext_opt = lst in
1108
+ let loc = mklocation startp endp in
1109
+ make_real_exp (mktailexp_extension loc seq ext_opt)
1110
+
1105
1111
% }
1106
1112
1107
1113
@@ -2684,12 +2690,30 @@ jsx_start_tag_and_args_without_leading_less:
2684
2690
(jsx_component lident $ 2 , lident) }
2685
2691
;
2686
2692
2693
+ jsx_expr_list:
2694
+ LBRACKET expr_comma_seq_extension RBRACKET
2695
+ { mklist $ 2 $ startpos($ 2 ) $ endpos($ 2 ) }
2696
+
2697
+ jsx_children_including_list:
2698
+ | simple_expr_no_call { $ 1 }
2699
+ | jsx_expr_list { $ 1 }
2700
+
2687
2701
jsx:
2688
2702
| LESSGREATER simple_expr_no_call* LESSSLASHGREATER
2689
2703
{ let loc = mklocation $ symbolstartpos $ endpos in
2690
2704
let body = mktailexp_extension loc $ 2 None in
2691
2705
makeFrag loc body
2692
2706
}
2707
+ | LESSGREATER jsx_expr_list+ LESSSLASHGREATER
2708
+ { let loc = mklocation $ symbolstartpos $ endpos in
2709
+ let body = mktailexp_extension loc $ 2 None in
2710
+ makeFrag loc body
2711
+ }
2712
+ | LESSGREATER DOTDOTDOT jsx_children_including_list LESSSLASHGREATER
2713
+ { let loc = mklocation $ symbolstartpos $ endpos in
2714
+ let body = $ 3 (* mktailexp_extension loc $3 None*) in
2715
+ makeFrag loc body
2716
+ }
2693
2717
| jsx_start_tag_and_args SLASHGREATER
2694
2718
{ let (component, _) = $ 1 in
2695
2719
let loc = mklocation $ symbolstartpos $ endpos in
@@ -2710,7 +2734,18 @@ jsx:
2710
2734
(Nolabel , mkexp_constructor_unit loc loc)
2711
2735
] loc
2712
2736
}
2713
- | jsx_start_tag_and_args GREATER DOTDOTDOT simple_expr_no_call LESSSLASHIDENTGREATER
2737
+ | jsx_start_tag_and_args GREATER jsx_expr_list+ LESSSLASHIDENTGREATER
2738
+ { let (component, start) = $ 1 in
2739
+ let loc = mklocation $ symbolstartpos $ endpos in
2740
+ (* TODO: Make this tag check simply a warning *)
2741
+ let endName = Longident. parse $ 4 in
2742
+ let _ = ensureTagsAreEqual start endName loc in
2743
+ component [
2744
+ (Labelled " children" , mktailexp_extension loc $ 3 None );
2745
+ (Nolabel , mkexp_constructor_unit loc loc)
2746
+ ] loc
2747
+ }
2748
+ | jsx_start_tag_and_args GREATER DOTDOTDOT jsx_children_including_list LESSSLASHIDENTGREATER
2714
2749
(* <Foo> ...bar </Foo> or <Foo> ...((a) => 1) </Foo> *)
2715
2750
{ let (component, start) = $ 1 in
2716
2751
let loc = mklocation $ symbolstartpos $ endpos in
@@ -2731,6 +2766,16 @@ jsx_without_leading_less:
2731
2766
let body = mktailexp_extension loc $ 2 None in
2732
2767
makeFrag loc body
2733
2768
}
2769
+ | GREATER jsx_expr_list+ LESSSLASHGREATER
2770
+ { let loc = mklocation $ symbolstartpos $ endpos in
2771
+ let body = mktailexp_extension loc $ 2 None in
2772
+ makeFrag loc body
2773
+ }
2774
+ | GREATER DOTDOTDOT jsx_children_including_list LESSSLASHGREATER
2775
+ { let loc = mklocation $ symbolstartpos $ endpos in
2776
+ let body = $ 3 (* mktailexp_extension loc $3 None*) in
2777
+ makeFrag loc body
2778
+ }
2734
2779
| jsx_start_tag_and_args_without_leading_less SLASHGREATER {
2735
2780
let (component, _) = $ 1 in
2736
2781
let loc = mklocation $ symbolstartpos $ endpos in
@@ -2751,7 +2796,18 @@ jsx_without_leading_less:
2751
2796
(Nolabel , mkexp_constructor_unit loc loc)
2752
2797
] loc
2753
2798
}
2754
- | jsx_start_tag_and_args_without_leading_less GREATER DOTDOTDOT simple_expr_no_call LESSSLASHIDENTGREATER {
2799
+ | jsx_start_tag_and_args_without_leading_less GREATER jsx_expr_list+ LESSSLASHIDENTGREATER
2800
+ { let (component, start) = $ 1 in
2801
+ let loc = mklocation $ symbolstartpos $ endpos in
2802
+ (* TODO: Make this tag check simply a warning *)
2803
+ let endName = Longident. parse $ 4 in
2804
+ let _ = ensureTagsAreEqual start endName loc in
2805
+ component [
2806
+ (Labelled " children" , mktailexp_extension loc $ 3 None );
2807
+ (Nolabel , mkexp_constructor_unit loc loc)
2808
+ ] loc
2809
+ }
2810
+ | jsx_start_tag_and_args_without_leading_less GREATER DOTDOTDOT jsx_children_including_list LESSSLASHIDENTGREATER {
2755
2811
let (component, start) = $ 1 in
2756
2812
let loc = mklocation $ symbolstartpos $ endpos in
2757
2813
(* TODO: Make this tag check simply a warning *)
@@ -3106,10 +3162,7 @@ simple_expr_call:
3106
3162
{ let (body, args) = $ 1 in
3107
3163
(body, List. rev_append $ 2 args) }
3108
3164
| LBRACKET expr_comma_seq_extension RBRACKET
3109
- { let seq, ext_opt = $ 2 in
3110
- let loc = mklocation $ startpos($ 2 ) $ endpos($ 2 ) in
3111
- (make_real_exp (mktailexp_extension loc seq ext_opt), [] )
3112
- }
3165
+ { (mklist $ 2 $ startpos($ 2 ) $ endpos($ 2 ), [] ) }
3113
3166
| simple_expr_template_constructor { ($ 1 , [] ) }
3114
3167
;
3115
3168
0 commit comments