aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/Types.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-02-06 21:53:56 +0100
committerMartin Odersky <odersky@gmail.com>2014-02-06 21:55:17 +0100
commit0d356254c4d6326398c9c1a587ad193fadef6883 (patch)
treeefca748e4e2278c675a2880cc0b31927272aa6c9 /src/dotty/tools/dotc/core/Types.scala
parentab62ca99a31ccd1984b875f7040b430bfccc2724 (diff)
downloaddotty-0d356254c4d6326398c9c1a587ad193fadef6883.tar.gz
dotty-0d356254c4d6326398c9c1a587ad193fadef6883.tar.bz2
dotty-0d356254c4d6326398c9c1a587ad193fadef6883.zip
Catch stale references
If a NamedType was denoted a SymDenotation one run, but stops being defined in the next, throw a staleSymbol error.
Diffstat (limited to 'src/dotty/tools/dotc/core/Types.scala')
-rw-r--r--src/dotty/tools/dotc/core/Types.scala8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala
index 2a6a5017f..28a7f9e67 100644
--- a/src/dotty/tools/dotc/core/Types.scala
+++ b/src/dotty/tools/dotc/core/Types.scala
@@ -1018,8 +1018,12 @@ object Types {
case null =>
val sym = lastSymbol
if (sym == null) loadDenot else denotOfSym(sym)
- case d: SymDenotation if ctx.stillValid(d) =>
- d.current
+ case d: SymDenotation =>
+ if (ctx.stillValid(d)) d.current
+ else {
+ val newd = loadDenot
+ if (newd.exists) newd else d.staleSymbolError
+ }
case d =>
if (d.validFor.runId == ctx.period.runId) d.current
else loadDenot