diff options
author | Martin Odersky <odersky@gmail.com> | 2016-03-07 15:10:25 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-03-12 16:08:37 +0100 |
commit | d822b1e965aa808d706b859ce90ed4dc08df8d94 (patch) | |
tree | 70c1168caa0faed3be91e02509250e9df4c679da /src | |
parent | 294d21ff6168f1402efc04a52f8d26deaed31c2c (diff) | |
download | dotty-d822b1e965aa808d706b859ce90ed4dc08df8d94.tar.gz dotty-d822b1e965aa808d706b859ce90ed4dc08df8d94.tar.bz2 dotty-d822b1e965aa808d706b859ce90ed4dc08df8d94.zip |
Add @volatile when rewriting lazy vals from Scala2.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/transform/LazyVals.scala | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/LazyVals.scala b/src/dotty/tools/dotc/transform/LazyVals.scala index 25b9afa68..88d55c576 100644 --- a/src/dotty/tools/dotc/transform/LazyVals.scala +++ b/src/dotty/tools/dotc/transform/LazyVals.scala @@ -12,7 +12,10 @@ import Symbols._ import Decorators._ import NameOps._ import StdNames.nme +import rewrite.Rewrites.patch +import util.Positions.Position import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransformer, MiniPhaseTransform} +import dotty.tools.dotc.ast.NavigateAST._ import dotty.tools.dotc.ast.Trees._ import dotty.tools.dotc.ast.{untpd, tpd} import dotty.tools.dotc.core.Constants.Constant @@ -65,11 +68,14 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer with Nee val sym = tree.symbol if (!(sym is Flags.Lazy) || sym.owner.is(Flags.Trait) || (sym.isStatic && sym.is(Flags.Module))) tree else { - val isField = sym.owner.isClass - if (isField) { if (sym.isVolatile || + ctx.scala2Mode && { + if (ctx.settings.rewrite.value.isDefined) + patch(ctx.compilationUnit.source, Position(toUntyped(tree).envelope.start), "@volatile ") + true // cannot assume volatile because of problems with compilestdlib. See #1149 + } || (sym.is(Flags.Module) && !sym.is(Flags.Synthetic))) // module class is user-defined. // Should be threadsafe, to mimic safety guaranteed by global object |