diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-07-13 17:39:46 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-07-13 17:39:46 +0200 |
commit | 61c30f8d949a43ad0580ef421c4fe94acc3c340e (patch) | |
tree | 038be0c8484b486c100b976e125993822e819047 /src/dotty/tools/dotc/transform/TreeChecker.scala | |
parent | 74c2e2326f6a68a889347ef3052d88a586aca84f (diff) | |
download | dotty-61c30f8d949a43ad0580ef421c4fe94acc3c340e.tar.gz dotty-61c30f8d949a43ad0580ef421c4fe94acc3c340e.tar.bz2 dotty-61c30f8d949a43ad0580ef421c4fe94acc3c340e.zip |
Relax Ycheck for labels after LabelDefs
LabelDefs reorders labels. As a result of reordering
label-def defined inside other label-def could be lifted outside.
LabelDefs doesn't update owner chains to represent this.
Making treeChecker aware of this.
Diffstat (limited to 'src/dotty/tools/dotc/transform/TreeChecker.scala')
-rw-r--r-- | src/dotty/tools/dotc/transform/TreeChecker.scala | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala index 0e69b9d1f..b76f04b58 100644 --- a/src/dotty/tools/dotc/transform/TreeChecker.scala +++ b/src/dotty/tools/dotc/transform/TreeChecker.scala @@ -242,7 +242,8 @@ class TreeChecker extends Phase with SymTransformer { private def checkOwner(tree: untpd.Tree)(implicit ctx: Context): Unit = { def ownerMatches(symOwner: Symbol, ctxOwner: Symbol): Boolean = symOwner == ctxOwner || - ctxOwner.isWeakOwner && ownerMatches(symOwner, ctxOwner.owner) + ctxOwner.isWeakOwner && ownerMatches(symOwner, ctxOwner.owner) || + ctx.phase.labelsReordered && symOwner.isWeakOwner && ownerMatches(symOwner.owner, ctxOwner) assert(ownerMatches(tree.symbol.owner, ctx.owner), i"bad owner; ${tree.symbol} has owner ${tree.symbol.owner}, expected was ${ctx.owner}\n" + i"owner chain = ${tree.symbol.ownersIterator.toList}%, %, ctxOwners = ${ctx.outersIterator.map(_.owner).toList}%, %") |