Skip to content

Commit 8622da8

Browse files
committed
Refactored identifier creation so that name filtering is done in one place
1 parent ec26884 commit 8622da8

File tree

10 files changed

+42
-44
lines changed

10 files changed

+42
-44
lines changed

lib/elixir_script/translator.ex

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,10 @@ defmodule ElixirScript.Translator do
148148
end
149149

150150
defp do_translate({:&, _, [{:/, _, [{{:., _, [module_name, function_name]}, _, []}, arity]}]}, env) do
151-
function_name = Utils.filter_name(function_name)
152151
{ Capture.make_capture(module_name, function_name, arity, env), env }
153152
end
154153

155154
defp do_translate({:&, _, [{:/, _, [{function_name, _, _}, arity]}]}, env) do
156-
function_name = Utils.filter_name(function_name)
157155
{ Capture.make_capture(function_name, arity, env), env }
158156
end
159157

@@ -168,12 +166,10 @@ defmodule ElixirScript.Translator do
168166
end
169167

170168
defp do_translate({:@, _, [{name, _, [value]}]}, env) do
171-
name = Utils.filter_name(name)
172169
{ Defmodule.make_attribute(name, value, env), env }
173170
end
174171

175172
defp do_translate({:@, _, [{name, _, _}]}, env) do
176-
name = Utils.filter_name(name)
177173
{ Primitive.make_identifier(name), env }
178174
end
179175

@@ -451,15 +447,15 @@ defmodule ElixirScript.Translator do
451447
end
452448

453449
defp do_translate({function, _, [{:when, _, [{name, _, _params} | _guards] }, _] } = ast, env) when function in [:def, :defp] do
454-
Def.process_function(Utils.filter_name(name), [ast], env)
450+
Def.process_function(name, [ast], env)
455451
end
456452

457453
defp do_translate({function, _, [{name, _, params}, _]} = ast, env) when function in [:def, :defp] and is_atom(params) do
458-
Def.process_function(Utils.filter_name(name), [ast], env)
454+
Def.process_function(name, [ast], env)
459455
end
460456

461457
defp do_translate({function, _, [{name, _, _params}, _]} = ast, env) when function in [:def, :defp] do
462-
Def.process_function(Utils.filter_name(name), [ast], env)
458+
Def.process_function(name, [ast], env)
463459
end
464460

465461
defp do_translate({:defstruct, _, attributes}, env) do
@@ -555,15 +551,13 @@ defmodule ElixirScript.Translator do
555551
defp do_translate({ name, _, params }, env) when is_atom(params) do
556552
cond do
557553
ElixirScript.Translator.LexicalScope.has_var?(env, name) ->
558-
name = Utils.filter_name(name)
559554
{ Primitive.make_identifier(name), env }
560555
has_function?(env.module, {name, 0}) ->
561556
Function.make_function_call(name, [], env)
562557
ElixirScript.Translator.LexicalScope.find_module(env, {name, 0}) ->
563558
imported_module_name = ElixirScript.Translator.LexicalScope.find_module(env, {name, 0})
564559
Function.make_function_call(imported_module_name, name, params, env)
565560
true ->
566-
name = Utils.filter_name(name)
567561
{ Primitive.make_identifier(name), env }
568562
end
569563
end

lib/elixir_script/translator/kernel/def.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ defmodule ElixirScript.Translator.Def do
44
alias ElixirScript.Translator
55
alias ElixirScript.Translator.Function
66
alias ElixirScript.Translator.Utils
7+
alias ElixirScript.Translator.Primitive
78

89
def process_function(name, functions, env) do
910
{ result, _ } = Function.make_anonymous_function(functions, env, name)
1011

1112
declarator = JS.variable_declarator(
12-
JS.identifier(Utils.filter_name(name)),
13+
Primitive.make_identifier(name),
1314
result
1415
)
1516

lib/elixir_script/translator/kernel/defmodule.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ defmodule ElixirScript.Translator.Defmodule do
33
alias ESTree.Tools.Builder, as: JS
44
alias ElixirScript.Translator
55
alias ElixirScript.Translator.Utils
6-
alias ElixirScript.Translator.Function
76
alias ElixirScript.Translator.Def
87
alias ElixirScript.ModuleSystems
8+
alias ElixirScript.Translator.Primitive
99

1010
def make_module(ElixirScript.Temp, body, env) do
1111
{ body, _ } = translate_body(body, env)
@@ -44,7 +44,7 @@ defmodule ElixirScript.Translator.Defmodule do
4444
exported_object = JS.object_expression(
4545
make_defstruct_property(module, structs) ++
4646
Enum.map(exported_functions, fn({key, _value}) ->
47-
JS.property(JS.identifier(Utils.filter_name(key)), JS.identifier(Utils.filter_name(key)), :init, true)
47+
JS.property(Primitive.make_identifier(key), Primitive.make_identifier(key), :init, true)
4848
end)
4949
)
5050

@@ -179,7 +179,7 @@ defmodule ElixirScript.Translator.Defmodule do
179179

180180
def make_attribute(name, value, env) do
181181
declarator = JS.variable_declarator(
182-
JS.identifier(name),
182+
Primitive.make_identifier(name),
183183
ElixirScript.Translator.translate!(value, env)
184184
)
185185

lib/elixir_script/translator/kernel/defprotocol.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ defmodule ElixirScript.Translator.Defprotocol do
66
alias ElixirScript.Translator.Map
77
alias ElixirScript.Translator.Utils
88
alias ElixirScript.ModuleSystems
9+
alias ElixirScript.Translator.Primitive
910
require Logger
1011

1112
@doc """
@@ -24,7 +25,7 @@ defmodule ElixirScript.Translator.Defprotocol do
2425

2526
object = process_spec_functions(functions)
2627
|> Enum.map(fn({key, value}) ->
27-
Map.make_property(JS.identifier(Utils.filter_name(key)), value)
28+
Map.make_property(Primitive.make_identifier(key), value)
2829
end)
2930
|> JS.object_expression
3031

lib/elixir_script/translator/kernel/special_forms/capture.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ defmodule ElixirScript.Translator.Capture do
44
alias ESTree.Tools.Builder, as: JS
55
alias ElixirScript.Translator.PatternMatching
66
alias ElixirScript.Translator.Function
7+
alias ElixirScript.Translator.Primitive
78

89
def make_capture(function_name, arity, env) do
910
{ patterns, params, _ } = process_params(arity, env)
1011

1112
body = JS.block_statement([
1213
JS.return_statement(
1314
JS.call_expression(
14-
JS.identifier(function_name),
15+
Primitive.make_identifier(function_name),
1516
params
1617
)
1718
)

lib/elixir_script/translator/kernel/special_forms/fn.ex

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ defmodule ElixirScript.Translator.Function do
44
alias ElixirScript.Translator
55
alias ElixirScript.Translator.Utils
66
alias ElixirScript.Translator.PatternMatching
7+
alias ElixirScript.Translator.Primitive
78

89
@patterns JS.member_expression(
910
JS.member_expression(
@@ -165,14 +166,14 @@ defmodule ElixirScript.Translator.Function do
165166
end
166167

167168
def make_function_call(function_name, params, env) do
168-
{ Utils.make_call_expression(Utils.filter_name(function_name), params, env), env }
169+
{ Utils.make_call_expression(function_name, params, env), env }
169170
end
170171

171172
def make_function_call(module_name, function_name, params, env) when is_list(module_name) do
172173
call = JS.call_expression(
173174
JS.member_expression(
174175
Translator.translate!(module_name, env),
175-
JS.identifier(Utils.filter_name(function_name))
176+
Primitive.make_identifier(function_name)
176177
),
177178
Enum.map(params, &Translator.translate!(&1, env))
178179
)
@@ -182,7 +183,7 @@ defmodule ElixirScript.Translator.Function do
182183

183184
def make_function_call(module_name, function_name, params, env) do
184185
the_name = get_module_name_for_function(module_name, env)
185-
{ Utils.make_call_expression(the_name, Utils.filter_name(function_name), params, env), env }
186+
{ Utils.make_call_expression(the_name, function_name, params, env), env }
186187
end
187188

188189
def prepare_function_body(body, env) do

lib/elixir_script/translator/kernel/special_forms/primitive.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,13 @@ defmodule ElixirScript.Translator.Primitive do
4444
end
4545

4646
def make_identifier([ast]) do
47-
JS.identifier(ast)
47+
make_identifier(ast)
4848
end
4949

5050
def make_identifier(ast) do
51-
JS.identifier(ast)
51+
ast
52+
|> Utils.filter_name
53+
|> JS.identifier
5254
end
5355

5456
def make_literal(ast) when is_number(ast) or is_binary(ast) or is_boolean(ast) or is_nil(ast) do

lib/elixir_script/translator/pattern_matching.ex

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ defmodule ElixirScript.Translator.PatternMatching do
44
alias ESTree.Tools.Builder, as: JS
55
alias ElixirScript.Translator
66
alias ElixirScript.Translator.Primitive
7-
alias ElixirScript.Translator.Utils
87
alias ElixirScript.Translator.Map
98
alias ElixirScript.Translator.Struct
109
alias ElixirScript.Translator.Bitstring
@@ -167,7 +166,7 @@ defmodule ElixirScript.Translator.PatternMatching do
167166
end)
168167

169168
elements = Enum.map(elements, fn
170-
({:::, context, [{ variable, _, params }, options]}) when is_atom(params) ->
169+
({:::, context, [{ _, _, params }, options]}) when is_atom(params) ->
171170
Bitstring.make_bitstring_element({:::, context, [ElixirScript.Translator.PatternMatching, options]}, env)
172171
x ->
173172
Bitstring.make_bitstring_element(x, env)
@@ -255,14 +254,12 @@ defmodule ElixirScript.Translator.PatternMatching do
255254
end
256255

257256
defp do_build_match({:\\, _, [{name, _, _}, default]}, env) do
258-
name = Utils.filter_name(name)
259-
{ [parameter(Translator.translate!(default, env))], [JS.identifier(name)] }
257+
{ [parameter(Translator.translate!(default, env))], [Primitive.make_identifier(name)] }
260258
end
261259

262260

263261
defp do_build_match({name, _, _}, _) do
264-
name = Utils.filter_name(name)
265-
{ [parameter()], [JS.identifier(name)] }
262+
{ [parameter()], [Primitive.make_identifier(name)] }
266263
end
267264

268265
defp reduce_patterns(patterns) do
@@ -274,7 +271,7 @@ defmodule ElixirScript.Translator.PatternMatching do
274271

275272
defp unify(target, source, env) do
276273
{ patterns, params } = build_match([source], env)
277-
{ [capture(hd(patterns))], params ++ [JS.identifier(Utils.filter_name(target))] }
274+
{ [capture(hd(patterns))], params ++ [Primitive.make_identifier(target)] }
278275
end
279276

280277
end

lib/elixir_script/translator/utils.ex

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ defmodule ElixirScript.Translator.Utils do
22
@moduledoc false
33
alias ESTree.Tools.Builder, as: JS
44
alias ElixirScript.Translator
5+
alias ElixirScript.Translator.Primitive
56

67
@js_reserved_words [
78
:break,
@@ -62,17 +63,17 @@ defmodule ElixirScript.Translator.Utils do
6263
Enum.reduce(modules, nil, fn(x, ast) ->
6364
case ast do
6465
nil ->
65-
JS.member_expression(JS.identifier(x), nil, computed)
66+
JS.member_expression(Primitive.make_identifier(x), nil, computed)
6667
%ESTree.MemberExpression{ property: nil } ->
67-
%{ ast | property: JS.identifier(x) }
68+
%{ ast | property: Primitive.make_identifier(x) }
6869
_ ->
69-
JS.member_expression(ast, JS.identifier(x), computed)
70+
JS.member_expression(ast, Primitive.make_identifier(x), computed)
7071
end
7172
end)
7273
end
7374

7475
def make_module_expression_tree(module, _computed, _) when is_binary(module) or is_atom(module) do
75-
JS.identifier(module)
76+
Primitive.make_identifier(module)
7677
end
7778

7879
def make_module_expression_tree(module, _computed, env) do
@@ -95,7 +96,7 @@ defmodule ElixirScript.Translator.Utils do
9596

9697
def make_call_expression(function_name, params, env) do
9798
JS.call_expression(
98-
JS.identifier(function_name),
99+
Primitive.make_identifier(function_name),
99100
Enum.map(params, &Translator.translate!(&1, env))
100101
)
101102
end
@@ -106,37 +107,37 @@ defmodule ElixirScript.Translator.Utils do
106107
ast = make_module_expression_tree(modules, computed, env)
107108
JS.member_expression(
108109
ast,
109-
JS.identifier(function_name),
110+
Primitive.make_identifier(function_name),
110111
computed
111112
)
112113
modules when is_list(modules) and length(modules) == 1 ->
113114
JS.member_expression(
114-
JS.identifier(hd(modules)),
115-
JS.identifier(function_name),
115+
Primitive.make_identifier(hd(modules)),
116+
Primitive.make_identifier(function_name),
116117
computed
117118
)
118119
{{:., _, [_module_name, _function_name]}, _, _params } = ast ->
119120
JS.member_expression(
120121
Translator.translate!(ast, env),
121-
JS.identifier(function_name),
122+
Primitive.make_identifier(function_name),
122123
computed
123124
)
124125
{{:., _, [{:__aliases__, _, _}]}, _, _} = ast ->
125126
JS.member_expression(
126127
Translator.translate!(ast, env),
127-
JS.identifier(function_name),
128+
Primitive.make_identifier(function_name),
128129
computed
129130
)
130131
{:., _, _} = ast ->
131132
JS.member_expression(
132133
Translator.translate!(ast, env),
133-
JS.identifier(function_name),
134+
Primitive.make_identifier(function_name),
134135
computed
135136
)
136137
_ ->
137138
JS.member_expression(
138-
JS.identifier(module_name),
139-
JS.identifier(function_name),
139+
Primitive.make_identifier(module_name),
140+
Primitive.make_identifier(function_name),
140141
computed
141142
)
142143
end

test/translator/pattern_matching_test.exs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ defmodule ElixirScript.Translator.PatternMatching.Test do
102102
params = [{:%, [], [{:__aliases__, [alias: false], [:Hello]}, {:%{}, [], []}]}]
103103
result = PatternMatching.build_match(params, ElixirScript.Translator.LexicalScope.module_scope(ElixirScript.Temp, "temp.ex", ElixirScript.custom_env) )
104104
expected_result = {
105-
[PatternMatching.type(JS.identifier(:Hello), JS.object_expression([]))],
105+
[PatternMatching.type(JS.identifier("Hello"), JS.object_expression([]))],
106106
[]
107107
}
108108

@@ -113,7 +113,7 @@ defmodule ElixirScript.Translator.PatternMatching.Test do
113113
params = [{:%, [], [{:__aliases__, [alias: false], [:Hello]}, {:%{}, [], [key: 1]}]}]
114114
result = PatternMatching.build_match(params, ElixirScript.Translator.LexicalScope.module_scope(ElixirScript.Temp, "temp.ex", ElixirScript.custom_env) )
115115
expected_result = {
116-
[PatternMatching.type(JS.identifier(:Hello), JS.object_expression([
116+
[PatternMatching.type(JS.identifier("Hello"), JS.object_expression([
117117
Map.make_property(Translator.translate!(:key, ElixirScript.Translator.LexicalScope.module_scope(ElixirScript.Temp, "temp.ex", ElixirScript.custom_env) ), Translator.translate!(1, ElixirScript.Translator.LexicalScope.module_scope(ElixirScript.Temp, "temp.ex", ElixirScript.custom_env) ))
118118
]))
119119
],
@@ -127,7 +127,7 @@ defmodule ElixirScript.Translator.PatternMatching.Test do
127127
params = [{:%, [], [{:__aliases__, [alias: false], [:Hello]}, {:%{}, [], [key: {:key, [], Elixir }]}]}]
128128
result = PatternMatching.build_match(params, ElixirScript.Translator.LexicalScope.module_scope(ElixirScript.Temp, "temp.ex", ElixirScript.custom_env) )
129129
expected_result = {
130-
[PatternMatching.type(JS.identifier(:Hello), JS.object_expression([
130+
[PatternMatching.type(JS.identifier("Hello"), JS.object_expression([
131131
Map.make_property(Translator.translate!(:key, ElixirScript.Translator.LexicalScope.module_scope(ElixirScript.Temp, "temp.ex", ElixirScript.custom_env) ), PatternMatching.parameter)
132132
]))
133133
],
@@ -161,7 +161,7 @@ defmodule ElixirScript.Translator.PatternMatching.Test do
161161
params = [{:=, [], [{:%, [], [{:__aliases__, [alias: false], [:AStruct]}, {:%{}, [], []}]}, {:a, [], ElixirScript.Translator.Function.Test}]}]
162162
result = PatternMatching.build_match(params, ElixirScript.Translator.LexicalScope.module_scope(ElixirScript.Temp, "temp.ex", ElixirScript.custom_env) )
163163
expected_result = {
164-
[PatternMatching.capture(PatternMatching.type(JS.identifier(:AStruct), JS.object_expression([])))],
164+
[PatternMatching.capture(PatternMatching.type(JS.identifier("AStruct"), JS.object_expression([])))],
165165
[JS.identifier("a")]
166166
}
167167

0 commit comments

Comments
 (0)