aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Checking.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-11-24 14:54:21 +0100
committerMartin Odersky <odersky@gmail.com>2014-11-24 14:57:50 +0100
commit9d6c1040448c48dac2ac3f292fd1e3b65b061b78 (patch)
treefb59844447a3483ad3f95145837210487a04e44f /src/dotty/tools/dotc/typer/Checking.scala
parent05d286ba8e2a006f8c739f25737d5f86f4554889 (diff)
downloaddotty-9d6c1040448c48dac2ac3f292fd1e3b65b061b78.tar.gz
dotty-9d6c1040448c48dac2ac3f292fd1e3b65b061b78.tar.bz2
dotty-9d6c1040448c48dac2ac3f292fd1e3b65b061b78.zip
Cyclicity checking independent of positions.
More robust cyclicity check which does not depend on source positions.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Checking.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Checking.scala6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Checking.scala b/src/dotty/tools/dotc/typer/Checking.scala
index 06722492f..17cba1373 100644
--- a/src/dotty/tools/dotc/typer/Checking.scala
+++ b/src/dotty/tools/dotc/typer/Checking.scala
@@ -168,9 +168,13 @@ object Checking {
def forwardRef(tree: Tree) = flag("forward", tree)
def selfRef(tree: Tree) = flag("self", tree)
val checkTree = new TreeAccumulator[Unit] {
+ private var seen = Set[Symbol]()
def checkRef(tree: Tree, sym: Symbol) =
- if (sym.maybeOwner == refineCls && tree.pos.start <= sym.pos.end) forwardRef(tree)
+ if (sym.maybeOwner == refineCls && !seen(sym)) forwardRef(tree)
def apply(x: Unit, tree: Tree) = tree match {
+ case tree: MemberDef =>
+ foldOver(x, tree)
+ seen += tree.symbol
case tree @ Select(This(_), _) =>
checkRef(tree, tree.symbol)
case tree: RefTree =>