diff options
author | Martin Odersky <odersky@gmail.com> | 2014-08-25 11:03:06 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-08-25 11:03:06 +0200 |
commit | 15c4fec42148da760107baa0fb3e5fbb699c4c82 (patch) | |
tree | 135b9d9e02732e441a26ef337b6a66d31bceec94 /src/dotty/tools/dotc/typer/Typer.scala | |
parent | b56a743edf1fe21ff1f9f070d17e4a23930e59bd (diff) | |
download | dotty-15c4fec42148da760107baa0fb3e5fbb699c4c82.tar.gz dotty-15c4fec42148da760107baa0fb3e5fbb699c4c82.tar.bz2 dotty-15c4fec42148da760107baa0fb3e5fbb699c4c82.zip |
ref(<type>) -> TypeTree
Taking the ref of a type should always give a TypeTree. Makes ref more
universally usable as type references after frontend are assumed to be TypeTrees.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Typer.scala')
-rw-r--r-- | src/dotty/tools/dotc/typer/Typer.scala | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala index 400909da6..9bf4d8a66 100644 --- a/src/dotty/tools/dotc/typer/Typer.scala +++ b/src/dotty/tools/dotc/typer/Typer.scala @@ -729,10 +729,12 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit assert(tree.refinements.length == refinements1.length, s"${tree.refinements} != $refinements1") def addRefinement(parent: Type, refinement: Tree): Type = { typr.println(s"adding refinement $refinement") + def checkRef(tree: Tree, sym: Symbol) = + if (sym.maybeOwner == refineCls && tree.pos.start <= sym.pos.end) + ctx.error("illegal forward reference in refinement", tree.pos) foreachSubTreeOf(refinement) { - case tree: RefTree => - if (tree.symbol.owner == refineCls && tree.pos.start <= tree.symbol.pos.end) - ctx.error("illegal forward reference in refinement", tree.pos) + case tree: RefTree => checkRef(tree, tree.symbol) + case tree: TypeTree => checkRef(tree, tree.tpe.typeSymbol) case _ => } val rsym = refinement.symbol |