From f05c2463359d0807f01de4c7a39287f8682b5ab0 Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Fri, 31 Mar 2023 19:47:09 +0300 Subject: [PATCH] Save fresh names of pattern variables --- src/aeso_ast_to_fcode.erl | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/aeso_ast_to_fcode.erl b/src/aeso_ast_to_fcode.erl index d4ab1db..9b441c7 100644 --- a/src/aeso_ast_to_fcode.erl +++ b/src/aeso_ast_to_fcode.erl @@ -1009,19 +1009,19 @@ split_alt(I, {'case', Pats, Body}) -> {SPat, {'case', Pats0 ++ InnerPats ++ Pats1, Body}}. -spec split_pat(fpat()) -> {fsplit_pat(), [fpat()]}. -split_pat(P = {var, _}) -> {{var, fresh_name()}, [P]}; +split_pat(P = {var, _}) -> {{var, fresh_name_save_fpat(P)}, [P]}; split_pat({bool, B}) -> {{bool, B}, []}; split_pat({int, N}) -> {{int, N}, []}; split_pat({string, N}) -> {{string, N}, []}; split_pat(nil) -> {nil, []}; -split_pat({'::', P, Q}) -> {{'::', fresh_name(), fresh_name()}, [P, Q]}; +split_pat({'::', P, Q}) -> {{'::', fresh_name_save_fpat(P), fresh_name_save_fpat(Q)}, [P, Q]}; split_pat({con, As, I, Pats}) -> - Xs = [fresh_name() || _ <- Pats], + Xs = [fresh_name_save_fpat(P) || P <- Pats], {{con, As, I, Xs}, Pats}; split_pat({assign, X = {var, _}, P}) -> - {{assign, fresh_name(), fresh_name()}, [X, P]}; + {{assign, fresh_name_save_fpat(X), fresh_name_save_fpat(P)}, [X, P]}; split_pat({tuple, Pats}) -> - Xs = [fresh_name() || _ <- Pats], + Xs = [fresh_name_save_fpat(P) || P <- Pats], {{tuple, Xs}, Pats}. -spec split_vars(fsplit_pat(), ftype()) -> [{var_name(), ftype()}]. @@ -1897,6 +1897,13 @@ fresh_name_save(Name) -> end, Fresh. +-spec fresh_name_save_fpat(fpat()) -> var_name(). +fresh_name_save_fpat({var, Name}) -> + fresh_name_save(Name); +fresh_name_save_fpat(FPat) -> + [fresh_name_save(Name) || Name <- pat_vars(FPat)], + fresh_name(). + -spec fresh_name() -> var_name(). fresh_name() -> fresh_name("%").