Skip to content

Commit d413148

Browse files
authored
perf: improve DiscrTree insertion time (#13928)
This PR fixes a non-linearity in DiscrTree insertion, reducing the time it takes to `import Mathlib` by ~10%
1 parent d69367f commit d413148

1 file changed

Lines changed: 5 additions & 7 deletions

File tree

src/Lean/Meta/DiscrTree/Basic.lean

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,11 @@ def insertKeyValue [BEq α] (d : DiscrTree α) (keys : Array Key) (v : α) : Dis
166166
if keys.isEmpty then panic! "invalid key sequence"
167167
else
168168
let k := keys[0]!
169-
match d.root.find? k with
170-
| none =>
171-
let c := createNodes keys v 1
172-
{ root := d.root.insert k c }
173-
| some c =>
174-
let c := insertAux keys v 1 c
175-
{ root := d.root.insert k c }
169+
{ d with root :=
170+
d.root.alter k fun
171+
| none => some <| createNodes keys v 1
172+
| some c => insertAux keys v 1 c
173+
}
176174

177175
@[deprecated insertKeyValue (since := "2026-01-02")]
178176
def insertCore [BEq α] (d : DiscrTree α) (keys : Array Key) (v : α) : DiscrTree α :=

0 commit comments

Comments
 (0)