aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-06-16 17:52:01 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-06-16 17:52:01 +0200
commit797bfd74b0900d18d62082b842f6a330ce414ebd (patch)
tree54f7a7c21ab86f798d6484973e5409e4c16939e4
parent0129468dca4127a6dcdd49b98c7f5060b441b027 (diff)
downloaddotty-797bfd74b0900d18d62082b842f6a330ce414ebd.tar.gz
dotty-797bfd74b0900d18d62082b842f6a330ce414ebd.tar.bz2
dotty-797bfd74b0900d18d62082b842f6a330ce414ebd.zip
Scala2 mixin: For some lazy vals inside traits, Lazy flag isn't set on implementation method.
Cannot rely on it. Instead use method signature.
-rw-r--r--src/dotty/tools/dotc/transform/Mixin.scala6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/Mixin.scala b/src/dotty/tools/dotc/transform/Mixin.scala
index 4f7119c07..8562f4f02 100644
--- a/src/dotty/tools/dotc/transform/Mixin.scala
+++ b/src/dotty/tools/dotc/transform/Mixin.scala
@@ -166,8 +166,10 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
DefDef(implementation(getter.asTerm),
if (isScala2x) {
if (getter.is(Flags.Lazy)) { // lazy vals need to have a rhs that will be the lazy initializer
- val reciever = ref(mixin.implClass)
- val sym = reciever.tpe.widen.nonPrivateDecl(getter.name).suchThat(_.is(Lazy)).symbol // lazy val can be overloaded
+ val sym = mixin.implClass.info.nonPrivateDecl(getter.name).suchThat(_.info.paramTypess match {
+ case List(List(t: TypeRef)) => t.isDirectRef(mixin)
+ case _ => false
+ }).symbol // lazy val can be overloaded
ref(mixin.implClass).select(sym).appliedTo(This(ctx.owner.asClass))
}
else default