aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorodersky <odersky@gmail.com>2015-06-18 10:58:07 +0200
committerodersky <odersky@gmail.com>2015-06-18 10:58:07 +0200
commit2ce159fa1707c1e57e22af9b2fe5a87fee94ee8d (patch)
treec13a7f302e0b949dac99249e66962230df43064a /src
parent78fae1152a7b381af4639d3d66ed637eac3ca9d0 (diff)
parent797bfd74b0900d18d62082b842f6a330ce414ebd (diff)
downloaddotty-2ce159fa1707c1e57e22af9b2fe5a87fee94ee8d.tar.gz
dotty-2ce159fa1707c1e57e22af9b2fe5a87fee94ee8d.tar.bz2
dotty-2ce159fa1707c1e57e22af9b2fe5a87fee94ee8d.zip
Merge pull request #664 from dotty-staging/more-tests
Enable tests that pass, move macro tests to disabled.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/transform/AugmentScala2Traits.scala12
-rw-r--r--src/dotty/tools/dotc/transform/Mixin.scala13
2 files changed, 21 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/transform/AugmentScala2Traits.scala b/src/dotty/tools/dotc/transform/AugmentScala2Traits.scala
index 6c2d63d10..9f9d2dd67 100644
--- a/src/dotty/tools/dotc/transform/AugmentScala2Traits.scala
+++ b/src/dotty/tools/dotc/transform/AugmentScala2Traits.scala
@@ -11,6 +11,7 @@ import SymDenotations._
import Types._
import Decorators._
import DenotTransformers._
+import Annotations._
import StdNames._
import NameOps._
import ast.Trees._
@@ -80,9 +81,14 @@ class AugmentScala2Traits extends MiniPhaseTransform with IdentityDenotTransform
for (sym <- mixin.info.decls) {
if (needsForwarder(sym) || sym.isConstructor || sym.isGetter && sym.is(Lazy))
implClass.enter(implMethod(sym.asTerm))
- if (sym.isGetter && !sym.is(LazyOrDeferred) &&
- !sym.setter.exists && !sym.info.resultType.isInstanceOf[ConstantType])
- traitSetter(sym.asTerm).enteredAfter(thisTransform)
+ if (sym.isGetter)
+ if (sym.is(Lazy)) {
+ if (!sym.hasAnnotation(defn.VolatileAnnot))
+ sym.addAnnotation(Annotation(defn.VolatileAnnot, Nil))
+ }
+ else if (!sym.is(Deferred) && !sym.setter.exists &&
+ !sym.info.resultType.isInstanceOf[ConstantType])
+ traitSetter(sym.asTerm).enteredAfter(thisTransform)
if (sym.is(PrivateAccessor, butNot = ExpandedName) &&
(sym.isGetter || sym.isSetter)) // strangely, Scala 2 fields are also methods that have Accessor set.
sym.ensureNotPrivate.installAfter(thisTransform)
diff --git a/src/dotty/tools/dotc/transform/Mixin.scala b/src/dotty/tools/dotc/transform/Mixin.scala
index 63e680414..8562f4f02 100644
--- a/src/dotty/tools/dotc/transform/Mixin.scala
+++ b/src/dotty/tools/dotc/transform/Mixin.scala
@@ -163,7 +163,18 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
if (isCurrent(getter) || getter.is(ExpandedName))
// transformFollowing call is needed to make memoize & lazy vals run
transformFollowing(
- DefDef(implementation(getter.asTerm), if (isScala2x) default else initial))
+ 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 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
+ } else initial)
+ )
else if (isScala2x) EmptyTree
else initial
}