Skip to content

Commit 6bf134c

Browse files
committed
Added more rewriter function heads
1 parent 02070ce commit 6bf134c

4 files changed

Lines changed: 33 additions & 3 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ fprof.trace
1717
index.js
1818
/doc
1919
/bench/snapshots
20+
.tern-port

lib/elixir_script/translator/rewriter.ex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,25 @@ defmodule ElixirScript.Translator.Rewriter do
297297
quote do: true
298298
end
299299

300+
def rewrite({{:., _, [:erlang, :make_tuple]}, _, [size, data]}) do
301+
quote do: JS.new(Elixir.Core.Tuple, List.duplicate(unquote(size), unquote(data)))
302+
end
303+
304+
def rewrite({{:., _, [:erlang, :insert_element]}, _, [index, tuple, term]}) do
305+
quote do: unquote(tuple).put_elem(unquote(index) - 1, unquote(term))
306+
end
307+
308+
def rewrite({{:., _, [:erlang, :tuple_to_list]}, _, [tuple]}) do
309+
quote do: unquote(tuple).values
310+
end
311+
312+
def rewrite({{:., _, [:erlang, :append_element]}, _, [tuple, value]}) do
313+
quote do: unquote(tuple).put_elem(unquote(tuple).length, unquote(value))
314+
end
315+
316+
def rewrite({{:., _, [:erlang, :delete_element]}, _, [index, tuple]}) do
317+
quote do: unquote(tuple).remove_elem(unquote(index))
318+
end
300319

301320
def rewrite({{:., _, [:lists, :map]}, _, [fun, list]}) do
302321
quote do: unquote(list).map(unquote(fun))

src/javascript/lib/core/primitives.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,20 @@ class Tuple {
3030
}
3131

3232
put_elem(index, elem){
33-
let new_values = this.values.concat([]);
34-
new_values.splice(index, 0, elem);
33+
if(index === this.length){
34+
let new_values = this.values.concat([elem]);
3535
return new Tuple(...new_values);
36+
}
37+
38+
let new_values = this.values.concat([]);
39+
new_values.splice(index, 0, elem);
40+
return new Tuple(...new_values);
41+
}
42+
43+
remove_elem(index){
44+
let new_values = this.values.concat([]);
45+
new_values.splice(index, 1);
46+
return new Tuple(...new_values);
3647
}
3748

3849
}

test/elixir_script_test.exs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,5 +181,4 @@ defmodule ElixirScript.Test do
181181
};
182182
""", hd(js_code)
183183
end
184-
185184
end

0 commit comments

Comments
 (0)