aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/PatternMatcher.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-30 13:53:58 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-03-30 13:53:58 +0200
commit042c2f07a3cbe7e5f80dea282849dc396bdc37e0 (patch)
tree72145cc96bbb987025eb3f5b38e6d6c95a216548 /src/dotty/tools/dotc/transform/PatternMatcher.scala
parentcdbe81e95cbf5e67fe4289b450440b63147f68ab (diff)
downloaddotty-042c2f07a3cbe7e5f80dea282849dc396bdc37e0.tar.gz
dotty-042c2f07a3cbe7e5f80dea282849dc396bdc37e0.tar.bz2
dotty-042c2f07a3cbe7e5f80dea282849dc396bdc37e0.zip
Fix #442.
There's a non-standard interaction between explicitOuter and Pattern matcher, as patmat can request outer symbols to be available earlier. Note that this fix makes code between pattern matcher & explicitOuter non-Ycheck-able, as patmat adds reference to future symbol.
Diffstat (limited to 'src/dotty/tools/dotc/transform/PatternMatcher.scala')
-rw-r--r--src/dotty/tools/dotc/transform/PatternMatcher.scala8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/PatternMatcher.scala b/src/dotty/tools/dotc/transform/PatternMatcher.scala
index ea41e7592..1f1552398 100644
--- a/src/dotty/tools/dotc/transform/PatternMatcher.scala
+++ b/src/dotty/tools/dotc/transform/PatternMatcher.scala
@@ -643,8 +643,12 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTrans
// val outer = expectedTp.typeSymbol.newMethod(vpmName.outer, newFlags = SYNTHETIC | ARTIFACT) setInfo expectedTp.prefix
val expectedClass = expectedTp.dealias.classSymbol.asClass
- ExplicitOuter.ensureOuterAccessors(expectedClass)
- codegen._asInstanceOf(testedBinder, expectedTp).select(ExplicitOuter.outerAccessor(expectedClass)).select(defn.Object_eq).appliedTo(expectedOuter)
+ val test = codegen._asInstanceOf(testedBinder, expectedTp)
+ val outerAccessorTested = ctx.atPhase(ctx.explicitOuterPhase.next) { implicit ctx =>
+ ExplicitOuter.ensureOuterAccessors(expectedClass)
+ test.select(ExplicitOuter.outerAccessor(expectedClass)).select(defn.Object_eq).appliedTo(expectedOuter)
+ }
+ outerAccessorTested
}
}