@@ -371,11 +371,31 @@ translate_with_else(Meta, [{else, Else}], S) ->
371
371
RaiseExpr = {{'.' , Generated , [erlang , error ]}, Generated , [{with_clause , RaiseVar }]},
372
372
RaiseClause = {'->' , Generated , [[RaiseVar ], RaiseExpr ]},
373
373
374
- GeneratedElse = [{'->' , ? generated (ElseMeta ), ElseArgs } || {'->' , ElseMeta , ElseArgs } <- Else ],
374
+ GeneratedElse = [build_generated_clause (Generated , ElseClause ) || ElseClause <- Else ],
375
+
375
376
Case = {'case' , [{export_vars , false } | Generated ], [ElseVarEx , [{do , GeneratedElse ++ [RaiseClause ]}]]},
376
377
{TranslatedCase , SC } = elixir_erl_pass :translate (Case , SV ),
377
378
{{clause , ? ann (Generated ), [ElseVarErl ], [], [TranslatedCase ]}, SC }.
378
379
380
+ build_generated_clause (Generated , {'->' , _ , [Args , Clause ]}) ->
381
+ NewArgs = [build_generated_clause_arg (Generated , Arg ) || Arg <- Args ],
382
+ {'->' , Generated , [NewArgs , Clause ]}.
383
+
384
+ build_generated_clause_arg (Generated , Arg ) ->
385
+ {Expr , Guards } = elixir_utils :extract_guards (Arg ),
386
+ NewGuards = [build_generated_guard (Generated , Guard ) || Guard <- Guards ],
387
+ concat_guards (Generated , Expr , NewGuards ).
388
+
389
+ build_generated_guard (Generated , {{'.' , _ , _ } = Call , _ , Args }) ->
390
+ {Call , Generated , [build_generated_guard (Generated , Arg ) || Arg <- Args ]};
391
+ build_generated_guard (_ , Expr ) ->
392
+ Expr .
393
+
394
+ concat_guards (_Meta , Expr , []) ->
395
+ Expr ;
396
+ concat_guards (Meta , Expr , [Guard | Tail ]) ->
397
+ {'when' , Meta , [Expr , concat_guards (Meta , Guard , Tail )]}.
398
+
379
399
translate_with_do ([{'<-' , Meta , [Left , Expr ]} | Rest ], Do , Else , S ) ->
380
400
{Args , Guards } = elixir_utils :extract_guards (Left ),
381
401
{TExpr , SR } = elixir_erl_pass :translate (Expr , S ),
0 commit comments