@@ -4339,6 +4339,25 @@ and parse_dict_expr ~start_pos p =
43394339 chunk_loc))
43404340 [(Asttypes. Nolabel , Ast_helper.Exp. array ~loc: chunk_loc key_value_pairs)]
43414341 in
4342+ let make_dict_spread target_expr source_parts =
4343+ let spread_ident =
4344+ Ast_helper.Exp. ident ~loc ~attrs: [dict_spread_attr]
4345+ (Location. mkloc
4346+ (Longident. Ldot (Longident. Lident Primitive_modules. dict, " spread" ))
4347+ loc)
4348+ in
4349+ Ast_helper.Exp. apply ~loc spread_ident
4350+ [
4351+ (Asttypes. Nolabel , target_expr);
4352+ ( Asttypes. Nolabel ,
4353+ Ast_helper.Exp. array ~loc
4354+ (List. map
4355+ (function
4356+ | `Rows rows -> make_dict_chunk rows
4357+ | `Spread spread_expr -> spread_expr)
4358+ source_parts) );
4359+ ]
4360+ in
43424361 let grouped_parts =
43434362 let rec loop current_rows acc = function
43444363 | [] ->
@@ -4364,47 +4383,8 @@ and parse_dict_expr ~start_pos p =
43644383 | [] -> make_dict_chunk ~loc_override: loc []
43654384 | [`Rows rows] -> make_dict_chunk ~loc_override: loc rows
43664385 | `Rows target_rows :: source_parts ->
4367- let spread_ident =
4368- Ast_helper.Exp. ident ~loc ~attrs: [dict_spread_attr]
4369- (Location. mkloc
4370- (Longident. Ldot (Longident. Lident Primitive_modules. dict, " spread" ))
4371- loc)
4372- in
4373- let spread =
4374- Ast_helper.Exp. apply ~loc spread_ident
4375- [
4376- (Asttypes. Nolabel , make_dict_chunk target_rows);
4377- ( Asttypes. Nolabel ,
4378- Ast_helper.Exp. array ~loc
4379- (List. map
4380- (function
4381- | `Rows rows -> make_dict_chunk rows
4382- | `Spread spread_expr -> spread_expr)
4383- source_parts) );
4384- ]
4385- in
4386- spread
4387- | source_parts ->
4388- let spread_ident =
4389- Ast_helper.Exp. ident ~loc ~attrs: [dict_spread_attr]
4390- (Location. mkloc
4391- (Longident. Ldot (Longident. Lident Primitive_modules. dict, " spread" ))
4392- loc)
4393- in
4394- let spread =
4395- Ast_helper.Exp. apply ~loc spread_ident
4396- [
4397- (Asttypes. Nolabel , make_dict_chunk [] );
4398- ( Asttypes. Nolabel ,
4399- Ast_helper.Exp. array ~loc
4400- (List. map
4401- (function
4402- | `Rows rows -> make_dict_chunk rows
4403- | `Spread spread_expr -> spread_expr)
4404- source_parts) );
4405- ]
4406- in
4407- spread
4386+ make_dict_spread (make_dict_chunk target_rows) source_parts
4387+ | source_parts -> make_dict_spread (make_dict_chunk [] ) source_parts
44084388
44094389and parse_array_exp p =
44104390 let start_pos = p.Parser. start_pos in
0 commit comments