@@ -19,6 +19,9 @@ defmodule ElixirScript.Translate.Function do
1919 end
2020
2121 def compile ( { :fn , _ , clauses } , state ) do
22+ anonymous? = Map . get ( state , :anonymous_fn , false )
23+
24+ state = Map . put ( state , :anonymous_fn , true )
2225 clauses = compile_clauses ( clauses , state )
2326
2427 arg_matches_declarator = J . variable_declarator (
@@ -61,11 +64,14 @@ defmodule ElixirScript.Translate.Function do
6164 ] )
6265 )
6366
67+ state = Map . put ( state , :anonymous_fn , anonymous? )
6468 { function_dec , state }
6569 end
6670
6771 def compile ( { { name , arity } , _type , _ , clauses } , state ) do
6872 state = Map . put ( state , :function , { name , arity } )
73+ |> Map . put ( :anonymous_fn , false )
74+
6975 clauses = compile_clauses ( clauses , state )
7076
7177 arg_matches_declarator = J . variable_declarator (
@@ -194,19 +200,23 @@ defmodule ElixirScript.Translate.Function do
194200 { ast , state }
195201 end
196202
197- defp update_last_call ( clause_body , % { function: { name , _ } } ) do
203+ defp update_last_call ( clause_body , % { function: { name , _ } , anonymous_fn: anonymous? } ) do
198204 last_item = List . last ( clause_body )
199205 function_name = ElixirScript.Translate.Identifier . make_function_name ( name )
200206
201207 case last_item do
202208 % ESTree.ReturnStatement { argument: % ESTree.CallExpression { callee: ^ function_name , arguments: arguments } } ->
203- new_last_item = J . return_statement (
204- recurse (
205- recur_bind ( arguments )
209+ if anonymous? do
210+ clause_body
211+ else
212+ new_last_item = J . return_statement (
213+ recurse (
214+ recur_bind ( arguments )
215+ )
206216 )
207- )
208217
209- List . replace_at ( clause_body , length ( clause_body ) - 1 , new_last_item )
218+ List . replace_at ( clause_body , length ( clause_body ) - 1 , new_last_item )
219+ end
210220 _ ->
211221 clause_body
212222 end
0 commit comments