aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/Phases.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-07-13 17:39:46 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-07-13 17:39:46 +0200
commit61c30f8d949a43ad0580ef421c4fe94acc3c340e (patch)
tree038be0c8484b486c100b976e125993822e819047 /src/dotty/tools/dotc/core/Phases.scala
parent74c2e2326f6a68a889347ef3052d88a586aca84f (diff)
downloaddotty-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/core/Phases.scala')
-rw-r--r--src/dotty/tools/dotc/core/Phases.scala6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/Phases.scala b/src/dotty/tools/dotc/core/Phases.scala
index b086308a2..42b03484e 100644
--- a/src/dotty/tools/dotc/core/Phases.scala
+++ b/src/dotty/tools/dotc/core/Phases.scala
@@ -3,7 +3,7 @@ package core
import Periods._
import Contexts._
-import dotty.tools.backend.jvm.GenBCode
+import dotty.tools.backend.jvm.{LabelDefs, GenBCode}
import util.DotClass
import DenotTransformers._
import Denotations._
@@ -296,6 +296,8 @@ object Phases {
private var myFlatClasses = false
private var myRefChecked = false
private var mySymbolicRefs = false
+ private var myLabelsReordered = false
+
/** The sequence position of this phase in the given context where 0
* is reserved for NoPhase and the first real phase is at position 1.
@@ -311,6 +313,7 @@ object Phases {
final def flatClasses = myFlatClasses // Phase is after flatten
final def refChecked = myRefChecked // Phase is after RefChecks
final def symbolicRefs = mySymbolicRefs // Phase is after ResolveSuper, newly generated TermRefs should be symbolic
+ final def labelsReordered = myLabelsReordered // Phase is after LabelDefs, labels are flattened and owner chains don't mirror this
protected[Phases] def init(base: ContextBase, start: Int, end:Int): Unit = {
if (start >= FirstPhaseId)
@@ -321,6 +324,7 @@ object Phases {
myFlatClasses = prev.getClass == classOf[Flatten] || prev.flatClasses
myRefChecked = prev.getClass == classOf[RefChecks] || prev.refChecked
mySymbolicRefs = prev.getClass == classOf[ResolveSuper] || prev.symbolicRefs
+ myLabelsReordered = prev.getClass == classOf[LabelDefs] || prev.labelsReordered
}
protected[Phases] def init(base: ContextBase, id: Int): Unit = init(base, id, id)