From 0553f08eaeee1f9ac7ef6c28b341a92e0fb452e3 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 29 Dec 2013 18:36:18 +0100 Subject: Tightening of position handlng 1) endPos works now even for NoPosition. 2) On the other hand, there's an assertion in Typer.typed which requires every non-empty tree that's type checked in a globally committable context to have a defined position. Some fixes were needed to make the tests pass the new assert. --- src/dotty/tools/dotc/core/TyperState.scala | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/dotty/tools/dotc/core/TyperState.scala') diff --git a/src/dotty/tools/dotc/core/TyperState.scala b/src/dotty/tools/dotc/core/TyperState.scala index f46c58c90..455320ba8 100644 --- a/src/dotty/tools/dotc/core/TyperState.scala +++ b/src/dotty/tools/dotc/core/TyperState.scala @@ -41,6 +41,9 @@ class TyperState(val reporter: Reporter) extends DotClass with Showable { /** Is it allowed to commit this state? */ def isCommittable: Boolean = false + /** Can this state be transitively committed until the top-level? */ + def isGlobalCommittable: Boolean = false + override def toText(printer: Printer): Text = "ImmutableTyperState" } @@ -55,6 +58,10 @@ extends TyperState(reporter) { override def fresh(isCommittable: Boolean): TyperState = new MutableTyperState(this, new StoreReporter, isCommittable) + override val isGlobalCommittable = + isCommittable && + (!previous.isInstanceOf[MutableTyperState] || previous.isGlobalCommittable) + /** Commit typer state so that its information is copied into current typer state * In addition (1) the owning state of undetermined or temporarily instantiated * type variables changes from this typer state to the current one. (2) Variables -- cgit v1.2.3