diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d404699..b21876a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Make sure not to add underscores to erlang functions +- Make sure any variable names that are javascript keywords are handled properly ## [0.30.0] - 2017-08-15 diff --git a/lib/elixir_script/passes/translate/form.ex b/lib/elixir_script/passes/translate/form.ex index 767634bf..7b4d30d0 100644 --- a/lib/elixir_script/passes/translate/form.ex +++ b/lib/elixir_script/passes/translate/form.ex @@ -9,6 +9,39 @@ defmodule ElixirScript.Translate.Form do alias ElixirScript.Translate.Clause require Logger + @js_reserved_words [ + :break, + :case, + :class, + :const, + :continue, + :debugger, + :default, + :delete, + :do, + :else, + :export, + :extends, + :finally, + :function, + :if, + :import, + :in, + :instanceof, + :new, + :return, + :super, + :switch, + :throw, + :try, + :typeof, + :var, + :void, + :while, + :with, + :yield + ] + def compile!(ast, state) do {js_ast, _} = compile(ast, state) @@ -369,10 +402,10 @@ defmodule ElixirScript.Translate.Form do end end - def compile({:default, meta, _}, state) do + def compile({var, meta, _}, state) when var in @js_reserved_words do counter = Pattern.get_counter(meta) - var = :__default__ + var = String.to_atom("__#{var}__") var = Pattern.get_variable_name(to_string(var) <> counter, state) { ElixirScript.Translate.Identifier.make_identifier(var), state } end