Skip to content

Commit 2dcc362

Browse files
committed
Use IntMap in TreePickler
1 parent bd2b184 commit 2dcc362

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

compiler/src/dotty/tools/dotc/core/tasty/TreeBuffer.scala

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)