aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Namer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-05-28 11:27:11 +0200
committerMartin Odersky <odersky@gmail.com>2014-05-30 15:43:02 +0200
commitc2175ec910165308e81c48bd8ca8910c50862be4 (patch)
tree82af4c43d1167cc0d897d31b1afa855c068f856e /src/dotty/tools/dotc/typer/Namer.scala
parent70e785f5d8a583dae127dadf4d9add70bdea71f7 (diff)
downloaddotty-c2175ec910165308e81c48bd8ca8910c50862be4.tar.gz
dotty-c2175ec910165308e81c48bd8ca8910c50862be4.tar.bz2
dotty-c2175ec910165308e81c48bd8ca8910c50862be4.zip
Avoid classtype checking for refinements.
In a refinement type T { R } we do not need T to be a class. But analyzing the refeinement type will create a temporary class type. This refinement class has to be treated specially in what concerns parent types.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Namer.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Namer.scala3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Namer.scala b/src/dotty/tools/dotc/typer/Namer.scala
index e9195a072..681523bd2 100644
--- a/src/dotty/tools/dotc/typer/Namer.scala
+++ b/src/dotty/tools/dotc/typer/Namer.scala
@@ -459,7 +459,8 @@ class Namer { typer: Typer =>
def checkedParentType(parent: untpd.Tree): Type = {
val ptype = parentType(parent)(ctx.fresh addMode Mode.InSuperCall)
- checkClassTypeWithStablePrefix(ptype, parent.pos, traitReq = parent ne parents.head)
+ if (cls.isRefinementClass) ptype
+ else checkClassTypeWithStablePrefix(ptype, parent.pos, traitReq = parent ne parents.head)
}
val selfInfo =