diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-04-24 11:12:34 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-04-30 14:26:06 +0200 |
commit | a274d8dfc86d95e359c45e8f13db58983a2f041b (patch) | |
tree | 3188c51369118a6a1afc6cd4805e5018b268da2f /src | |
parent | 9c150c572ee7bb308e87cf4f0ae51a6fef22c00b (diff) | |
download | dotty-a274d8dfc86d95e359c45e8f13db58983a2f041b.tar.gz dotty-a274d8dfc86d95e359c45e8f13db58983a2f041b.tar.bz2 dotty-a274d8dfc86d95e359c45e8f13db58983a2f041b.zip |
Generate getters for modules in LV.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/transform/LazyVals.scala | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/transform/LazyVals.scala b/src/dotty/tools/dotc/transform/LazyVals.scala index 160333fdf..8fb47f416 100644 --- a/src/dotty/tools/dotc/transform/LazyVals.scala +++ b/src/dotty/tools/dotc/transform/LazyVals.scala @@ -48,8 +48,11 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { else { if (tree.symbol is Flags.Module) { val field = ctx.newSymbol(tree.symbol.owner, tree.symbol.name ++ StdNames.nme.MODULE_VAR_SUFFIX, containerFlags, tree.symbol.info.resultType, coord = tree.symbol.pos) - tpd.This(tree.symbol.enclosingClass.asClass).select(defn.Object_synchronized).appliedTo( - mkDefNonThreadSafeNonNullable(field, tree.rhs).ensureConforms(tree.tpe.widen.resultType.widen)) + val getter = + tpd.DefDef(tree.symbol.asTerm, tpd.This(tree.symbol.enclosingClass.asClass).select(defn.Object_synchronized).appliedTo( + mkDefNonThreadSafeNonNullable(field, tree.rhs).ensureConforms(tree.tpe.widen.resultType.widen))) + val fieldVal = tpd.ValDef(field.asTerm, initValue(field.info.widen)) + Thicket(fieldVal, getter) } else { val isField = tree.symbol.owner.isClass @@ -105,8 +108,8 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { val flag = ref(holderSymbol).select("initialized".toTermName) val initer = valueInitter.changeOwner(x.symbol, initSymbol) val initBody = - ref(holderSymbol).select(defn.Object_synchronized).appliedToType(tpe).appliedTo( - mkNonThreadSafeDef(result, flag, initer).ensureConforms(tpe)) + ref(holderSymbol).select(defn.Object_synchronized).appliedTo( + mkNonThreadSafeDef(result, flag, initer)).ensureConforms(tpe) val initTree = DefDef(initSymbol, initBody) val holderTree = ValDef(holderSymbol, New(holderImpl.typeRef, List())) val methodBody = { |