Skip to content

Commit ebb7e99

Browse files
committed
Change treatment of signatures in TermRefs
- don't compute members when unpickling termrefs, it caused cyclic reference errors on tasty-bootstrap. - to make this robust, have currentSignature in TermRef return a NotAMethof if not symbol or denotation is known.
1 parent 4f5855b commit ebb7e99

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

compiler/src/dotty/tools/dotc/core/Types.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1526,6 +1526,10 @@ object Types {
15261526
else symbol.asSeenFrom(prefix).signature
15271527
}
15281528

1529+
/** The signature of the current denotation if it is known without forcing.
1530+
* Otherwise the signature of the current symbol if it is known without forcing.
1531+
* Otherwise NotAMethod.
1532+
*/
15291533
private def currentSignature(implicit ctx: Context): Signature =
15301534
if (mySig != null) mySig
15311535
else {
@@ -1534,7 +1538,7 @@ object Types {
15341538
else {
15351539
val sym = currentSymbol
15361540
if (sym.exists) sym.asSeenFrom(prefix).signature
1537-
else null
1541+
else Signature.NotAMethod
15381542
}
15391543
}
15401544

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

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -296,22 +296,16 @@ class TreeUnpickler(reader: TastyReader, nameAtRef: NameRef => TermName, posUnpi
296296
readPackageRef().termRef
297297
case TYPEREF =>
298298
val name = readName().toTypeName
299-
if (Config.newScheme) {
300-
val prefix = readType()
301-
TypeRef(prefix, name, prefix.member(name))
302-
}
303-
else TypeRef(readType(), name)
299+
TypeRef(readType(), name)
304300
case TERMREF =>
305301
val sname = readName()
306302
val prefix = readType()
307-
if (Config.newScheme)
308-
sname match {
309-
case SignedName(name, sig) =>
310-
TermRef(prefix, name, prefix.member(name).atSignature(sig))
311-
case name =>
312-
TermRef(prefix, name, prefix.member(name))
313-
}
314-
else TermRef(prefix, sname)
303+
sname match {
304+
case SignedName(name, sig) =>
305+
TermRef(prefix, name, prefix.member(name).atSignature(sig))
306+
case name =>
307+
TermRef(prefix, name)
308+
}
315309
case THIS =>
316310
ThisType.raw(readType().asInstanceOf[TypeRef])
317311
case RECtype =>

0 commit comments

Comments
 (0)