aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala7
-rw-r--r--src/dotty/tools/dotc/transform/ExplicitOuter.scala3
-rw-r--r--src/dotty/tools/dotc/transform/Mixin.scala2
3 files changed, 5 insertions, 7 deletions
diff --git a/src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala b/src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala
index 0f5d4bb91..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,
@@ -287,7 +287,7 @@ object PickleBuffer {
val shift = ChunkBits
val mask = ChunkSize - 1
assert(6 * ChunkBits == ScalaFlagEnd)
- val t = FlagSet(
+ FlagSet(
map(0)((sflags >>> (shift * 0)).toInt & mask) |
map(1)((sflags >>> (shift * 1)).toInt & mask) |
map(2)((sflags >>> (shift * 2)).toInt & mask) |
@@ -295,8 +295,5 @@ object PickleBuffer {
map(4)((sflags >>> (shift * 4)).toInt & mask) |
map(5)((sflags >>> (shift * 5)).toInt & mask)
)
- if (!isType && t.is(Module, Lazy))
- t | Lazy // scala2 modules do not always set lazy flag. Dotty modules do
- else t
}
}
diff --git a/src/dotty/tools/dotc/transform/ExplicitOuter.scala b/src/dotty/tools/dotc/transform/ExplicitOuter.scala
index daf8c85d2..0dda44e84 100644
--- a/src/dotty/tools/dotc/transform/ExplicitOuter.scala
+++ b/src/dotty/tools/dotc/transform/ExplicitOuter.scala
@@ -175,7 +175,8 @@ object ExplicitOuter {
/** Class is always instantiated in the compilation unit where it is defined */
private def hasLocalInstantiation(cls: ClassSymbol)(implicit ctx: Context): Boolean =
// scala2x modules always take an outer pointer(as of 2.11)
- cls.owner.isTerm || cls.is(Private) || cls.is(Module, Scala2x)
+ // 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 0094e6965..32b268fc7 100644
--- a/src/dotty/tools/dotc/transform/Mixin.scala
+++ b/src/dotty/tools/dotc/transform/Mixin.scala
@@ -216,7 +216,7 @@ 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, Module)) 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)