diff options
author | Anthony Ramine <[email protected]> | 2014-03-01 16:27:06 +0100 |
---|---|---|
committer | Anthony Ramine <[email protected]> | 2014-03-01 16:27:06 +0100 |
commit | 974de0f23a9f818a2c40cb47d24ebf8d8f8b01d7 (patch) | |
tree | 948b5ad0ed37e1dc6ea874ce130dec3e9b4ec4c2 | |
parent | db911c1f15372d2dadf06e8502506b0936a4fbb3 (diff) | |
download | otp-974de0f23a9f818a2c40cb47d24ebf8d8f8b01d7.tar.gz otp-974de0f23a9f818a2c40cb47d24ebf8d8f8b01d7.tar.bz2 otp-974de0f23a9f818a2c40cb47d24ebf8d8f8b01d7.zip |
Fix expansion of map update arguments
Reported-by: José Valim
-rw-r--r-- | lib/compiler/src/sys_pre_expand.erl | 7 | ||||
-rw-r--r-- | lib/compiler/test/map_SUITE.erl | 11 |
2 files changed, 13 insertions, 5 deletions
diff --git a/lib/compiler/src/sys_pre_expand.erl b/lib/compiler/src/sys_pre_expand.erl index 9998043013..91a46a20fe 100644 --- a/lib/compiler/src/sys_pre_expand.erl +++ b/lib/compiler/src/sys_pre_expand.erl @@ -331,9 +331,10 @@ expr({tuple,Line,Es0}, St0) -> expr({map,Line,Es0}, St0) -> {Es1,St1} = expr_list(Es0, St0), {{map,Line,Es1},St1}; -expr({map,Line,Var,Es0}, St0) -> - {Es1,St1} = expr_list(Es0, St0), - {{map,Line,Var,Es1},St1}; +expr({map,Line,E0,Es0}, St0) -> + {E1,St1} = expr(E0, St0), + {Es1,St2} = expr_list(Es0, St1), + {{map,Line,E1,Es1},St2}; expr({map_field_assoc,Line,K0,V0}, St0) -> {K,St1} = expr(K0, St0), {V,St2} = expr(V0, St1), diff --git a/lib/compiler/test/map_SUITE.erl b/lib/compiler/test/map_SUITE.erl index 7d35ffc8d5..3080f135b9 100644 --- a/lib/compiler/test/map_SUITE.erl +++ b/lib/compiler/test/map_SUITE.erl @@ -42,7 +42,8 @@ t_build_and_match_val/1, %% errors in 17.0-rc1 - t_update_values/1 + t_update_values/1, + t_expand_map_update/1 ]). suite() -> []. @@ -68,7 +69,8 @@ all() -> [ t_build_and_match_val, %% errors in 17.0-rc1 - t_update_values + t_update_values, + t_expand_map_update ]. groups() -> []. @@ -273,6 +275,11 @@ t_update_values(Config) when is_list(Config) -> end, {none, none, #{val1=>none,val2=>none}},List), ok. +t_expand_map_update(Config) when is_list(Config) -> + M = #{<<"hello">> => <<"world">>}#{<<"hello">> := <<"les gens">>}, + #{<<"hello">> := <<"les gens">>} = M, + ok. + check_val(#{val1:=V1, val2:=V2},V1,V2) -> ok. get_val(#{ "wazzup" := _, val := V}) -> V; |