@@ -21,17 +21,19 @@ class TreeBuffer extends TastyBuffer(50000) {
21
21
private var numOffsets = 0
22
22
23
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
24
+ private val treeAddrs = util.IntMap [Tree ]()
25
25
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)
30
33
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)
35
37
36
38
private def offset (i : Int ): Addr = Addr (offsets(i))
37
39
@@ -156,15 +158,11 @@ class TreeBuffer extends TastyBuffer(50000) {
156
158
wasted
157
159
}
158
160
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
168
166
169
167
/** Final assembly, involving the following steps:
170
168
* - compute deltas
0 commit comments