Skip to content

Commit 8c8cacc

Browse files
committed
Moved non-elixir standard library code to core module
1 parent 3685d26 commit 8c8cacc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+450
-366
lines changed

lib/elixir_script/pattern_matching/match.ex

Lines changed: 22 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,60 +8,47 @@ defmodule ElixirScript.PatternMatching.Match do
88
alias ElixirScript.Translator.Map
99
alias ElixirScript.Translator.Struct
1010

11-
@wildcard JS.member_expression(
12-
JS.identifier("Elixir"),
11+
@patterns JS.member_expression(
1312
JS.member_expression(
14-
JS.identifier(:Patterns),
15-
JS.identifier(:wildcard)
16-
)
13+
JS.identifier("Elixir"),
14+
JS.identifier("Core")
15+
),
16+
JS.identifier("Patterns")
17+
)
18+
19+
@wildcard JS.member_expression(
20+
@patterns,
21+
JS.identifier(:wildcard)
1722
)
1823

1924
@parameter JS.member_expression(
20-
JS.identifier("Elixir"),
21-
JS.member_expression(
22-
JS.identifier(:Patterns),
23-
JS.identifier(:variable)
24-
)
25+
@patterns,
26+
JS.identifier(:variable)
2527
)
2628

2729
@head_tail JS.member_expression(
28-
JS.identifier("Elixir"),
29-
JS.member_expression(
30-
JS.identifier(:Patterns),
31-
JS.identifier(:headTail)
32-
)
30+
@patterns,
31+
JS.identifier(:headTail)
3332
)
3433

3534
@starts_with JS.member_expression(
36-
JS.identifier("Elixir"),
37-
JS.member_expression(
38-
JS.identifier(:Patterns),
39-
JS.identifier(:startsWith)
40-
)
35+
@patterns,
36+
JS.identifier(:startsWith)
4137
)
4238

4339
@capture JS.member_expression(
44-
JS.identifier("Elixir"),
45-
JS.member_expression(
46-
JS.identifier(:Patterns),
47-
JS.identifier(:capture)
48-
)
40+
@patterns,
41+
JS.identifier(:capture)
4942
)
5043

5144
@bound JS.member_expression(
52-
JS.identifier("Elixir"),
53-
JS.member_expression(
54-
JS.identifier(:Patterns),
55-
JS.identifier(:bound)
56-
)
45+
@patterns,
46+
JS.identifier(:bound)
5747
)
5848

5949
@_type JS.member_expression(
60-
JS.identifier("Elixir"),
61-
JS.member_expression(
62-
JS.identifier(:Patterns),
63-
JS.identifier(:type)
64-
)
50+
@patterns,
51+
JS.identifier(:type)
6552
)
6653

6754
def wildcard() do

lib/elixir_script/translator/assignment.ex

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@ defmodule ElixirScript.Translator.Assignment do
1212
JS.array_pattern(params),
1313
JS.call_expression(
1414
JS.member_expression(
15-
JS.identifier("Elixir"),
1615
JS.member_expression(
17-
JS.identifier("Patterns"),
18-
JS.identifier("match")
19-
)
16+
JS.member_expression(
17+
JS.identifier("Elixir"),
18+
JS.identifier("Core")
19+
),
20+
JS.identifier("Patterns")
21+
),
22+
JS.identifier("match")
2023
),
2124
[hd(patterns), Translator.translate(right, env)]
2225
)
@@ -32,7 +35,7 @@ defmodule ElixirScript.Translator.Assignment do
3235
{:{}, _, _} ->
3336
make_ref(array_pattern, params, "tuple")
3437
_ ->
35-
array_pattern
38+
array_pattern
3639
end
3740
end
3841

@@ -52,10 +55,10 @@ defmodule ElixirScript.Translator.Assignment do
5255
JS.identifier(type)
5356
),
5457
params
55-
)
58+
)
5659
)
5760

5861
ref_declaration = JS.variable_declaration([ref_declarator], :let)
59-
%ElixirScript.Translator.Group{ body: [array_pattern, ref_declaration] }
62+
%ElixirScript.Translator.Group{ body: [array_pattern, ref_declaration] }
6063
end
61-
end
64+
end
Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,51 @@
11
defmodule ElixirScript.Translator.Bitstring do
22
@moduledoc false
3-
alias ESTree.Tools.Builder
3+
alias ESTree.Tools.Builder, as: JS
44
alias ElixirScript.Translator
55
alias ElixirScript.Translator.Primitive
66

7-
7+
88
def make_bitstring(elements, env) do
9-
Builder.call_expression(
10-
Builder.member_expression(
9+
JS.call_expression(
10+
JS.member_expression(
1111
Primitive.special_forms(),
12-
Builder.identifier("bitstring")
12+
JS.identifier("bitstring")
1313
),
1414
Enum.map(elements, &make_bitstring_element(&1, env))
1515
)
1616
end
1717

1818
defp make_bitstring_element(element, env) when is_number(element) do
19-
do_make_bitstring_element({:integer, Translator.translate(element, env)})
19+
do_make_bitstring_element({:integer, Translator.translate(element, env)})
2020
end
2121

2222
defp make_bitstring_element(element, env) when is_binary(element) do
23-
do_make_bitstring_element({:binary, Translator.translate(element, env)})
23+
do_make_bitstring_element({:binary, Translator.translate(element, env)})
2424
end
2525

2626
defp make_bitstring_element({:<<>>, [], elements}, env) do
2727
make_bitstring(elements, env)
2828
end
2929

3030
defp make_bitstring_element({:::, _, [element, {type, _, _}]}, env) when type in [:integer, :float, :bitstring, :bits, :binary, :bytes, :utf8, :utf16, :utf32] do
31-
do_make_bitstring_element({type, Translator.translate(element, env)})
31+
do_make_bitstring_element({type, Translator.translate(element, env)})
3232
end
3333

3434
defp make_bitstring_element({:::, _, [element, {type, _, params}]}, env) when type in [:size, :unit] do
35-
do_make_bitstring_element({type, Translator.translate(element, env), Enum.map(params, &Translator.translate(&1, env))})
35+
do_make_bitstring_element({type, Translator.translate(element, env), Enum.map(params, &Translator.translate(&1, env))})
3636
end
3737

3838
defp make_bitstring_element({:::, _, [element, {:*, _, [size, unit]}]}, env) do
3939
size_ast = do_make_bitstring_element({:size, Translator.translate(element, env), [Translator.translate(size, env)]})
40-
do_make_bitstring_element({:unit, size_ast, [Translator.translate(unit, env)]})
40+
do_make_bitstring_element({:unit, size_ast, [Translator.translate(unit, env)]})
4141
end
4242

4343
defp make_bitstring_element({:::, _, [element, {:-, _, types}]}, env) do
44-
handle_type_adjectives({:-, [], types}, Translator.translate(element, env), env)
44+
handle_type_adjectives({:-, [], types}, Translator.translate(element, env), env)
4545
end
4646

4747
defp make_bitstring_element({:::, _, [element, size]}, env) do
48-
do_make_bitstring_element({:size, Translator.translate(element, env), [Translator.translate(size, env)]})
48+
do_make_bitstring_element({:size, Translator.translate(element, env), [Translator.translate(size, env)]})
4949
end
5050

5151
defp handle_type_adjectives({:-, _, types}, ast, env) do
@@ -64,28 +64,38 @@ defmodule ElixirScript.Translator.Bitstring do
6464
end)
6565
end
6666

67+
defp bitstring_class() do
68+
JS.member_expression(
69+
JS.member_expression(
70+
JS.identifier("Elixir"),
71+
JS.identifier("Core")
72+
),
73+
JS.identifier("BitString")
74+
)
75+
end
76+
6777
defp do_make_bitstring_element({type, ast}) do
68-
Builder.call_expression(
69-
Builder.member_expression(
70-
Builder.identifier("BitString"),
71-
Builder.identifier(type)
78+
JS.call_expression(
79+
JS.member_expression(
80+
bitstring_class,
81+
JS.identifier(type)
7282
),
7383
[
7484
ast
7585
]
76-
)
86+
)
7787
end
7888

7989
defp do_make_bitstring_element({type, ast, params}) when is_list(params) do
80-
Builder.call_expression(
81-
Builder.member_expression(
82-
Builder.identifier("BitString"),
83-
Builder.identifier(type)
90+
JS.call_expression(
91+
JS.member_expression(
92+
bitstring_class,
93+
JS.identifier(type)
8494
),
8595
[
8696
ast
8797
] ++ params
88-
)
98+
)
8999
end
90100

91101
def make_interpolated_string(elements, env) do
@@ -98,19 +108,19 @@ defmodule ElixirScript.Translator.Bitstring do
98108
end
99109
end)
100110

101-
do_make_interpolated_string(tl(translated_elements), hd(translated_elements), env)
111+
do_make_interpolated_string(tl(translated_elements), hd(translated_elements), env)
102112
end
103113

104114
def do_make_interpolated_string([], ast, _) do
105115
ast
106116
end
107117

108118
def do_make_interpolated_string(elements, ast, env) do
109-
Builder.binary_expression(
119+
JS.binary_expression(
110120
:+,
111121
ast,
112122
do_make_interpolated_string(tl(elements), hd(elements), env)
113123
)
114124
end
115125

116-
end
126+
end

lib/elixir_script/translator/function.ex

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,17 @@ defmodule ElixirScript.Translator.Function do
66
alias ElixirScript.PatternMatching.Match
77
alias ElixirScript.Preprocess.Variables
88

9+
@patterns JS.member_expression(
10+
JS.member_expression(
11+
JS.identifier("Elixir"),
12+
JS.identifier("Core")
13+
),
14+
JS.identifier("Patterns")
15+
)
16+
917
@standard_libs [
1018
:Patterns, :Kernel, :Atom, :Enum, :Integer, :JS,
11-
:List, :Range, :Tuple, :Agent, :Keyword, :BitString,
19+
:List, :Range, :Tuple, :Agent, :Keyword,
1220
:Base, :String, :Bitwise, :Collectable, :Enumerable,
1321
:Inspect, :Map, :MapSet, :Set, :VirtualDom, :View
1422
]
@@ -103,11 +111,8 @@ defmodule ElixirScript.Translator.Function do
103111
def make_defmatch(clauses) do
104112
JS.call_expression(
105113
JS.member_expression(
106-
JS.identifier("Elixir"),
107-
JS.member_expression(
108-
JS.identifier("Patterns"),
109-
JS.identifier("defmatch")
110-
)
114+
@patterns,
115+
JS.identifier("defmatch")
111116
),
112117
clauses
113118
)
@@ -143,11 +148,8 @@ defmodule ElixirScript.Translator.Function do
143148
def do_make_function_clause(patterns, params, body, guard_body) do
144149
JS.call_expression(
145150
JS.member_expression(
146-
JS.identifier("Elixir"),
147-
JS.member_expression(
148-
JS.identifier("Patterns"),
149-
JS.identifier("make_case")
150-
)
151+
@patterns,
152+
JS.identifier("make_case")
151153
),
152154
[
153155
JS.array_expression(patterns),
@@ -160,11 +162,8 @@ defmodule ElixirScript.Translator.Function do
160162
def do_make_function_clause(patterns, params, body) do
161163
JS.call_expression(
162164
JS.member_expression(
163-
JS.identifier("Elixir"),
164-
JS.member_expression(
165-
JS.identifier("Patterns"),
166-
JS.identifier("make_case")
167-
)
165+
@patterns,
166+
JS.identifier("make_case")
168167
),
169168
[
170169
JS.array_expression(patterns),
@@ -192,11 +191,11 @@ defmodule ElixirScript.Translator.Function do
192191

193192
JS.call_expression(
194193
JS.member_expression(
195-
JS.identifier("Elixir"),
196194
JS.member_expression(
197-
JS.identifier("JS"),
198-
JS.identifier("call_property")
199-
)
195+
JS.identifier("Elixir"),
196+
JS.identifier("Core")
197+
),
198+
JS.identifier("call_property")
200199
),
201200
[
202201
Utils.make_module_expression_tree(the_name, false, env),

lib/elixir_script/translator/primitive.ex

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,6 @@ defmodule ElixirScript.Translator.Primitive do
3232
)
3333
end
3434

35-
def make_wildcard() do
36-
JS.member_expression(
37-
JS.identifier("fun"),
38-
JS.identifier("wildcard")
39-
)
40-
end
41-
4235
def make_identifier({:__aliases__, _, aliases}) do
4336
Utils.make_module_expression_tree(aliases, false, __ENV__)
4437
end

lib/elixir_script/translator/protocol.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,10 @@ defmodule ElixirScript.Translator.Protocol do
207207

208208
defp map_to_js({:__aliases__, _, [:BitString]}) do
209209
JS.member_expression(
210-
JS.identifier(:Elixir),
210+
JS.member_expression(
211+
JS.identifier(:Elixir),
212+
JS.identifier(:Core)
213+
),
211214
JS.identifier(:BitString)
212215
)
213216
end

src/javascript/elixir.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
import {ProcessSystem} from './lib/core';
1+
import * as Core from "./lib/core";
22

3-
self.processes = self.processes || new ProcessSystem();
3+
self.processes = self.processes || new Core.ProcessSystem();
44

5-
export { Core } from './lib/core';
5+
export Core;
66
export { default as Patterns } from './lib/patterns/patterns';
7-
export { default as BitString } from './lib/bit_string';
87
export { default as Kernel } from './lib/kernel';
98
export { default as Atom } from './lib/atom';
109
export { default as Enum } from './lib/enum';
1110
export { default as Integer } from './lib/integer';
12-
export { default as JS } from './lib/js';
1311
export { default as List } from './lib/list';
1412
export { default as Range } from './lib/range';
1513
export { default as Tuple } from './lib/tuple';
@@ -24,6 +22,5 @@ export { default as Inspect } from './lib/inspect';
2422
export { default as Map } from './lib/map';
2523
export { default as Set } from './lib/set';
2624
export { default as MapSet } from './lib/map_set';
27-
export { IntegerType, FloatType } from './lib/protocol';
2825
export { default as VirtualDOM } from './lib/virtual-dom';
2926
export { default as View } from './lib/view';

0 commit comments

Comments
 (0)