aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Typer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-08-25 11:03:06 +0200
committerMartin Odersky <odersky@gmail.com>2014-08-25 11:03:06 +0200
commit15c4fec42148da760107baa0fb3e5fbb699c4c82 (patch)
tree135b9d9e02732e441a26ef337b6a66d31bceec94 /src/dotty/tools/dotc/typer/Typer.scala
parentb56a743edf1fe21ff1f9f070d17e4a23930e59bd (diff)
downloaddotty-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.scala8
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