@@ -21,17 +21,19 @@ class TreeBuffer extends TastyBuffer(50000) {
2121 private var numOffsets = 0
2222
2323 /** 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
24+ private val treeAddrs = util.IntMap [Tree ]()
2525
26- def registerTreeAddr (tree : Tree ): Addr = treeAddrs.get(tree) match {
27- case null => treeAddrs.put(tree, currentAddr); currentAddr
28- case addr : Addr => addr
29- }
26+ def registerTreeAddr (tree : Tree ): Addr =
27+ val idx = treeAddrs(tree)
28+ if idx < 0 then
29+ treeAddrs(tree) = currentAddr.index
30+ currentAddr
31+ else
32+ Addr (idx)
3033
31- def addrOfTree (tree : Tree ): Addr = treeAddrs.get(tree) match {
32- case null => NoAddr
33- case addr : Addr => addr
34- }
34+ def addrOfTree (tree : Tree ): Addr =
35+ val idx = treeAddrs(tree)
36+ if idx < 0 then NoAddr else Addr (idx)
3537
3638 private def offset (i : Int ): Addr = Addr (offsets(i))
3739
@@ -156,15 +158,11 @@ class TreeBuffer extends TastyBuffer(50000) {
156158 wasted
157159 }
158160
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- }
161+ def adjustTreeAddrs (): Unit =
162+ var i = 0
163+ while i < treeAddrs.size do
164+ treeAddrs.setValue(i, adjusted(Addr (treeAddrs.value(i))).index)
165+ i += 1
168166
169167 /** Final assembly, involving the following steps:
170168 * - compute deltas
0 commit comments