aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Petrashko <dark@d-d.me>2015-10-21 16:43:52 +0200
committerDmitry Petrashko <dark@d-d.me>2015-10-21 16:43:52 +0200
commit2b5b0648dc8c3eb4738d99932f87b9962e9d16b1 (patch)
treeea5f5ef2beb236689fd3dbcc342dbc5a57fe23a1
parentcbb565a436196b102c27688d1da8f27bea12bae4 (diff)
parentdb354748e387f664db4eae2aa61e1a17037548e8 (diff)
downloaddotty-2b5b0648dc8c3eb4738d99932f87b9962e9d16b1.tar.gz
dotty-2b5b0648dc8c3eb4738d99932f87b9962e9d16b1.tar.bz2
dotty-2b5b0648dc8c3eb4738d99932f87b9962e9d16b1.zip
Merge pull request #811 from dotty-staging/fix-objects-mixin
Fix #810: initialization of inner objects of traits.
-rw-r--r--src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala2
-rw-r--r--src/dotty/tools/dotc/transform/ExplicitOuter.scala6
-rw-r--r--src/dotty/tools/dotc/transform/Mixin.scala4
-rw-r--r--src/dotty/tools/dotc/typer/Typer.scala2
4 files changed, 7 insertions, 7 deletions
diff --git a/src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala b/src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala
index b080a97b6..17fef3852 100644
--- a/src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala
+++ b/src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala
@@ -221,7 +221,7 @@ object PickleBuffer {
FINAL_PKL -> Final,
METHOD_PKL -> Method,
INTERFACE_PKL -> NoInitsInterface,
- MODULE_PKL -> Module,
+ MODULE_PKL -> (Module | Lazy, Module),
IMPLICIT_PKL -> Implicit,
SEALED_PKL -> Sealed,
CASE_PKL -> Case,
diff --git a/src/dotty/tools/dotc/transform/ExplicitOuter.scala b/src/dotty/tools/dotc/transform/ExplicitOuter.scala
index eb231bfe7..0dda44e84 100644
--- a/src/dotty/tools/dotc/transform/ExplicitOuter.scala
+++ b/src/dotty/tools/dotc/transform/ExplicitOuter.scala
@@ -117,8 +117,6 @@ class ExplicitOuter extends MiniPhaseTransform with InfoTransformer { thisTransf
object ExplicitOuter {
import ast.tpd._
- private val LocalInstantiationSite = Module | Private
-
/** Ensure that class `cls` has outer accessors */
def ensureOuterAccessors(cls: ClassSymbol)(implicit ctx: Context): Unit = {
//todo: implementing #165 would simplify this logic
@@ -176,7 +174,9 @@ object ExplicitOuter {
/** Class is always instantiated in the compilation unit where it is defined */
private def hasLocalInstantiation(cls: ClassSymbol)(implicit ctx: Context): Boolean =
- cls.owner.isTerm || cls.is(LocalInstantiationSite)
+ // scala2x modules always take an outer pointer(as of 2.11)
+ // dotty modules are always locally instantiated
+ cls.owner.isTerm || cls.is(Private) || cls.is(Module, butNot = Scala2x)
/** The outer parameter accessor of cass `cls` */
private def outerParamAccessor(cls: ClassSymbol)(implicit ctx: Context): TermSymbol =
diff --git a/src/dotty/tools/dotc/transform/Mixin.scala b/src/dotty/tools/dotc/transform/Mixin.scala
index ae4e26177..32b268fc7 100644
--- a/src/dotty/tools/dotc/transform/Mixin.scala
+++ b/src/dotty/tools/dotc/transform/Mixin.scala
@@ -216,7 +216,9 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
val rhs =
if (ctx.atPhase(thisTransform)(implicit ctx => getter.is(ParamAccessor))) nextArgument()
else if (isScala2x)
- if (getter.is(Lazy)) lazyGetterCall
+ if (getter.is(Lazy, butNot = Module)) lazyGetterCall
+ else if (getter.is(Module))
+ New(getter.info.resultType, List(This(cls)))
else Underscore(getter.info.resultType)
else transformFollowing(superRef(initializer(getter)).appliedToNone)
// transformFollowing call is needed to make memoize & lazy vals run
diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala
index fbdfef930..78cefb2d4 100644
--- a/src/dotty/tools/dotc/typer/Typer.scala
+++ b/src/dotty/tools/dotc/typer/Typer.scala
@@ -34,8 +34,6 @@ import util.Stats.{track, record}
import config.Printers._
import language.implicitConversions
-trait TyperContextOps { ctx: Context => }
-
object Typer {
/** The precedence of bindings which determines which of several bindings will be