@@ -117,16 +117,22 @@ trait ExprBuilder {
117117 * <mkResumeApply>
118118 * }
119119 */
120- def ifIsFailureTree [T : WeakTypeTag ](tryReference : => Tree ) =
121- If (futureSystemOps.tryyIsFailure(c.Expr [futureSystem.Tryy [T ]](tryReference)).tree,
122- Block (toList(futureSystemOps.completeProm[T ](
123- c.Expr [futureSystem.Prom [T ]](symLookup.memberRef(name.result)),
124- c.Expr [futureSystem.Tryy [T ]](
125- TypeApply (Select (tryReference, newTermName(" asInstanceOf" )),
126- List (TypeTree (futureSystemOps.tryType[T ]))))).tree),
127- Return (literalUnit)),
128- Block (List (tryGetTree(tryReference)), mkStateTree(nextState, symLookup))
129- )
120+ def ifIsFailureTree [T : WeakTypeTag ](tryReference : => Tree ) = {
121+ val getAndUpdateState = Block (List (tryGetTree(tryReference)), mkStateTree(nextState, symLookup))
122+ if (asyncBase.futureSystem.emitTryCatch) {
123+ If (futureSystemOps.tryyIsFailure(c.Expr [futureSystem.Tryy [T ]](tryReference)).tree,
124+ Block (toList(futureSystemOps.completeProm[T ](
125+ c.Expr [futureSystem.Prom [T ]](symLookup.memberRef(name.result)),
126+ c.Expr [futureSystem.Tryy [T ]](
127+ TypeApply (Select (tryReference, newTermName(" asInstanceOf" )),
128+ List (TypeTree (futureSystemOps.tryType[T ]))))).tree),
129+ Return (literalUnit)),
130+ getAndUpdateState
131+ )
132+ } else {
133+ getAndUpdateState
134+ }
135+ }
130136
131137 override def mkOnCompleteHandler [T : WeakTypeTag ]: Option [CaseDef ] = {
132138 Some (mkHandlerCase(onCompleteState, List (ifIsFailureTree[T ](Ident (symLookup.applyTrParam)))))
@@ -402,7 +408,7 @@ trait ExprBuilder {
402408 val stateMemberRef = symLookup.memberRef(name.state)
403409 val body = Match (stateMemberRef, mkCombinedHandlerCases[T ] ++ initStates.flatMap(_.mkOnCompleteHandler[T ]) ++ List (CaseDef (Ident (nme.WILDCARD ), EmptyTree , Throw (Apply (Select (New (Ident (defn.IllegalStateExceptionClass )), termNames.CONSTRUCTOR ), List ())))))
404410
405- Try (
411+ maybeTry (
406412 body,
407413 List (
408414 CaseDef (
0 commit comments