@@ -67,7 +67,7 @@ translate(Meta, Args, Return, S) ->
67
67
end ,
68
68
69
69
{TCases , SC } = translate_gen (Meta , Cases , [], SI ),
70
- {TExpr , SE } = elixir_translator :translate (Expr , SC ),
70
+ {TExpr , SE } = elixir_translator :translate (wrap_expr ( Expr , TInto ) , SC ),
71
71
SF = elixir_scope :mergec (SI , SE ),
72
72
73
73
case comprehension_expr (TInto , TExpr ) of
@@ -77,6 +77,11 @@ translate(Meta, Args, Return, S) ->
77
77
build_into (Ann , TCases , TIntoExpr , TInto , Var , Acc , SF )
78
78
end .
79
79
80
+ % % In case we have no return, we wrap the expression
81
+ % % in a block that returns nil.
82
+ wrap_expr (Expr , false ) -> {'__block__' , [], [Expr , nil ]};
83
+ wrap_expr (Expr , _ ) -> Expr .
84
+
80
85
translate_gen (ForMeta , [{'<-' , Meta , [Left , Right ]}|T ], Acc , S ) ->
81
86
{TLeft , TRight , TFilters , TT , TS } = translate_gen (Meta , Left , Right , T , S ),
82
87
TAcc = [{enum , Meta , TLeft , TRight , TFilters }|Acc ],
@@ -253,10 +258,7 @@ no_var_expr({var, Ann, _}) ->
253
258
{var , Ann , '_' }.
254
259
255
260
build_comprehension (Ann , Clauses , Expr , false ) ->
256
- {block , Ann , [
257
- build_comprehension (Ann , Clauses , Expr , {nil , Ann }),
258
- {nil , Ann }
259
- ]};
261
+ {lc , Ann , Expr , comprehension_clause (Clauses )};
260
262
build_comprehension (Ann , Clauses , Expr , Into ) ->
261
263
{comprehension_kind (Into ), Ann , Expr , comprehension_clause (Clauses )}.
262
264
0 commit comments