@@ -8,7 +8,6 @@ import dotty.tools.tasty.TastyBuffer
88import TastyBuffer .{Addr , NoAddr , AddrWidth }
99
1010import util .Util .bestFit
11- import util .SparseIntArray
1211import config .Printers .pickling
1312import ast .untpd .Tree
1413
@@ -21,23 +20,18 @@ class TreeBuffer extends TastyBuffer(50000) {
2120 private var delta : Array [Int ] = _
2221 private var numOffsets = 0
2322
24- /** A map from tree unique ids to the address index at which a tree is pickled.
25- * Note that trees are looked up by reference equality,
26- * so one can reliably use this function only directly after `pickler`.
27- */
28- private val addrOfTree = SparseIntArray ()
23+ /** A map from trees to the address at which a tree is pickled. */
24+ private val treeAddrs = new java.util.IdentityHashMap [Tree , Any ] // really: Addr | Null
2925
30- def registerTreeAddr (tree : Tree ): Addr =
31- val id = tree.uniqueId
32- if addrOfTree.contains(id) then Addr (addrOfTree(id))
33- else
34- addrOfTree(tree.uniqueId) = currentAddr.index
35- currentAddr
26+ def registerTreeAddr (tree : Tree ): Addr = treeAddrs.get(tree) match {
27+ case null => treeAddrs.put(tree, currentAddr); currentAddr
28+ case addr : Addr => addr
29+ }
3630
37- def addrOfTree (tree : Tree ): Addr =
38- val idx = tree.uniqueId
39- if addrOfTree.contains(idx) then Addr (addrOfTree(idx))
40- else NoAddr
31+ def addrOfTree (tree : Tree ): Addr = treeAddrs.get(tree) match {
32+ case null => NoAddr
33+ case addr : Addr => addr
34+ }
4135
4236 private def offset (i : Int ): Addr = Addr (offsets(i))
4337
@@ -162,8 +156,15 @@ class TreeBuffer extends TastyBuffer(50000) {
162156 wasted
163157 }
164158
165- def adjustTreeAddrs (): Unit =
166- addrOfTree.transform((id, addr) => adjusted(Addr (addr)).index)
159+ def adjustTreeAddrs (): Unit = {
160+ val it = treeAddrs.keySet.iterator
161+ while (it.hasNext) {
162+ val tree = it.next
163+ treeAddrs.get(tree) match {
164+ case addr : Addr => treeAddrs.put(tree, adjusted(addr))
165+ }
166+ }
167+ }
167168
168169 /** Final assembly, involving the following steps:
169170 * - compute deltas
0 commit comments