diff options
author | Björn-Egil Dahlberg <[email protected]> | 2014-03-18 12:20:19 +0100 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-03-18 12:20:19 +0100 |
commit | a4d314a5298d9725fdd1874763e43b33a39252a0 (patch) | |
tree | 3beaa441407a6ec335e7bae501443e67a1c9e24e /lib/compiler/src/cerl_clauses.erl | |
parent | 8d66a2823c29cbe44cf80e4de0c58f2ed5c29bd4 (diff) | |
parent | 5638ca15d05e9b05d64ade0e03492c13d020439b (diff) | |
download | otp-a4d314a5298d9725fdd1874763e43b33a39252a0.tar.gz otp-a4d314a5298d9725fdd1874763e43b33a39252a0.tar.bz2 otp-a4d314a5298d9725fdd1874763e43b33a39252a0.zip |
Merge branch 'egil/maps-literals'
* egil/maps-literals:
compiler: Transform M#{} to is_map(M)
dialyzer: Do not native compile modules with Maps code
hipe: Properly identify map() type form terms
stdlib: Test Map key linting
stdlib: Accept records as Map keys
stdlib: Accept Maps as Map keys
stdlib: Move map type to proper definition
stdlib: Properly lint map key expressions
compiler: Change #c_map{var} to #c_map{arg}
compiler: Constant fold Maps that are safe
compiler: Validate Map src
compiler: Support literal maps in cerl_clauses:match/2
compiler: Guard BIF is_map/1 is pure
erts: Handle literals in is_map/1
compiler: Change Maps Core Format
compiler: Create literal Maps in creation if possible
Diffstat (limited to 'lib/compiler/src/cerl_clauses.erl')
-rw-r--r-- | lib/compiler/src/cerl_clauses.erl | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/compiler/src/cerl_clauses.erl b/lib/compiler/src/cerl_clauses.erl index 76d70dcabf..87bd47c08b 100644 --- a/lib/compiler/src/cerl_clauses.erl +++ b/lib/compiler/src/cerl_clauses.erl @@ -356,14 +356,19 @@ match(P, E, Bs) -> end; map -> %% The most we can do is to say "definitely no match" if a - %% binary pattern is matched against non-binary data. + %% map pattern is matched against non-map data. case E of any -> {false, Bs}; _ -> case type(E) of - literal -> - none; + literal -> + case is_map(concrete(E)) of + false -> + none; + true -> + {false, Bs} + end; cons -> none; tuple -> |