@@ -257,11 +257,11 @@ translate({{'.', _, [Expr]}, Meta, Args}, S) when is_list(Args) ->
257
257
% % Literals
258
258
259
259
translate (List , S ) when is_list (List ) ->
260
- translate_list (List , S , []);
260
+ translate_list (List , S , [], 0 );
261
261
262
262
translate ({Left , Right }, S ) ->
263
- {TArgs , SE } = translate_args ([Left , Right ], S ),
264
- {{tuple , 0 , TArgs }, SE };
263
+ {[ TLeft , TRight ] , SE } = translate_args ([Left , Right ], S ),
264
+ {{tuple , binary_ann ( TLeft , TRight ), [ TLeft , TRight ] }, SE };
265
265
266
266
translate (Other , S ) ->
267
267
{elixir_erl :elixir_to_erl (Other ), S }.
@@ -274,20 +274,32 @@ translate_case(Meta, Expr, Opts, S) ->
274
274
{TClauses , SC } = elixir_erl_clauses :clauses (Clauses , SE ),
275
275
{{'case' , ? ann (Meta ), TExpr , TClauses }, SC }.
276
276
277
- translate_list ([{'|' , _ , [_ , _ ]= Args }], Acc , List ) ->
277
+ translate_list ([{'|' , _ , [_ , _ ]= Args }], Acc , List , Ann ) ->
278
278
{[TLeft , TRight ], TAcc } = lists :mapfoldl (fun translate /2 , Acc , Args ),
279
- {build_list ([TLeft | List ], TRight ), TAcc };
280
- translate_list ([H | T ], Acc , List ) ->
279
+ TAnn = if Ann == 0 -> binary_ann (TLeft , TRight ); true -> Ann end ,
280
+ {build_list ([TLeft | List ], TRight , TAnn ), TAcc };
281
+ translate_list ([H | T ], Acc , List , Ann ) ->
281
282
{TH , TAcc } = translate (H , Acc ),
282
- translate_list (T , TAcc , [TH | List ]);
283
- translate_list ([], Acc , List ) ->
284
- {build_list (List , {nil , 0 }), Acc }.
285
-
286
- build_list ([H | T ], Acc ) ->
287
- build_list (T , {cons , 0 , H , Acc });
288
- build_list ([], Acc ) ->
283
+ TAnn = if Ann == 0 -> element (2 , TH ); true -> Ann end ,
284
+ translate_list (T , TAcc , [TH | List ], TAnn );
285
+ translate_list ([], Acc , List , Ann ) ->
286
+ {build_list (List , {nil , 0 }, Ann ), Acc }.
287
+
288
+ build_list ([H | T ], Acc , Ann ) ->
289
+ build_list (T , {cons , Ann , H , Acc }, Ann );
290
+ build_list ([], Acc , _Ann ) ->
289
291
Acc .
290
292
293
+ binary_ann (Left , Right ) ->
294
+ AnnLeft = element (2 , Right ),
295
+ AnnRight = element (2 , Left ),
296
+
297
+ if
298
+ AnnLeft /= 0 -> AnnLeft ;
299
+ AnnRight /= 0 -> AnnRight ;
300
+ true -> 0
301
+ end .
302
+
291
303
% % Pack a list of expressions from a block.
292
304
unblock ({'block' , _ , Exprs }) -> Exprs ;
293
305
unblock (Expr ) -> [Expr ].
0 commit comments