@@ -634,6 +634,27 @@ translate_remote(maps, merge, Meta, [Map1, Map2], S) ->
634634 {[TMap1 , TMap2 ], TS } ->
635635 {{call , Ann , {remote , Ann , {atom , Ann , maps }, {atom , Ann , merge }}, [TMap1 , TMap2 ]}, TS }
636636 end ;
637+ translate_remote ('Elixir.String' , to_existing_atom , Meta , [String , List ], S ) ->
638+ Ann = ? ann (Meta ),
639+ {[TString , TList ], TS } = translate_args ([String , List ], Ann , S ),
640+
641+ case is_list (List ) andalso lists :all (fun is_atom /1 , List ) of
642+ true ->
643+ Generated = erl_anno :set_generated (true , Ann ),
644+ LastClause = {clause , Generated ,
645+ [{var , Generated , '_' }],
646+ [],
647+ [{call , Ann , {remote , Ann , {atom , Ann , 'Elixir.String' }, {atom , Ann , '__to_existing_atom__' }}, [TString , TList ]}]},
648+ Clauses = [
649+ {clause , Generated ,
650+ [{bin , Generated , [{bin_element , Generated , {string , Generated , atom_to_list (Atom )}, default , default }]}],
651+ [],
652+ [{atom , Ann , Atom }]}
653+ || Atom <- List ] ++ [LastClause ],
654+ {{'case' , Generated , TString , Clauses }, TS };
655+ false ->
656+ {{call , Ann , {remote , Ann , {atom , Ann , 'Elixir.String' }, {atom , Ann , to_existing_atom }}, [TString , TList ]}, TS }
657+ end ;
637658translate_remote (Left , Right , Meta , Args , S ) ->
638659 Ann = ? ann (Meta ),
639660
0 commit comments