aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src/core_lib.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2015-01-21 10:03:00 +0100
committerBjörn Gustavsson <[email protected]>2015-01-21 10:03:00 +0100
commitc0569ad830f841d5df16bd75a6f5d0e584202b05 (patch)
treef1d141e4fe66e30644bd85a2eca7d46a5eaf83d7 /lib/compiler/src/core_lib.erl
parent677cb69c4c919e40d074df3bae40338a375a4731 (diff)
parentbb561b0dd58a89489acb93bdf7b5386e7f306835 (diff)
downloadotp-c0569ad830f841d5df16bd75a6f5d0e584202b05.tar.gz
otp-c0569ad830f841d5df16bd75a6f5d0e584202b05.tar.bz2
otp-c0569ad830f841d5df16bd75a6f5d0e584202b05.zip
Merge branch 'bjorn/compiler/map-pattern/OTP-12414' into maint
* bjorn/compiler/map-pattern/OTP-12414: core_lib: Handle patterns in map values
Diffstat (limited to 'lib/compiler/src/core_lib.erl')
-rw-r--r--lib/compiler/src/core_lib.erl9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/compiler/src/core_lib.erl b/lib/compiler/src/core_lib.erl
index 2792fd8fa5..0d95971f91 100644
--- a/lib/compiler/src/core_lib.erl
+++ b/lib/compiler/src/core_lib.erl
@@ -212,6 +212,8 @@ vu_pattern(V, #c_tuple{es=Es}, St) ->
vu_pattern_list(V, Es, St);
vu_pattern(V, #c_binary{segments=Ss}, St) ->
vu_pat_seg_list(V, Ss, St);
+vu_pattern(V, #c_map{es=Es}, St) ->
+ vu_map_pairs(V, Es, St);
vu_pattern(V, #c_alias{var=Var,pat=P}, St0) ->
case vu_pattern(V, Var, St0) of
{true,_}=St1 -> St1;
@@ -234,6 +236,13 @@ vu_pat_seg_list(V, Ss, St) ->
end
end, St, Ss).
+vu_map_pairs(V, [#c_map_pair{val=Pat}|T], St0) ->
+ case vu_pattern(V, Pat, St0) of
+ {true,_}=St -> St;
+ St -> vu_map_pairs(V, T, St)
+ end;
+vu_map_pairs(_, [], St) -> St.
+
-spec vu_var_list(cerl:var_name(), [cerl:c_var()]) -> boolean().
vu_var_list(V, Vs) ->