Skip to content

Commit 2cb5e55

Browse files
cknittclaude
andcommitted
Keep Parmatch's fresh pattern names per compiler request
Concurrent requests shared the counter and could reuse a name within one exhaustiveness check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Christoph Knittel <ck@cca.io>
1 parent b679592 commit 2cb5e55

3 files changed

Lines changed: 6 additions & 3 deletions

File tree

‎compiler/ext/compiler_request_state.ml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ type t = {
77
mutable lambda_raise_count: int;
88
mutable lambda_negative_raise_count: int;
99
mutable builtin_ppx_local_module_counter: int;
10+
mutable parmatch_name_counter: int;
1011
mutable substitution_saved_id: int;
1112
mutable type_node_id: int;
1213
mutable type_node_reset_id: int option;
@@ -26,6 +27,7 @@ let create ~active cwd =
2627
lambda_raise_count = 0;
2728
lambda_negative_raise_count = 0;
2829
builtin_ppx_local_module_counter = 0;
30+
parmatch_name_counter = 0;
2931
substitution_saved_id = -1;
3032
type_node_id = -1;
3133
type_node_reset_id = None;

‎compiler/ext/compiler_request_state.mli‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ type t = {
77
mutable lambda_raise_count: int;
88
mutable lambda_negative_raise_count: int;
99
mutable builtin_ppx_local_module_counter: int;
10+
mutable parmatch_name_counter: int;
1011
mutable substitution_saved_id: int;
1112
mutable type_node_id: int;
1213
mutable type_node_reset_id: int option;

‎compiler/ml/parmatch.ml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1872,10 +1872,10 @@ module Conv = struct
18721872
open Parsetree
18731873
let mkpat desc = Ast_helper.Pat.mk desc
18741874

1875-
let name_counter = ref 0
18761875
let fresh name =
1877-
let current = !name_counter in
1878-
name_counter := !name_counter + 1;
1876+
let state = Compiler_request_state.current () in
1877+
let current = state.parmatch_name_counter in
1878+
state.parmatch_name_counter <- current + 1;
18791879
"#$" ^ name ^ string_of_int current
18801880

18811881
let conv_record_rest (rest : Typedtree.record_pat_rest) =

0 commit comments

Comments
 (0)