diff options
author | odersky <odersky@gmail.com> | 2015-06-18 10:58:07 +0200 |
---|---|---|
committer | odersky <odersky@gmail.com> | 2015-06-18 10:58:07 +0200 |
commit | 2ce159fa1707c1e57e22af9b2fe5a87fee94ee8d (patch) | |
tree | c13a7f302e0b949dac99249e66962230df43064a /src | |
parent | 78fae1152a7b381af4639d3d66ed637eac3ca9d0 (diff) | |
parent | 797bfd74b0900d18d62082b842f6a330ce414ebd (diff) | |
download | dotty-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.scala | 12 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/Mixin.scala | 13 |
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 } |