diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-07-28 14:53:58 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-07-28 14:53:58 +0200 |
commit | a43d39ad719978fbb36663f336c1c7cd2c4da1e0 (patch) | |
tree | d2e2923351f6c43e5defbfba3cc7011ae8685024 /src/dotty/tools/dotc/core/Contexts.scala | |
parent | 15129574ec21fb66193d183201e5caee7ff53120 (diff) | |
download | dotty-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.scala | 37 |
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 } |