aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZandra <[email protected]>2015-12-28 12:08:05 +0100
committerZandra <[email protected]>2015-12-28 12:08:05 +0100
commit4f2d5c08a08e25e9b5b1b2011a8efe2fea441049 (patch)
tree69026df11b94903d60694e9e8d93191351b094b6
parent60d310117c005d6a05dcfc729b79a174b44e5370 (diff)
parentc0c2f6a204d83ee89cd179b0a6d5996e248539e5 (diff)
downloadotp-4f2d5c08a08e25e9b5b1b2011a8efe2fea441049.tar.gz
otp-4f2d5c08a08e25e9b5b1b2011a8efe2fea441049.tar.bz2
otp-4f2d5c08a08e25e9b5b1b2011a8efe2fea441049.zip
Merge branch 'josevalim/jv-map-fun-eval-maint' into maint
* josevalim/jv-map-fun-eval-maint: Use full list of bindings when matching on map keys OTP-13218
-rw-r--r--lib/stdlib/src/erl_eval.erl2
-rw-r--r--lib/stdlib/test/erl_eval_SUITE.erl10
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/stdlib/src/erl_eval.erl b/lib/stdlib/src/erl_eval.erl
index ca3cc43b19..568eb1c852 100644
--- a/lib/stdlib/src/erl_eval.erl
+++ b/lib/stdlib/src/erl_eval.erl
@@ -1184,7 +1184,7 @@ match_tuple([], _, _, Bs, _BBs) ->
match_map([{map_field_exact, _, K, V}|Fs], Map, Bs0, BBs) ->
Vm = try
- {value, Ke, _} = expr(K, Bs0),
+ {value, Ke, _} = expr(K, BBs),
maps:get(Ke,Map)
catch error:_ ->
throw(nomatch)
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl
index b9c4ad0a46..50fc62a00e 100644
--- a/lib/stdlib/test/erl_eval_SUITE.erl
+++ b/lib/stdlib/test/erl_eval_SUITE.erl
@@ -1483,6 +1483,16 @@ eep43(Config) when is_list(Config) ->
" #{ K1 := 1, K2 := 2, K3 := 3, {2,2} := 4} = Map "
"end.",
#{ 1 => 1, <<42:301>> => 2, {3,<<42:301>>} => 3, {2,2} => 4}),
+ check(fun () ->
+ X = key,
+ (fun(#{X := value}) -> true end)(#{X => value})
+ end,
+ "begin "
+ " X = key, "
+ " (fun(#{X := value}) -> true end)(#{X => value}) "
+ "end.",
+ true),
+
error_check("[camembert]#{}.", {badmap,[camembert]}),
error_check("[camembert]#{nonexisting:=v}.", {badmap,[camembert]}),
error_check("#{} = 1.", {badmatch,1}),