diff options
author | Björn-Egil Dahlberg <[email protected]> | 2014-04-02 17:00:43 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-04-03 14:32:44 +0200 |
commit | cc7a3c5896bc266bb97287dd4e31b696d8cf604f (patch) | |
tree | d19e07f7b30e2723184e1789f9113f6060428a15 /lib/compiler/src/core_lib.erl | |
parent | eba291a52d4a78c128c5802775fa1bff187e0604 (diff) | |
download | otp-cc7a3c5896bc266bb97287dd4e31b696d8cf604f.tar.gz otp-cc7a3c5896bc266bb97287dd4e31b696d8cf604f.tar.bz2 otp-cc7a3c5896bc266bb97287dd4e31b696d8cf604f.zip |
compiler,stdlib: Fix Map literals as keys for Maps in patterns
Diffstat (limited to 'lib/compiler/src/core_lib.erl')
-rw-r--r-- | lib/compiler/src/core_lib.erl | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/compiler/src/core_lib.erl b/lib/compiler/src/core_lib.erl index 93ec3bbad5..2792fd8fa5 100644 --- a/lib/compiler/src/core_lib.erl +++ b/lib/compiler/src/core_lib.erl @@ -59,7 +59,7 @@ is_lit_bin(Es) -> %% Return the value of LitExpr. -spec literal_value(cerl:c_literal() | cerl:c_binary() | - cerl:c_cons() | cerl:c_tuple()) -> term(). + cerl:c_map() | cerl:c_cons() | cerl:c_tuple()) -> term(). literal_value(#c_literal{val=V}) -> V; literal_value(#c_binary{segments=Es}) -> @@ -67,7 +67,14 @@ literal_value(#c_binary{segments=Es}) -> literal_value(#c_cons{hd=H,tl=T}) -> [literal_value(H)|literal_value(T)]; literal_value(#c_tuple{es=Es}) -> - list_to_tuple(literal_value_list(Es)). + list_to_tuple(literal_value_list(Es)); +literal_value(#c_map{arg=Cm,es=Cmps}) -> + M = literal_value(Cm), + lists:foldl(fun(#c_map_pair{ key=Ck, val=Cv },Mi) -> + K = literal_value(Ck), + V = literal_value(Cv), + maps:put(K,V,Mi) + end, M, Cmps). literal_value_list(Vals) -> [literal_value(V) || V <- Vals]. |