aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-12-19 19:00:25 +0100
committerMartin Odersky <odersky@gmail.com>2014-12-19 19:00:25 +0100
commited1016201ee3f1784243c6d04d84164369c56254 (patch)
tree9614ec55788a8dee93ec9935ea434ba660689747 /src/dotty/tools/dotc/core
parent431b2b73e6558faa6e34bd527c8ed3b9fd6d638f (diff)
downloaddotty-ed1016201ee3f1784243c6d04d84164369c56254.tar.gz
dotty-ed1016201ee3f1784243c6d04d84164369c56254.tar.bz2
dotty-ed1016201ee3f1784243c6d04d84164369c56254.zip
Harden implicit scope computation against CyclicReference errors.
Diffstat (limited to 'src/dotty/tools/dotc/core')
-rw-r--r--src/dotty/tools/dotc/core/Contexts.scala6
-rw-r--r--src/dotty/tools/dotc/core/Types.scala2
2 files changed, 6 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/Contexts.scala b/src/dotty/tools/dotc/core/Contexts.scala
index 635390ef5..b11e77ef2 100644
--- a/src/dotty/tools/dotc/core/Contexts.scala
+++ b/src/dotty/tools/dotc/core/Contexts.scala
@@ -170,7 +170,11 @@ object Contexts {
if (implicitsCache == null )
implicitsCache = {
val implicitRefs: List[TermRef] =
- if (isClassDefContext) owner.thisType.implicitMembers
+ if (isClassDefContext)
+ try owner.thisType.implicitMembers
+ catch {
+ case ex: CyclicReference => Nil
+ }
else if (isImportContext) importInfo.importedImplicits
else if (isNonEmptyScopeContext) scope.implicitDecls
else Nil
diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala
index 141b29ab7..b8e0a48c1 100644
--- a/src/dotty/tools/dotc/core/Types.scala
+++ b/src/dotty/tools/dotc/core/Types.scala
@@ -2976,7 +2976,7 @@ object Types {
val ex = new CyclicReference(denot)
if (!(ctx.mode is typer.Mode.CheckCyclic)) {
cyclicErrors.println(ex.getMessage)
- for (elem <- ex.getStackTrace take 40)
+ for (elem <- ex.getStackTrace take 50)
cyclicErrors.println(elem.toString)
}
ex