|
1 | 1 | -module(elixir_rewrite).
|
2 | 2 | -compile({inline, [inner_inline/4, inner_rewrite/5]}).
|
| 3 | +-compile(nowarn_shadow_vars). |
3 | 4 | -export([erl_to_ex/3, inline/3, rewrite/5, match/6, guard/6, format_error/1]).
|
4 | 5 | -include("elixir.hrl").
|
5 | 6 |
|
|
36 | 37 | -define(
|
37 | 38 | rewrite(ExMod, ExFun, ExArgs, ErlMod, ErlFun, ErlArgs),
|
38 | 39 | inner_rewrite(ex_to_erl, _Meta, ExMod, ExFun, ExArgs) -> {ErlMod, ErlFun, ErlArgs};
|
39 |
| - inner_rewrite(erl_to_ex, _Meta, ErlMod, ErlFun, ErlArgs) -> {ExMod, ExFun, ExArgs} |
| 40 | + inner_rewrite(erl_to_ex, _Meta, ErlMod, ErlFun, ErlArgs) -> {ExMod, ExFun, ExArgs, fun(ErlArgs) -> ExArgs end} |
40 | 41 | ).
|
41 | 42 |
|
42 | 43 | erl_to_ex(Mod, Fun, Args) ->
|
43 | 44 | case inner_inline(erl_to_ex, Mod, Fun, length(Args)) of
|
44 | 45 | false -> inner_rewrite(erl_to_ex, [], Mod, Fun, Args);
|
45 |
| - {ExMod, ExFun} -> {ExMod, ExFun, Args} |
| 46 | + {ExMod, ExFun} -> {ExMod, ExFun, Args, fun identity/1} |
46 | 47 | end.
|
47 | 48 |
|
48 | 49 | %% Inline rules
|
@@ -270,29 +271,32 @@ inner_rewrite(ex_to_erl, Meta, ?kernel, put_elem, [Tuple, Index, Value]) ->
|
270 | 271 | {erlang, setelement, [increment(Meta, Index), Tuple, Value]};
|
271 | 272 |
|
272 | 273 | inner_rewrite(erl_to_ex, _Meta, erlang, delete_element, [Index, Tuple]) when is_number(Index) ->
|
273 |
| - {?tuple, delete_at, [Tuple, Index - 1]}; |
| 274 | + {?tuple, delete_at, [Tuple, Index - 1], fun([Index, Tuple]) -> [Tuple, Index] end}; |
274 | 275 | inner_rewrite(erl_to_ex, _Meta, erlang, insert_element, [Index, Tuple, Term]) when is_number(Index) ->
|
275 |
| - {?tuple, insert_at, [Tuple, Index - 1, Term]}; |
| 276 | + {?tuple, insert_at, [Tuple, Index - 1, Term], fun([Index, Tuple, Term]) -> [Tuple, Index, Term] end}; |
276 | 277 | inner_rewrite(erl_to_ex, _Meta, erlang, element, [Index, Tuple]) when is_number(Index) ->
|
277 |
| - {?kernel, elem, [Tuple, Index - 1]}; |
278 |
| -inner_rewrite(erl_to_ex, _Meta, erlang, setelement, [Index, Tuple, Value]) when is_number(Index) -> |
279 |
| - {?kernel, put_elem, [Tuple, Index - 1, Value]}; |
| 278 | + {?kernel, elem, [Tuple, Index - 1], fun([Index, Tuple]) -> [Tuple, Index] end}; |
| 279 | +inner_rewrite(erl_to_ex, _Meta, erlang, setelement, [Index, Tuple, Term]) when is_number(Index) -> |
| 280 | + {?kernel, put_elem, [Tuple, Index - 1, Term], fun([Index, Tuple, Term]) -> [Tuple, Index, Term] end}; |
280 | 281 |
|
281 | 282 | inner_rewrite(erl_to_ex, _Meta, erlang, delete_element, [{{'.', _, [erlang, '+']}, _, [Index, 1]}, Tuple]) ->
|
282 |
| - {?tuple, delete_at, [Tuple, Index]}; |
| 283 | + {?tuple, delete_at, [Tuple, Index], fun([Index, Tuple]) -> [Tuple, Index] end}; |
283 | 284 | inner_rewrite(erl_to_ex, _Meta, erlang, insert_element, [{{'.', _, [erlang, '+']}, _, [Index, 1]}, Tuple, Term]) ->
|
284 |
| - {?tuple, insert_at, [Tuple, Index, Term]}; |
| 285 | + {?tuple, insert_at, [Tuple, Index, Term], fun([Index, Tuple, Term]) -> [Tuple, Index, Term] end}; |
285 | 286 | inner_rewrite(erl_to_ex, _Meta, erlang, element, [{{'.', _, [erlang, '+']}, _, [Index, 1]}, Tuple]) ->
|
286 |
| - {?kernel, elem, [Tuple, Index]}; |
287 |
| -inner_rewrite(erl_to_ex, _Meta, erlang, setelement, [{{'.', _, [erlang, '+']}, _, [Index, 1]}, Tuple, Value]) -> |
288 |
| - {?kernel, put_elem, [Tuple, Index, Value]}; |
| 287 | + {?kernel, elem, [Tuple, Index], fun([Index, Tuple]) -> [Tuple, Index] end}; |
| 288 | +inner_rewrite(erl_to_ex, _Meta, erlang, setelement, [{{'.', _, [erlang, '+']}, _, [Index, 1]}, Tuple, Term]) -> |
| 289 | + {?kernel, put_elem, [Tuple, Index, Term], fun([Index, Tuple, Term]) -> [Tuple, Index, Term] end}; |
289 | 290 |
|
290 | 291 | inner_rewrite(erl_to_ex, _Meta, erlang, 'orelse', [_, _] = Args) ->
|
291 |
| - {?kernel, 'or', Args}; |
| 292 | + {?kernel, 'or', Args, fun identity/1}; |
292 | 293 | inner_rewrite(erl_to_ex, _Meta, erlang, 'andalso', [_, _] = Args) ->
|
293 |
| - {?kernel, 'and', Args}; |
| 294 | + {?kernel, 'and', Args, fun identity/1}; |
294 | 295 |
|
295 |
| -inner_rewrite(_To, _Meta, Mod, Fun, Args) -> {Mod, Fun, Args}. |
| 296 | +inner_rewrite(ex_to_erl, _Meta, Mod, Fun, Args) -> {Mod, Fun, Args}; |
| 297 | +inner_rewrite(erl_to_ex, _Meta, Mod, Fun, Args) -> {Mod, Fun, Args, fun identity/1}. |
| 298 | + |
| 299 | +identity(Arg) -> Arg. |
296 | 300 |
|
297 | 301 | increment(_Meta, Number) when is_number(Number) ->
|
298 | 302 | Number + 1;
|
|
0 commit comments