Skip to content

Commit d89d4ff

Browse files
TIHanbaronfel
authored andcommitted
Minor pickle optimization for Map and list (#7812)
* Minor pickle optimization for Map and list * Minor feedback changes * quick style change
1 parent 6a07ca9 commit d89d4ff

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/fsharp/TastPickle.fs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -581,8 +581,7 @@ let u_array_ext extraf f st =
581581
extraItem, arr
582582

583583
let u_list_core f n st =
584-
[ for _ in 1..n do
585-
yield f st ]
584+
List.init n (fun _ -> f st)
586585

587586
let u_list f st =
588587
let n = u_int st
@@ -1305,11 +1304,23 @@ let u_ILInstr st =
13051304
// Pickle/unpickle for F# types and module signatures
13061305
//---------------------------------------------------------------------------
13071306

1308-
let p_Map pk pv = p_wrap Map.toList (p_list (p_tup2 pk pv))
1307+
let p_Map_core pk pv xs st =
1308+
xs |> Map.iter (fun k v -> pk k st; pv v st)
1309+
1310+
let p_Map pk pv x st =
1311+
p_int (Map.count x) st
1312+
p_Map_core pk pv x st
1313+
13091314
let p_qlist pv = p_wrap QueueList.toList (p_list pv)
13101315
let p_namemap p = p_Map p_string p
13111316

1312-
let u_Map uk uv = u_wrap Map.ofList (u_list (u_tup2 uk uv))
1317+
let u_Map_core uk uv n st =
1318+
Map.ofSeq (seq { for _ in 1..n -> (uk st, uv st) })
1319+
1320+
let u_Map uk uv st =
1321+
let n = u_int st
1322+
u_Map_core uk uv n st
1323+
13131324
let u_qlist uv = u_wrap QueueList.ofList (u_list uv)
13141325
let u_namemap u = u_Map u_string u
13151326

0 commit comments

Comments
 (0)