@@ -337,17 +337,15 @@ trait MatchTreeMaking extends MatchCodeGen with Debugging {
337
337
def eqTest (pat : Tree , testedBinder : Symbol ) = REF (testedBinder) OBJ_EQ pat
338
338
339
339
def outerTest (testedBinder : Symbol , expectedTp : Type ): Tree = {
340
- val expectedOuter = expectedTp.prefix match {
341
- case ThisType (clazz) => This (clazz)
342
- case NoType => mkTRUE // fallback for SI-6183
343
- case pre => REF (pre.prefix, pre.termSymbol)
340
+ val expectedPrefix = expectedTp.prefix
341
+ if (expectedPrefix eq NoType ) mkTRUE // fallback for SI-6183
342
+ else {
343
+ // ExplicitOuter replaces `Select(q, outerSym) OBJ_EQ expectedPrefix` by `Select(q, outerAccessor(outerSym.owner)) OBJ_EQ expectedPrefix`
344
+ // if there's an outer accessor, otherwise the condition becomes `true` -- TODO: can we improve needsOuterTest so there's always an outerAccessor?
345
+ val outerFor = expectedTp.typeSymbol
346
+ val outerMarker = outerFor.newMethod(vpmName.outer, newFlags = SYNTHETIC | ARTIFACT ) setInfo expectedPrefix
347
+ Select (codegen._asInstanceOf(testedBinder, expectedTp), outerMarker) OBJ_EQ gen.mkAttributedQualifier(expectedPrefix)
344
348
}
345
-
346
- // ExplicitOuter replaces `Select(q, outerSym) OBJ_EQ expectedPrefix` by `Select(q, outerAccessor(outerSym.owner)) OBJ_EQ expectedPrefix`
347
- // if there's an outer accessor, otherwise the condition becomes `true` -- TODO: can we improve needsOuterTest so there's always an outerAccessor?
348
- val outer = expectedTp.typeSymbol.newMethod(vpmName.outer, newFlags = SYNTHETIC | ARTIFACT ) setInfo expectedTp.prefix
349
-
350
- (Select (codegen._asInstanceOf(testedBinder, expectedTp), outer)) OBJ_EQ expectedOuter
351
349
}
352
350
}
353
351
0 commit comments