11-module (elixir_rewrite ).
2- -compile ({inline , [inner_inline / 4 , inner_rewrite / 4 ]}).
2+ -compile ({inline , [inner_inline / 4 , inner_rewrite / 5 ]}).
33-export ([erl_to_ex /3 , inline /3 , rewrite /5 , match_rewrite /5 , guard_rewrite /5 , format_error /1 ]).
44-include (" elixir.hrl" ).
55
3434
3535-define (
3636 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 }
3939).
4040
4141erl_to_ex (Mod , Fun , Args ) ->
4242 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 );
4444 {ExMod , ExFun } -> {ExMod , ExFun , Args }
4545 end .
4646
@@ -228,7 +228,7 @@ rewrite(?string_chars, _, to_string, _, [String]) when is_binary(String) ->
228228rewrite (? string_chars , _ , to_string , _ , [{{'.' , _ , [? kernel , inspect ]}, _ , _ } = Call ]) ->
229229 Call ;
230230rewrite (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 ),
232232 {{'.' , DotMeta , [EReceiver , ERight ]}, Meta , EArgs }.
233233
234234? rewrite (? atom , to_string , [Arg ], erlang , atom_to_binary , [Arg , utf8 ]);
@@ -248,39 +248,39 @@ rewrite(Receiver, DotMeta, Right, Meta, Args) ->
248248? rewrite (? string , to_existing_atom , [Arg ], erlang , binary_to_existing_atom , [Arg , utf8 ]);
249249? rewrite (? tuple , duplicate , [Data , Size ], erlang , make_tuple , [Size , Data ]);
250250
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 ]};
259259
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 ) ->
261261 {? 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 ) ->
263263 {? 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 ) ->
265265 {? 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 ) ->
267267 {? kernel , put_elem , [Tuple , Index - 1 , Value ]};
268268
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 ]) ->
270270 {? 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 ]) ->
272272 {? 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 ]) ->
274274 {? 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 ]) ->
276276 {? kernel , put_elem , [Tuple , Index , Value ]};
277277
278- inner_rewrite (_To , Mod , Fun , Args ) -> {Mod , Fun , Args }.
278+ inner_rewrite (_To , _Meta , Mod , Fun , Args ) -> {Mod , Fun , Args }.
279279
280- increment (Number ) when is_number (Number ) ->
280+ increment (_Meta , Number ) when is_number (Number ) ->
281281 Number + 1 ;
282- increment (Other ) ->
283- {{'.' , [] , [erlang , '+' ]}, [] , [Other , 1 ]}.
282+ increment (Meta , Other ) ->
283+ {{'.' , Meta , [erlang , '+' ]}, Meta , [Other , 1 ]}.
284284
285285% % Match rewrite
286286% %
@@ -312,7 +312,7 @@ static_append(_, _, _) -> throw(impossible).
312312% % it also verifies the resulting function is supported in
313313% % guard context - only certain BIFs and operators are.
314314guard_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
316316 {erlang , RRight , RArgs } ->
317317 case allowed_guard (RRight , length (RArgs )) of
318318 true -> {ok , {{'.' , DotMeta , [erlang , RRight ]}, Meta , RArgs }};
0 commit comments