aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc
diff options
context:
space:
mode:
authorDmitry Petrashko <dark@d-d.me>2015-09-01 16:37:28 +0200
committerDmitry Petrashko <dark@d-d.me>2015-09-01 16:37:28 +0200
commit76d083889d52a5abbf883e5577b1fd21c9a1d903 (patch)
tree90ce07bf31439b77011770a40f8ade0e5f89dcd8 /src/dotty/tools/dotc
parentfbc1609b6022513168996cf126f7b32105312849 (diff)
parentf0b13b1c0656a5569d74933706148671c11b4d83 (diff)
downloaddotty-76d083889d52a5abbf883e5577b1fd21c9a1d903.tar.gz
dotty-76d083889d52a5abbf883e5577b1fd21c9a1d903.tar.bz2
dotty-76d083889d52a5abbf883e5577b1fd21c9a1d903.zip
Merge pull request #775 from dotty-staging/fix-lv
LazyVals: fix volatile lazy vals initialization
Diffstat (limited to 'src/dotty/tools/dotc')
-rw-r--r--src/dotty/tools/dotc/transform/LazyVals.scala6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/LazyVals.scala b/src/dotty/tools/dotc/transform/LazyVals.scala
index 83668cdab..fbb4dd9b3 100644
--- a/src/dotty/tools/dotc/transform/LazyVals.scala
+++ b/src/dotty/tools/dotc/transform/LazyVals.scala
@@ -280,9 +280,11 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer {
val handlerSymbol = ctx.newSymbol(methodSymbol, nme.ANON_FUN, Flags.Synthetic,
MethodType(List(nme.x_1), List(defn.ThrowableType), defn.IntType))
val caseSymbol = ctx.newSymbol(methodSymbol, nme.DEFAULT_EXCEPTION_NAME, Flags.Synthetic, defn.ThrowableType)
- val complete = setFlagState.appliedTo(thiz, offset, initState, Literal(Constant(ord)))
+ val triggerRetry = setFlagState.appliedTo(thiz, offset, initState, Literal(Constant(ord)))
+ val complete = setFlagState.appliedTo(thiz, offset, computedState, Literal(Constant(ord)))
+
val handler = CaseDef(Bind(caseSymbol, ref(caseSymbol)), EmptyTree,
- Block(List(complete), Throw(ref(caseSymbol))
+ Block(List(triggerRetry), Throw(ref(caseSymbol))
))
val compute = ref(resultSymbol).becomes(rhs)