@@ -48,11 +48,21 @@ defmodule ElixirScript.Translate.Module do
4848 end )
4949 end
5050
51+ #we combine our function arities
52+ combined_defs = used_defs
53+ |> Enum . sort ( fn { { name1 , arity1 } , _ , _ , _ } , { { name2 , arity2 } , _ , _ , _ } -> "#{ name1 } #{ arity1 } " < "#{ name2 } #{ arity2 } " end )
54+ |> Enum . group_by ( fn { { name , _ } , _ , _ , _ } -> name end )
55+ |> Enum . map ( fn { group , funs } ->
56+ { _ , type , _ , _ } = hd ( funs )
57+ Enum . reduce ( funs , { { group , nil } , type , [ ] , [ ] } , fn { _ , _ , _ , clauses } , { name , type , context , acc_clauses } ->
58+ { name , type , context , acc_clauses ++ clauses }
59+ end )
60+ end )
5161
52- { compiled_functions , _ } = used_defs
62+ { compiled_functions , _ } = combined_defs
5363 |> Enum . map_reduce ( state , & Function . compile ( & 1 , & 2 ) )
5464
55- exports = make_exports ( used_defs )
65+ exports = make_exports ( combined_defs )
5666
5767 js_ast = ElixirScript.ModuleSystems.Namespace . build (
5868 module ,
@@ -67,7 +77,7 @@ defmodule ElixirScript.Translate.Module do
6777 defp make_exports ( reachable_defs ) do
6878 exports = Enum . reduce ( reachable_defs , [ ] , fn
6979 { { name , arity } , :def , _ , _ } , list ->
70- function_name = ElixirScript.Translator.Identifier . make_function_name ( name , arity )
80+ function_name = ElixirScript.Translator.Identifier . make_identifier ( name )
7181 list ++ [ J . property ( function_name , function_name , :init , true ) ]
7282 _ , list ->
7383 list
0 commit comments