Skip to content

Commit 4be0337

Browse files
committed
Still trying to get processes to work
1 parent 23a302d commit 4be0337

File tree

15 files changed

+59
-21
lines changed

15 files changed

+59
-21
lines changed

lib/elixir_script/lib/js.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,9 @@ defmodule ElixirScript.JS do
9191
```
9292
"""
9393
defexternal object_to_map(object, options)
94+
95+
@doc """
96+
Turns an Elixir function into a JavaScript one
97+
"""
98+
defexternal to_js_function(function)
9499
end

lib/elixir_script/passes/translate/clause.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ defmodule ElixirScript.Translate.Clause do
1919
|> return_last_statement
2020
#|> Function.update_last_call(state)
2121

22-
ast = Helpers.call(
22+
ast = Helpers.call_sync(
2323
J.member_expression(
2424
Helpers.patterns(),
2525
J.identifier("clause")

lib/elixir_script/passes/translate/form.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ defmodule ElixirScript.Translate.Form do
144144
end
145145

146146
def compile({:case, _, [condition, [do: clauses]]}, state) do
147-
ast = Helpers.call(
147+
ast = Helpers.call_gen(
148148
J.member_expression(
149149
Helpers.special_forms(),
150150
J.identifier("_case")
@@ -181,7 +181,7 @@ defmodule ElixirScript.Translate.Form do
181181
J.identifier("cond")
182182
)
183183

184-
ast = Helpers.call(
184+
ast = Helpers.call_gen(
185185
cond_function,
186186
processed_clauses
187187
)

lib/elixir_script/passes/translate/forms/for.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ defmodule ElixirScript.Translate.Forms.For do
1515
fun = args.fun
1616

1717

18-
expression = Helpers.call(
18+
expression = Helpers.call_sync(
1919
JS.member_expression(
2020
Helpers.patterns(),
2121
JS.identifier("clause")
@@ -30,7 +30,7 @@ defmodule ElixirScript.Translate.Forms.For do
3030
[JS.identifier("Elixir")]
3131
)
3232

33-
ast = Helpers.call(
33+
ast = Helpers.call_gen(
3434
JS.member_expression(
3535
Helpers.special_forms(),
3636
JS.identifier("_for")

lib/elixir_script/passes/translate/forms/js.ex

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,18 @@ defmodule ElixirScript.Translate.Forms.JS do
148148

149149
{ast, state}
150150
end
151+
152+
def compile({{:., _, [ElixirScript.JS, :to_js_function]}, _, [func]}, state) do
153+
ast = Helpers.call_sync(
154+
J.member_expression(
155+
Helpers.functions(),
156+
J.identifier("to_js_function")
157+
),
158+
[
159+
Form.compile!(func, state)
160+
]
161+
)
162+
163+
{ast, state}
164+
end
151165
end

lib/elixir_script/passes/translate/forms/match.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ defmodule ElixirScript.Translate.Forms.Match do
6565

6666
{ patterns, params, state } = Pattern.compile([left], state)
6767

68-
array_pattern = Helpers.declare(params, Helpers.call(
68+
array_pattern = Helpers.declare(params, Helpers.call_gen(
6969
J.member_expression(
7070
Helpers.patterns(),
71-
J.identifier("match")
71+
J.identifier("match_gen")
7272
),
7373
[hd(patterns), right_ast]
7474
))
@@ -112,10 +112,10 @@ defmodule ElixirScript.Translate.Forms.Match do
112112
{js_ast, state} = Enum.map_reduce(lefts, state, fn(left, state) ->
113113
{ patterns, params, state } = Pattern.compile([left], state)
114114

115-
array_pattern = Helpers.declare(params, Helpers.call(
115+
array_pattern = Helpers.declare(params, Helpers.call_gen(
116116
J.member_expression(
117117
Helpers.patterns(),
118-
J.identifier("match")
118+
J.identifier("match_gen")
119119
),
120120
[hd(patterns), J.identifier("__intermediate__")]
121121
))

lib/elixir_script/passes/translate/forms/try.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ defmodule ElixirScript.Translate.Forms.Try do
3939
JS.identifier(:null)
4040
end
4141

42-
js_ast = Helpers.call(
42+
js_ast = Helpers.call_gen(
4343
JS.member_expression(
4444
Helpers.special_forms(),
4545
JS.identifier("_try")
@@ -67,7 +67,7 @@ defmodule ElixirScript.Translate.Forms.Try do
6767
end)
6868

6969

70-
Helpers.call(
70+
Helpers.call_gen(
7171
JS.member_expression(
7272
Helpers.patterns(),
7373
JS.identifier("defmatchGen")

lib/elixir_script/passes/translate/forms/with.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ defmodule ElixirScript.Translate.Forms.With do
3333

3434
expressions = result.expressions
3535

36-
js_ast = Helpers.call(
36+
js_ast = Helpers.call_gen(
3737
JS.member_expression(
3838
Helpers.special_forms(),
3939
JS.identifier("_with")

lib/elixir_script/passes/translate/function.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ defmodule ElixirScript.Translate.Function do
9898
clauses
9999
|> Enum.map(&compile_clause(&1, state))
100100
|> Enum.map(fn {patterns, _params, guards, body} ->
101-
match_or_default_call = Helpers.call(
101+
match_or_default_call = Helpers.call_gen(
102102
J.member_expression(
103103
Helpers.patterns(),
104104
J.identifier("match_or_default_gen")

lib/elixir_script/passes/translate/helpers.ex

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ defmodule ElixirScript.Translate.Helpers do
3737
|> J.yield_expression(true)
3838
end
3939

40+
def call_gen(callee, arguments) do
41+
J.call_expression(
42+
callee,
43+
arguments
44+
)
45+
|> J.yield_expression(true)
46+
end
47+
4048
def arrow_function(params, body) do
4149
J.function_expression(
4250
params,

0 commit comments

Comments
 (0)