|
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