From a95913e793869051857b0fb64f3629049a2027a7 Mon Sep 17 00:00:00 2001 From: Ulf Norell Date: Tue, 28 May 2019 13:47:22 +0200 Subject: [PATCH] Fix bug when compiling map updates with default values --- src/aeso_ast_to_fcode.erl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/aeso_ast_to_fcode.erl b/src/aeso_ast_to_fcode.erl index 76f64ad..2357079 100644 --- a/src/aeso_ast_to_fcode.erl +++ b/src/aeso_ast_to_fcode.erl @@ -491,10 +491,16 @@ expr_to_fcode(Env, _Type, {map, _, Map, KVs}) -> case Fld of {field, _, [{map_get, _, K}], V} -> {op, map_set, [M, expr_to_fcode(Env, K), expr_to_fcode(Env, V)]}; - {field_upd, _, [{map_get, _, K}], {typed, _, {lam, _, [{arg, _, {id, _, Z}, _}], V}, _}} -> + {field_upd, _, [MapGet], {typed, _, {lam, _, [{arg, _, {id, _, Z}, _}], V}, _}} when element(1, MapGet) == map_get -> Y = fresh_name(), + [map_get, _, K | Default] = tuple_to_list(MapGet), + GetExpr = + case Default of + [] -> {op, map_get, [Map1, {var, Y}]}; + [D] -> {op, map_get_d, [Map1, {var, Y}, expr_to_fcode(Env, D)]} + end, {'let', Y, expr_to_fcode(Env, K), - {'let', Z, {op, map_get, [Map1, {var, Y}]}, + {'let', Z, GetExpr, {op, map_set, [M, {var, Y}, expr_to_fcode(bind_var(Env, Z), V)]}}} end end, Map1, KVs)}; expr_to_fcode(Env, _Type, {map_get, _, Map, Key}) ->