@@ -362,11 +362,12 @@ let transform_cases ~mode ~loc cases =
362
362
in
363
363
364
364
let rec group acc current_group = function
365
- | [] -> if current_group = [] then List. rev acc else List. rev (current_group :: acc)
365
+ | [] -> if current_group = [] then List. rev acc else List. rev (List. rev current_group :: acc)
366
366
| case :: rest ->
367
367
if current_group = [] || can_merge_into_group case current_group then group acc (case :: current_group) rest
368
368
else group (List. rev current_group :: acc) [ case ] rest
369
369
in
370
+
370
371
group [] [] parsed_cases
371
372
in
372
373
@@ -378,10 +379,11 @@ let transform_cases ~mode ~loc cases =
378
379
let handlers = nG, bs, rhs, guard in
379
380
let re_data = re, flags in
380
381
match List. assoc_opt key patterns with
381
- | Some (re_data , existing ) -> (key, (re_data, handlers :: existing)) :: List. remove_assoc key patterns
382
+ | Some (re_data , existing ) ->
383
+ (key, (re_data, existing @ [ handlers ])) :: List. remove_assoc key patterns (* Append instead of prepend *)
382
384
| None -> (key, (re_data, [ handlers ])) :: patterns
383
385
in
384
- List. fold_left add_case [] cases |> List. map (fun ((_ , _ ), (re_data , handlers )) -> re_data, List. rev handlers) |> List. rev
386
+ List. fold_left add_case [] cases |> List. map (fun ((_ , _ ), (re_data , handlers )) -> re_data, handlers) |> List. rev
385
387
in
386
388
387
389
let add_offsets patterns =
@@ -405,7 +407,7 @@ let transform_cases ~mode ~loc cases =
405
407
Bindings. wrap_group_bindings ~captured_acc: [] ~loc guarded offset (List. rev bs)
406
408
in
407
409
408
- name, [% expr fun _g -> [% e chain_guards ( List. rev handlers) ]]
410
+ name, [% expr fun _g -> [% e chain_guards handlers]]
409
411
in
410
412
411
413
let unique_patterns = deduplicate_patterns cases_in_group in
0 commit comments