Skip to content

Commit 12d5dbc

Browse files
committed
Handle missing delta positions when unpickling
A missing delta position signifies that the node has the same position as its parent. Once that case was added, we can now enable positions when reading from Tasty.
1 parent 014ad9b commit 12d5dbc

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

src/dotty/tools/dotc/FromTasty.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,18 +66,17 @@ object FromTasty extends Driver {
6666
case info: ClassfileLoader =>
6767
info.load(clsd) match {
6868
case Some(unpickler: DottyUnpickler) =>
69-
val (List(unpickled), source) = unpickler.body(readPositions = false)
69+
val (List(unpickled), source) = unpickler.body(readPositions = true)
7070
val unit1 = new CompilationUnit(source)
7171
unit1.tpdTree = unpickled
7272
unit1
7373
case _ =>
74-
cannotUnpickle(s"it does not have a TASTY attribute")
74+
cannotUnpickle(s"its class file ${info.classfile} does not have a TASTY attribute")
7575
}
7676
case info =>
7777
cannotUnpickle(s"its info of type ${info.getClass} is not a ClassfileLoader")
7878
}
7979
case _ =>
80-
println(defn.EmptyPackageClass.info.decls)
8180
ctx.error(s"class not found: $className")
8281
unit
8382
}

src/dotty/tools/dotc/core/pickling/TreeUnpickler.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -860,11 +860,12 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
860860
}
861861
}
862862

863-
private def setNormalized(tree: Tree, parentPos: Position): Unit = {
864-
assert(tree.pos.exists)
865-
val absPos = Position(parentPos.start + offsetToInt(tree.pos.start), parentPos.end - tree.pos.end)
866-
tree.setPosUnchecked(absPos)
867-
}
863+
private def setNormalized(tree: Tree, parentPos: Position): Unit =
864+
tree.setPosUnchecked(
865+
if (tree.pos.exists)
866+
Position(parentPos.start + offsetToInt(tree.pos.start), parentPos.end - tree.pos.end)
867+
else
868+
parentPos)
868869

869870
def normalizePos(x: Any, parentPos: Position)(implicit ctx: Context): Unit =
870871
traverse(x, parentPos, setNormalized)

src/dotty/tools/dotc/transform/Pickler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class Pickler extends Phase {
8989
}
9090
pickling.println("************* entered toplevel ***********")
9191
for ((cls, unpickler) <- unpicklers) {
92-
val (unpickled, source) = unpickler.body(readPositions = false)
92+
val (unpickled, source) = unpickler.body(readPositions = true)
9393
testSame(i"$unpickled%\n%", beforePickling(cls), cls, source)
9494
}
9595
}

0 commit comments

Comments
 (0)