diff options
author | Björn-Egil Dahlberg <[email protected]> | 2014-04-04 12:00:07 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-04-04 12:00:07 +0200 |
commit | 89eef897c6564c72d9717228a73959339e486bdb (patch) | |
tree | ebb39bfd3e9bbd3526b2996e36f1d57ee1f0b2c8 /lib/compiler/src/v3_core.erl | |
parent | 76c73b9554a3d74b027bc2e1fdace7192b7a8de6 (diff) | |
parent | e26dbc750fdd207c852bf9006668c5771f465dcf (diff) | |
download | otp-89eef897c6564c72d9717228a73959339e486bdb.tar.gz otp-89eef897c6564c72d9717228a73959339e486bdb.tar.bz2 otp-89eef897c6564c72d9717228a73959339e486bdb.zip |
Merge branch 'egil/maps-fix-map-key-patterns'
* egil/maps-fix-map-key-patterns:
stdlib: Fix erl_id_trans example
stdlib: Deny map keys defined as #{ .. := .. } in patterns
compiler: Fix compiling map keys in patterns from core
compiler,stdlib: Fix Map literals as keys for Maps in patterns
Diffstat (limited to 'lib/compiler/src/v3_core.erl')
-rw-r--r-- | lib/compiler/src/v3_core.erl | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl index a548ba2f7c..8c18f6a9f7 100644 --- a/lib/compiler/src/v3_core.erl +++ b/lib/compiler/src/v3_core.erl @@ -1605,26 +1605,17 @@ pattern_alias_map_pair_patterns([Cv1,Cv2|Cvs]) -> pattern_alias_map_pair_patterns([pat_alias(Cv1,Cv2)|Cvs]). pattern_map_pair({map_field_exact,L,K,V}, St) -> - %% FIXME: Better way to construct literals? or missing case - %% {Key,_,_} = expr(K, St), - Key = case K of - {bin,L,Es0} -> - case constant_bin(Es0) of - error -> - %% this will throw a cryptic error message - %% but it is better than nothing - throw(nomatch); - Bin -> - #c_literal{anno=lineno_anno(L,St),val=Bin} - end; + case expr(K,St) of + {#c_literal{}=Key,_,_} -> + #c_map_pair{anno=lineno_anno(L, St), + op=#c_literal{val=exact}, + key=Key, + val=pattern(V, St)}; _ -> - pattern(K,St) - end, - #c_map_pair{anno=lineno_anno(L, St), - op=#c_literal{val=exact}, - key=Key, - val=pattern(V, St)}. - + %% this will throw a cryptic error message + %% but it is better than nothing + throw(nomatch) + end. %% pat_bin([BinElement], State) -> [BinSeg]. |