@@ -4411,6 +4411,25 @@ and parse_dict_expr ~start_pos p =
44114411 chunk_loc))
44124412 [(Asttypes. Nolabel , Ast_helper.Exp. array ~loc: chunk_loc key_value_pairs)]
44134413 in
4414+ let make_dict_spread target_expr source_parts =
4415+ let spread_ident =
4416+ Ast_helper.Exp. ident ~loc ~attrs: [dict_spread_attr]
4417+ (Location. mkloc
4418+ (Longident. Ldot (Longident. Lident Primitive_modules. dict, " spread" ))
4419+ loc)
4420+ in
4421+ Ast_helper.Exp. apply ~loc spread_ident
4422+ [
4423+ (Asttypes. Nolabel , target_expr);
4424+ ( Asttypes. Nolabel ,
4425+ Ast_helper.Exp. array ~loc
4426+ (List. map
4427+ (function
4428+ | `Rows rows -> make_dict_chunk rows
4429+ | `Spread spread_expr -> spread_expr)
4430+ source_parts) );
4431+ ]
4432+ in
44144433 let grouped_parts =
44154434 let rec loop current_rows acc = function
44164435 | [] ->
@@ -4436,47 +4455,8 @@ and parse_dict_expr ~start_pos p =
44364455 | [] -> make_dict_chunk ~loc_override: loc []
44374456 | [`Rows rows] -> make_dict_chunk ~loc_override: loc rows
44384457 | `Rows target_rows :: source_parts ->
4439- let spread_ident =
4440- Ast_helper.Exp. ident ~loc ~attrs: [dict_spread_attr]
4441- (Location. mkloc
4442- (Longident. Ldot (Longident. Lident Primitive_modules. dict, " spread" ))
4443- loc)
4444- in
4445- let spread =
4446- Ast_helper.Exp. apply ~loc spread_ident
4447- [
4448- (Asttypes. Nolabel , make_dict_chunk target_rows);
4449- ( Asttypes. Nolabel ,
4450- Ast_helper.Exp. array ~loc
4451- (List. map
4452- (function
4453- | `Rows rows -> make_dict_chunk rows
4454- | `Spread spread_expr -> spread_expr)
4455- source_parts) );
4456- ]
4457- in
4458- spread
4459- | source_parts ->
4460- let spread_ident =
4461- Ast_helper.Exp. ident ~loc ~attrs: [dict_spread_attr]
4462- (Location. mkloc
4463- (Longident. Ldot (Longident. Lident Primitive_modules. dict, " spread" ))
4464- loc)
4465- in
4466- let spread =
4467- Ast_helper.Exp. apply ~loc spread_ident
4468- [
4469- (Asttypes. Nolabel , make_dict_chunk [] );
4470- ( Asttypes. Nolabel ,
4471- Ast_helper.Exp. array ~loc
4472- (List. map
4473- (function
4474- | `Rows rows -> make_dict_chunk rows
4475- | `Spread spread_expr -> spread_expr)
4476- source_parts) );
4477- ]
4478- in
4479- spread
4458+ make_dict_spread (make_dict_chunk target_rows) source_parts
4459+ | source_parts -> make_dict_spread (make_dict_chunk [] ) source_parts
44804460
44814461and parse_array_exp p =
44824462 let start_pos = p.Parser. start_pos in
0 commit comments