1
1
-module (elixir_rewrite ).
2
- -compile ({inline , [inner_inline / 4 , inner_rewrite / 4 ]}).
2
+ -compile ({inline , [inner_inline / 4 , inner_rewrite / 5 ]}).
3
3
-export ([erl_to_ex /3 , inline /3 , rewrite /5 , match_rewrite /5 , guard_rewrite /5 , format_error /1 ]).
4
4
-include (" elixir.hrl" ).
5
5
34
34
35
35
-define (
36
36
rewrite (ExMod , ExFun , ExArgs , ErlMod , ErlFun , ErlArgs ),
37
- inner_rewrite (ex_to_erl , ExMod , ExFun , ExArgs ) -> {ErlMod , ErlFun , ErlArgs };
38
- inner_rewrite (erl_to_ex , ErlMod , ErlFun , ErlArgs ) -> {ExMod , ExFun , ExArgs }
37
+ inner_rewrite (ex_to_erl , _Meta , ExMod , ExFun , ExArgs ) -> {ErlMod , ErlFun , ErlArgs };
38
+ inner_rewrite (erl_to_ex , _Meta , ErlMod , ErlFun , ErlArgs ) -> {ExMod , ExFun , ExArgs }
39
39
).
40
40
41
41
erl_to_ex (Mod , Fun , Args ) ->
42
42
case inner_inline (erl_to_ex , Mod , Fun , length (Args )) of
43
- false -> inner_rewrite (erl_to_ex , Mod , Fun , Args );
43
+ false -> inner_rewrite (erl_to_ex , [], Mod , Fun , Args );
44
44
{ExMod , ExFun } -> {ExMod , ExFun , Args }
45
45
end .
46
46
@@ -228,7 +228,7 @@ rewrite(?string_chars, _, to_string, _, [String]) when is_binary(String) ->
228
228
rewrite (? string_chars , _ , to_string , _ , [{{'.' , _ , [? kernel , inspect ]}, _ , _ } = Call ]) ->
229
229
Call ;
230
230
rewrite (Receiver , DotMeta , Right , Meta , Args ) ->
231
- {EReceiver , ERight , EArgs } = inner_rewrite (ex_to_erl , Receiver , Right , Args ),
231
+ {EReceiver , ERight , EArgs } = inner_rewrite (ex_to_erl , DotMeta , Receiver , Right , Args ),
232
232
{{'.' , DotMeta , [EReceiver , ERight ]}, Meta , EArgs }.
233
233
234
234
? rewrite (? atom , to_string , [Arg ], erlang , atom_to_binary , [Arg , utf8 ]);
@@ -248,39 +248,39 @@ rewrite(Receiver, DotMeta, Right, Meta, Args) ->
248
248
? rewrite (? string , to_existing_atom , [Arg ], erlang , binary_to_existing_atom , [Arg , utf8 ]);
249
249
? rewrite (? tuple , duplicate , [Data , Size ], erlang , make_tuple , [Size , Data ]);
250
250
251
- inner_rewrite (ex_to_erl , ? tuple , delete_at , [Tuple , Index ]) ->
252
- {erlang , delete_element , [increment (Index ), Tuple ]};
253
- inner_rewrite (ex_to_erl , ? tuple , insert_at , [Tuple , Index , Term ]) ->
254
- {erlang , insert_element , [increment (Index ), Tuple , Term ]};
255
- inner_rewrite (ex_to_erl , ? kernel , elem , [Tuple , Index ]) ->
256
- {erlang , element , [increment (Index ), Tuple ]};
257
- inner_rewrite (ex_to_erl , ? kernel , put_elem , [Tuple , Index , Value ]) ->
258
- {erlang , setelement , [increment (Index ), Tuple , Value ]};
251
+ inner_rewrite (ex_to_erl , Meta , ? tuple , delete_at , [Tuple , Index ]) ->
252
+ {erlang , delete_element , [increment (Meta , Index ), Tuple ]};
253
+ inner_rewrite (ex_to_erl , Meta , ? tuple , insert_at , [Tuple , Index , Term ]) ->
254
+ {erlang , insert_element , [increment (Meta , Index ), Tuple , Term ]};
255
+ inner_rewrite (ex_to_erl , Meta , ? kernel , elem , [Tuple , Index ]) ->
256
+ {erlang , element , [increment (Meta , Index ), Tuple ]};
257
+ inner_rewrite (ex_to_erl , Meta , ? kernel , put_elem , [Tuple , Index , Value ]) ->
258
+ {erlang , setelement , [increment (Meta , Index ), Tuple , Value ]};
259
259
260
- inner_rewrite (erl_to_ex , erlang , delete_element , [Index , Tuple ]) when is_number (Index ) ->
260
+ inner_rewrite (erl_to_ex , _Meta , erlang , delete_element , [Index , Tuple ]) when is_number (Index ) ->
261
261
{? tuple , delete_at , [Tuple , Index - 1 ]};
262
- inner_rewrite (erl_to_ex , erlang , insert_element , [Index , Tuple , Term ]) when is_number (Index ) ->
262
+ inner_rewrite (erl_to_ex , _Meta , erlang , insert_element , [Index , Tuple , Term ]) when is_number (Index ) ->
263
263
{? tuple , insert_at , [Tuple , Index - 1 , Term ]};
264
- inner_rewrite (erl_to_ex , erlang , element , [Index , Tuple ]) when is_number (Index ) ->
264
+ inner_rewrite (erl_to_ex , _Meta , erlang , element , [Index , Tuple ]) when is_number (Index ) ->
265
265
{? kernel , elem , [Tuple , Index - 1 ]};
266
- inner_rewrite (erl_to_ex , erlang , setelement , [Index , Tuple , Value ]) when is_number (Index ) ->
266
+ inner_rewrite (erl_to_ex , _Meta , erlang , setelement , [Index , Tuple , Value ]) when is_number (Index ) ->
267
267
{? kernel , put_elem , [Tuple , Index - 1 , Value ]};
268
268
269
- inner_rewrite (erl_to_ex , erlang , delete_element , [{{'.' , _ , [erlang , '+' ]}, _ , [Index , 1 ]}, Tuple ]) ->
269
+ inner_rewrite (erl_to_ex , _Meta , erlang , delete_element , [{{'.' , _ , [erlang , '+' ]}, _ , [Index , 1 ]}, Tuple ]) ->
270
270
{? tuple , delete_at , [Tuple , Index ]};
271
- inner_rewrite (erl_to_ex , erlang , insert_element , [{{'.' , _ , [erlang , '+' ]}, _ , [Index , 1 ]}, Tuple , Term ]) ->
271
+ inner_rewrite (erl_to_ex , _Meta , erlang , insert_element , [{{'.' , _ , [erlang , '+' ]}, _ , [Index , 1 ]}, Tuple , Term ]) ->
272
272
{? tuple , insert_at , [Tuple , Index , Term ]};
273
- inner_rewrite (erl_to_ex , erlang , element , [{{'.' , _ , [erlang , '+' ]}, _ , [Index , 1 ]}, Tuple ]) ->
273
+ inner_rewrite (erl_to_ex , _Meta , erlang , element , [{{'.' , _ , [erlang , '+' ]}, _ , [Index , 1 ]}, Tuple ]) ->
274
274
{? kernel , elem , [Tuple , Index ]};
275
- inner_rewrite (erl_to_ex , erlang , setelement , [{{'.' , _ , [erlang , '+' ]}, _ , [Index , 1 ]}, Tuple , Value ]) ->
275
+ inner_rewrite (erl_to_ex , _Meta , erlang , setelement , [{{'.' , _ , [erlang , '+' ]}, _ , [Index , 1 ]}, Tuple , Value ]) ->
276
276
{? kernel , put_elem , [Tuple , Index , Value ]};
277
277
278
- inner_rewrite (_To , Mod , Fun , Args ) -> {Mod , Fun , Args }.
278
+ inner_rewrite (_To , _Meta , Mod , Fun , Args ) -> {Mod , Fun , Args }.
279
279
280
- increment (Number ) when is_number (Number ) ->
280
+ increment (_Meta , Number ) when is_number (Number ) ->
281
281
Number + 1 ;
282
- increment (Other ) ->
283
- {{'.' , [] , [erlang , '+' ]}, [] , [Other , 1 ]}.
282
+ increment (Meta , Other ) ->
283
+ {{'.' , Meta , [erlang , '+' ]}, Meta , [Other , 1 ]}.
284
284
285
285
% % Match rewrite
286
286
% %
@@ -312,7 +312,7 @@ static_append(_, _, _) -> throw(impossible).
312
312
% % it also verifies the resulting function is supported in
313
313
% % guard context - only certain BIFs and operators are.
314
314
guard_rewrite (Receiver , DotMeta , Right , Meta , Args ) ->
315
- case inner_rewrite (ex_to_erl , Receiver , Right , Args ) of
315
+ case inner_rewrite (ex_to_erl , DotMeta , Receiver , Right , Args ) of
316
316
{erlang , RRight , RArgs } ->
317
317
case allowed_guard (RRight , length (RArgs )) of
318
318
true -> {ok , {{'.' , DotMeta , [erlang , RRight ]}, Meta , RArgs }};
0 commit comments