diff options
author | Dmitry Petrashko <dark@d-d.me> | 2015-09-01 16:37:28 +0200 |
---|---|---|
committer | Dmitry Petrashko <dark@d-d.me> | 2015-09-01 16:37:28 +0200 |
commit | 76d083889d52a5abbf883e5577b1fd21c9a1d903 (patch) | |
tree | 90ce07bf31439b77011770a40f8ade0e5f89dcd8 /src/dotty/tools/dotc | |
parent | fbc1609b6022513168996cf126f7b32105312849 (diff) | |
parent | f0b13b1c0656a5569d74933706148671c11b4d83 (diff) | |
download | dotty-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.scala | 6 |
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) |