blob: cbe213d89aaef85200e6e9b48570a79c21bd6503 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package dotty.tools
package dotc
package core
package tasty
import util.Positions._
import collection.mutable
import TastyBuffer.{Addr, NoAddr}
/** Unpickler for tree positions */
class PositionUnpickler(reader: TastyReader) {
import reader._
private[tasty] lazy val positions = {
val positions = new mutable.HashMap[Addr, Position]
var curIndex = 0
var curStart = 0
var curEnd = 0
while (!isAtEnd) {
val header = readInt()
val addrDelta = header >> 3
val hasStart = (header & 4) != 0
val hasEnd = (header & 2) != 0
val hasPoint = (header & 1) != 0
curIndex += addrDelta
assert(curIndex >= 0)
if (hasStart) curStart += readInt()
if (hasEnd) curEnd += readInt()
positions(Addr(curIndex)) =
if (hasPoint) Position(curStart, curEnd, curStart + readInt())
else Position(curStart, curEnd)
}
positions
}
def posAt(addr: Addr) = positions.getOrElse(addr, NoPosition)
}
|