diff options
author | Martin Odersky <odersky@gmail.com> | 2014-12-19 19:00:25 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-12-19 19:00:25 +0100 |
commit | ed1016201ee3f1784243c6d04d84164369c56254 (patch) | |
tree | 9614ec55788a8dee93ec9935ea434ba660689747 /src/dotty/tools | |
parent | 431b2b73e6558faa6e34bd527c8ed3b9fd6d638f (diff) | |
download | dotty-ed1016201ee3f1784243c6d04d84164369c56254.tar.gz dotty-ed1016201ee3f1784243c6d04d84164369c56254.tar.bz2 dotty-ed1016201ee3f1784243c6d04d84164369c56254.zip |
Harden implicit scope computation against CyclicReference errors.
Diffstat (limited to 'src/dotty/tools')
-rw-r--r-- | src/dotty/tools/dotc/core/Contexts.scala | 6 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/Types.scala | 2 |
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 |