@@ -1116,17 +1116,40 @@ instance Translatable A.Expr (State Ctx.Context (CCode Lval, CCode Stat)) where
1116
1116
translate ret@ (A. Return {A. val}) =
1117
1117
do (nval, tval) <- translate val
1118
1118
eCtx <- gets Ctx. getExecCtx
1119
+ isAsyncForward <- gets Ctx. isAsyncForward
1119
1120
let theReturn =
1120
- case eCtx of
1121
- Ctx. FunctionContext fun ->
1122
- [dtraceFunctionExit (A. functionName fun), Return nval]
1123
- Ctx. MethodContext mdecl ->
1124
- [dtraceMethodExit thisVar (A. methodName mdecl), Return nval]
1125
- Ctx. ClosureContext clos ->
1126
- let ty = (Ty. getResultType $ A. getType clos)
1127
- in [dtraceClosureExit,
1128
- Return $ asEncoreArgT (translate ty) nval]
1129
- _ -> error " Expr.hs: No context to return from"
1121
+ if isAsyncForward then
1122
+ case eCtx of
1123
+ Ctx. FunctionContext fun ->
1124
+ let ty = A. getType fun
1125
+ in [dtraceFunctionExit (A. functionName fun)
1126
+ ,Statement $ Call futureFulfil [AsExpr encoreCtxVar, AsExpr futVar
1127
+ ,asEncoreArgT (translate ty) nval]
1128
+ ,Return Skip ]
1129
+ Ctx. MethodContext mdecl ->
1130
+ let ty = A. getType mdecl
1131
+ in [dtraceMethodExit thisVar (A. methodName mdecl)
1132
+ ,Statement $ Call futureFulfil [AsExpr encoreCtxVar, AsExpr futVar
1133
+ ,asEncoreArgT (translate ty) nval]
1134
+ ,Return Skip ]
1135
+ Ctx. ClosureContext clos ->
1136
+ let ty = (Ty. getResultType $ A. getType clos)
1137
+ in [dtraceClosureExit
1138
+ ,Statement $ Call futureFulfil [AsExpr encoreCtxVar, AsExpr futVar
1139
+ ,asEncoreArgT (translate ty) nval]
1140
+ ,Return Skip ]
1141
+ _ -> error " Expr.hs: No context to return from"
1142
+ else
1143
+ case eCtx of
1144
+ Ctx. FunctionContext fun ->
1145
+ [dtraceFunctionExit (A. functionName fun), Return nval]
1146
+ Ctx. MethodContext mdecl ->
1147
+ [dtraceMethodExit thisVar (A. methodName mdecl), Return nval]
1148
+ Ctx. ClosureContext clos ->
1149
+ let ty = (Ty. getResultType $ A. getType clos)
1150
+ in [dtraceClosureExit,
1151
+ Return $ asEncoreArgT (translate ty) nval]
1152
+ _ -> error " Expr.hs: No context to return from"
1130
1153
return (unit, Seq $ tval: theReturn)
1131
1154
1132
1155
translate iseos@ (A. IsEos {A. target}) =
0 commit comments