diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-08-24 17:49:08 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-08-24 17:49:08 +0200 |
commit | f0b13b1c0656a5569d74933706148671c11b4d83 (patch) | |
tree | c57e89c255ccb2af9b723e51d748795b555a935d /src/dotty/tools/dotc | |
parent | b779f163e69221d9052c801d215fa2e688f7ba44 (diff) | |
download | dotty-f0b13b1c0656a5569d74933706148671c11b4d83.tar.gz dotty-f0b13b1c0656a5569d74933706148671c11b4d83.tar.bz2 dotty-f0b13b1c0656a5569d74933706148671c11b4d83.zip |
LazyVals: fix volatile lazy vals initialization
Used to incorrectly set status field.
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) |