From f0b13b1c0656a5569d74933706148671c11b4d83 Mon Sep 17 00:00:00 2001 From: Dmitry Petrashko Date: Mon, 24 Aug 2015 17:49:08 +0200 Subject: LazyVals: fix volatile lazy vals initialization Used to incorrectly set status field. --- src/dotty/tools/dotc/transform/LazyVals.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/dotty/tools/dotc') 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) -- cgit v1.2.3