diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2015-03-11 14:21:37 +0100 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2015-03-11 15:30:22 +0100 |
commit | 36576d7de20e4e8cb7b3943cfe1b7e272b5e3971 (patch) | |
tree | 23e46b1c99ff4cae52e056871529ee8274c8c88a /erts/emulator/beam/erl_db_util.c | |
parent | d6073d78109f026ef96b29af4ce748242df2389d (diff) | |
download | otp-36576d7de20e4e8cb7b3943cfe1b7e272b5e3971.tar.gz otp-36576d7de20e4e8cb7b3943cfe1b7e272b5e3971.tar.bz2 otp-36576d7de20e4e8cb7b3943cfe1b7e272b5e3971.zip |
Properly collect variables in match specs with maps
Diffstat (limited to 'erts/emulator/beam/erl_db_util.c')
-rw-r--r-- | erts/emulator/beam/erl_db_util.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c index 1d986f2447..748be93fe3 100644 --- a/erts/emulator/beam/erl_db_util.c +++ b/erts/emulator/beam/erl_db_util.c @@ -3286,7 +3286,14 @@ int db_has_variable(Eterm node) { while(arity--) { ESTACK_PUSH(s,*(++tuple)); } - } + } else if (is_map(node)) { + Eterm *values = map_get_values(map_val(node)); + int size = map_get_size(map_val(node)); + ESTACK_PUSH(s, ((map_t *) map_val(node))->keys); + while (size--) { + ESTACK_PUSH(s, *(values++)); + } + } break; case TAG_PRIMARY_IMMED1: if (node == am_Underscore || db_is_variable(node) >= 0) { |