aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/Contexts.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-07-28 14:53:58 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-07-28 14:53:58 +0200
commita43d39ad719978fbb36663f336c1c7cd2c4da1e0 (patch)
treed2e2923351f6c43e5defbfba3cc7011ae8685024 /src/dotty/tools/dotc/core/Contexts.scala
parent15129574ec21fb66193d183201e5caee7ff53120 (diff)
downloaddotty-a43d39ad719978fbb36663f336c1c7cd2c4da1e0.tar.gz
dotty-a43d39ad719978fbb36663f336c1c7cd2c4da1e0.tar.bz2
dotty-a43d39ad719978fbb36663f336c1c7cd2c4da1e0.zip
Workaround #742 and add a test for it.
Making a correct fix could take some time, and I want to find other issues before I start working on this one.
Diffstat (limited to 'src/dotty/tools/dotc/core/Contexts.scala')
-rw-r--r--src/dotty/tools/dotc/core/Contexts.scala37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/dotty/tools/dotc/core/Contexts.scala b/src/dotty/tools/dotc/core/Contexts.scala
index 206ef9d8b..15c7b4b11 100644
--- a/src/dotty/tools/dotc/core/Contexts.scala
+++ b/src/dotty/tools/dotc/core/Contexts.scala
@@ -177,25 +177,26 @@ object Contexts {
/** The new implicit references that are introduced by this scope */
private var implicitsCache: ContextualImplicits = null
def implicits: ContextualImplicits = {
- if (implicitsCache == null )
- implicitsCache = {
- val implicitRefs: List[TermRef] =
- if (isClassDefContext)
- try owner.thisType.implicitMembers
- catch {
- case ex: CyclicReference => Nil
- }
- else if (isImportContext) importInfo.importedImplicits
- else if (isNonEmptyScopeContext) scope.implicitDecls
- else Nil
- val outerImplicits =
- if (isImportContext && importInfo.hiddenRoot.exists)
- outer.implicits exclude importInfo.hiddenRoot
- else
- outer.implicits
- if (implicitRefs.isEmpty) outerImplicits
- else new ContextualImplicits(implicitRefs, outerImplicits)(this)
+ if (implicitsCache == null ) {
+ val outerImplicits =
+ if (isImportContext && importInfo.hiddenRoot.exists)
+ outer.implicits exclude importInfo.hiddenRoot
+ else
+ outer.implicits
+ try
+ implicitsCache = {
+ val implicitRefs: List[TermRef] =
+ if (isClassDefContext) owner.thisType.implicitMembers
+ else if (isImportContext) importInfo.importedImplicits
+ else if (isNonEmptyScopeContext) scope.implicitDecls
+ else Nil
+ if (implicitRefs.isEmpty) outerImplicits
+ else new ContextualImplicits(implicitRefs, outerImplicits)(this)
+ }
+ catch {
+ case ex: CyclicReference => implicitsCache = outerImplicits
}
+ }
implicitsCache
}