diff options
author | Martin Odersky <odersky@gmail.com> | 2014-11-24 14:54:21 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-11-24 14:57:50 +0100 |
commit | 9d6c1040448c48dac2ac3f292fd1e3b65b061b78 (patch) | |
tree | fb59844447a3483ad3f95145837210487a04e44f /src/dotty/tools/dotc/typer/Checking.scala | |
parent | 05d286ba8e2a006f8c739f25737d5f86f4554889 (diff) | |
download | dotty-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.scala | 6 |
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 => |