@@ -172,35 +172,48 @@ build_into(Ann, Clauses, Expr, Into, Uniq, S) ->
172172 {Reason , SR } = build_var (Ann , SK ),
173173 {Stack , ST } = build_var (Ann , SR ),
174174 {Done , SD } = build_var (Ann , ST ),
175+ {Ref , SRef } = build_var (Ann , SD ),
176+ {Current , SC } = build_var (Ann , SRef ),
175177
176178 InnerFun = fun (InnerExpr , InnerAcc ) ->
177- {call , Ann , Fun , [InnerAcc , pair (Ann , cont , InnerExpr )]}
179+ {block , Ann , [
180+ {match , Ann , Current , {call , Ann , Fun , [InnerAcc , pair (Ann , cont , InnerExpr )]}},
181+ ? remote (Ann , erlang , put , [Ref , Current ]),
182+ Current
183+ ]}
178184 end ,
179185
180186 MatchExpr = {match , Ann ,
181187 {tuple , Ann , [Acc , Fun ]},
182188 ? remote (Ann , 'Elixir.Collectable' , into , [Into ])
183189 },
184190
185- {IntoReduceExpr , SN } = build_reduce (Ann , Clauses , InnerFun , Expr , Acc , Uniq , SD ),
191+ {IntoReduceExpr , SN } = build_reduce (Ann , Clauses , InnerFun , Expr , Acc , Uniq , SC ),
192+ RefExpr = {match , Ann , Ref , ? remote (Ann , erlang , make_ref , [])},
186193
187194 TryExpr =
188195 {'try' , Ann ,
189196 [IntoReduceExpr ],
190197 [{clause , Ann ,
191198 [Done ],
192199 [],
193- [{call , Ann , Fun , [Done , {atom , Ann , done }]}]}],
194- [stacktrace_clause (Ann , Fun , Acc , Kind , Reason , Stack )],
200+ [
201+ ? remote (Ann , erlang , erase , [Ref ]),
202+ {call , Ann , Fun , [Done , {atom , Ann , done }]}
203+ ]}],
204+ [stacktrace_clause (Ann , Fun , Ref , Kind , Reason , Stack )],
195205 []},
196206
197- {{block , Ann , [MatchExpr , TryExpr ]}, SN }.
207+ {{block , Ann , [RefExpr , MatchExpr , ? remote ( Ann , erlang , put , [ Ref , Acc ]) , TryExpr ]}, SN }.
198208
199- stacktrace_clause (Ann , Fun , Acc , Kind , Reason , Stack ) ->
209+ stacktrace_clause (Ann , Fun , Ref , Kind , Reason , Stack ) ->
210+ CurrentAcc = ? remote (Ann , erlang , get , [Ref ]),
200211 {clause , Ann ,
201212 [{tuple , Ann , [Kind , Reason , Stack ]}],
202213 [],
203- [{call , Ann , Fun , [Acc , {atom , Ann , halt }]},
214+ [
215+ {call , Ann , Fun , [CurrentAcc , {atom , Ann , halt }]},
216+ ? remote (Ann , erlang , erase , [Ref ]),
204217 ? remote (Ann , erlang , raise , [Kind , Reason , Stack ])]}.
205218
206219% % Helpers
0 commit comments