@@ -22,13 +22,40 @@ defmodule ElixirScript.Compiler do
2222
2323 * `root`: Optional root for imports of FFI JavaScript modules. Defaults to `.`.
2424 """
25- @ spec compile ( atom | [ atom ] , [ ] ) :: nil
26- def compile ( entry_modules , opts \\ [ ] ) do
25+ @ spec compile ( atom | [ atom ] | binary , [ ] ) :: nil
26+ def compile ( path , opts \\ [ ] )
27+
28+ def compile ( path , opts ) when is_binary ( path ) do
29+ opts = build_compiler_options ( opts , [ ] )
30+ { :ok , pid } = ElixirScript.State . start_link ( )
31+
32+ path = if String . ends_with? ( path , ".ex" ) or String . ends_with? ( path , ".exs" ) do
33+ path
34+ else
35+ Path . join ( [ path , "**" , "*.{ex,exs}" ] )
36+ end
37+
38+ files = Path . wildcard ( path )
39+
40+ Kernel.ParallelCompiler . files ( files , [ each_module: & on_module_compile ( pid , & 1 , & 2 , & 3 ) ] )
41+
42+ entry_modules = pid
43+ |> ElixirScript.State . get_in_memory_modules
44+ |> Keyword . keys
45+
46+ do_compile ( entry_modules , pid , opts )
47+ end
48+
49+ def compile ( entry_modules , opts ) do
2750 opts = build_compiler_options ( opts , entry_modules )
2851 { :ok , pid } = ElixirScript.State . start_link ( )
2952
3053 entry_modules = List . wrap ( entry_modules )
3154
55+ do_compile ( entry_modules , pid , opts )
56+ end
57+
58+ defp do_compile ( entry_modules , pid , opts ) do
3259 ElixirScript.FindUsedModules . execute ( entry_modules , pid )
3360
3461 ElixirScript.FindUsedFunctions . execute ( entry_modules , pid )
@@ -54,4 +81,8 @@ defmodule ElixirScript.Compiler do
5481 options = default_options
5582 Map . put ( options , :module_formatter , ElixirScript.ModuleSystems.ES )
5683 end
84+
85+ defp on_module_compile ( pid , _file , module , beam ) do
86+ ElixirScript.State . put_in_memory_module ( pid , module , beam )
87+ end
5788end
0 commit comments