diff options
-rw-r--r-- | src/dotty/tools/dotc/core/unpickleScala2/PickleBuffer.scala | 7 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/ExplicitOuter.scala | 3 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/Mixin.scala | 2 |
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) |