From 64b9b77ac57710c2da77a7b3b17664b11474e429 Mon Sep 17 00:00:00 2001 From: Tomas Abrahamsson Date: Wed, 2 Jun 2021 08:52:23 +0200 Subject: [PATCH] Adapt codegen:exprs substitutions to Erlang 24 (#50) Substitutions in codegen:exprs/1 were expecting locations to be integers. But with Erlang 24, these are {Line, Column} instead. Handle both. --- src/parse_trans_codegen.erl | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/parse_trans_codegen.erl b/src/parse_trans_codegen.erl index 9835233..deb0efa 100644 --- a/src/parse_trans_codegen.erl +++ b/src/parse_trans_codegen.erl @@ -376,23 +376,32 @@ abstract(ClauseForms) -> substitute({tuple,L0, [{atom,_,tuple}, - {integer,_,L}, + Loc, {cons,_, - {tuple,_,[{atom,_,atom},{integer,_,_},{atom,_,'$var'}]}, + {tuple,_,[{atom,_,atom},_LocA,{atom,_,'$var'}]}, {cons,_, - {tuple,_,[{atom,_,var},{integer,_,_},{atom,_,V}]}, - {nil,_}}}]}) -> + {tuple,_,[{atom,_,var},_LocB,{atom,_,V}]}, + {nil,_}}}]}) when element(1, Loc) == tuple; % Erlang 24+ + element(1, Loc) == integer -> + AbstConcreteLoc = + case Loc of + {integer, _, L} -> + {integer, L0, L}; + {tuple, _, [{integer, _, L}, {integer, _, C}]} -> + {tuple, L0, [{integer, L0, L}, {integer, L0, C}]} + end, {call, L0, {remote,L0,{atom,L0,erl_parse}, {atom,L0,abstract}}, - [{var, L0, V}, {integer, L0, L}]}; -substitute({tuple,L0, + [{var, L0, V}, AbstConcreteLoc]}; +substitute({tuple,L0, % Erlang 24: {Line,Col} [{atom,_,tuple}, - {integer,_,_}, + Loc, {cons,_, - {tuple,_,[{atom,_,atom},{integer,_,_},{atom,_,'$form'}]}, + {tuple,_,[{atom,_,atom},_LocA,{atom,_,'$form'}]}, {cons,_, - {tuple,_,[{atom,_,var},{integer,_,_},{atom,_,F}]}, - {nil,_}}}]}) -> + {tuple,_,[{atom,_,var},_LocB,{atom,_,F}]}, + {nil,_}}}]}) when element(1, Loc) == tuple; % Erlang 24+ + element(1, Loc) == integer -> {var, L0, F}; substitute([]) -> [];