diff options
author | Björn Gustavsson <[email protected]> | 2015-02-18 09:56:45 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2015-02-18 09:56:45 +0100 |
commit | 3dd2608a5dae7f054af9a5a3bf76befb00f38b98 (patch) | |
tree | e400b92905d2fc826308544f07ec182e538be3a8 /lib/compiler/src/cerl.erl | |
parent | 36a515e52d89a6a5f87c271bdea794394ca35d27 (diff) | |
parent | 116e8aa05f84ee66aead2792b07b644c7f3e8fcd (diff) | |
download | otp-3dd2608a5dae7f054af9a5a3bf76befb00f38b98.tar.gz otp-3dd2608a5dae7f054af9a5a3bf76befb00f38b98.tar.bz2 otp-3dd2608a5dae7f054af9a5a3bf76befb00f38b98.zip |
Merge branch 'bjorn/compiler/clean-up/OTP-12497'
* bjorn/compiler/clean-up/OTP-12497:
cerl: Teach is_literal_term/1 to handle maps
cerl: Add missing is_c_map/1 function
v3_core: Simplify translation of maps
sys_core_fold: Simplify opt_simple_let_2/6
Break out inlining of 'lists' functions to a new module
sys_core_fold: Add is_int_type/2 and is_tuple_type/2
sys_core_fold: Refactor type information access
core_lib: Deprecate functions that are no longer used by the compiler
Eliminate use of core_lib:literal_value/1
Eliminate all uses of core_lib:get_anno/1 and core_lib:set_anno/2
core_lint: Eliminate call to core_lib:is_literal/1
test_lib: Include test_server.hrl using -include_lib
sys_core_fold: Rename add_scope/2 to fit in the sub_* family
v3_core: Suppress compiler-generated calls in guards
v3_core: Remove out-commented code
v3_core: Remove unused function argument for bc_tq()
v3_core: Use Core Erlang annotations in a type-safe way
Diffstat (limited to 'lib/compiler/src/cerl.erl')
-rw-r--r-- | lib/compiler/src/cerl.erl | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/compiler/src/cerl.erl b/lib/compiler/src/cerl.erl index 1a2957ee31..3d4b9ee0c6 100644 --- a/lib/compiler/src/cerl.erl +++ b/lib/compiler/src/cerl.erl @@ -124,6 +124,7 @@ %% keep map exports here for now c_map_pattern/1, + is_c_map/1, map_es/1, map_arg/1, update_c_map/3, @@ -433,6 +434,8 @@ is_literal_term([H | T]) -> is_literal_term(T) when is_tuple(T) -> is_literal_term_list(tuple_to_list(T)); is_literal_term(B) when is_bitstring(B) -> true; +is_literal_term(M) when is_map(M) -> + is_literal_term_list(maps:to_list(M)); is_literal_term(_) -> false. @@ -1579,6 +1582,20 @@ ann_make_list(_, [], Node) -> %% --------------------------------------------------------------------- %% maps +%% @spec is_c_map(Node::cerl()) -> boolean() +%% +%% @doc Returns <code>true</code> if <code>Node</code> is an abstract +%% map constructor, otherwise <code>false</code>. + +-spec is_c_map(cerl()) -> boolean(). + +is_c_map(#c_map{}) -> + true; +is_c_map(#c_literal{val = V}) when is_map(V) -> + true; +is_c_map(_) -> + false. + -spec map_es(c_map()) -> [c_map_pair()]. map_es(#c_map{es = Es}) -> |