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/core_lib.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/core_lib.erl')
-rw-r--r-- | lib/compiler/src/core_lib.erl | 50 |
1 files changed, 12 insertions, 38 deletions
diff --git a/lib/compiler/src/core_lib.erl b/lib/compiler/src/core_lib.erl index 730e3a5317..66319dbd36 100644 --- a/lib/compiler/src/core_lib.erl +++ b/lib/compiler/src/core_lib.erl @@ -20,6 +20,12 @@ -module(core_lib). +-deprecated({get_anno,1,next_major_release}). +-deprecated({set_anno,2,next_major_release}). +-deprecated({is_literal,1,next_major_release}). +-deprecated({is_literal_list,1,next_major_release}). +-deprecated({literal_value,1,next_major_release}). + -export([get_anno/1,set_anno/2]). -export([is_literal/1,is_literal_list/1]). -export([literal_value/1]). @@ -33,59 +39,27 @@ %% -spec get_anno(cerl:cerl()) -> term(). -get_anno(C) -> element(2, C). +get_anno(C) -> cerl:get_ann(C). -spec set_anno(cerl:cerl(), term()) -> cerl:cerl(). -set_anno(C, A) -> setelement(2, C, A). +set_anno(C, A) -> cerl:set_ann(C, A). -spec is_literal(cerl:cerl()) -> boolean(). -is_literal(#c_literal{}) -> true; -is_literal(#c_cons{hd=H,tl=T}) -> - is_literal(H) andalso is_literal(T); -is_literal(#c_tuple{es=Es}) -> is_literal_list(Es); -is_literal(#c_binary{segments=Es}) -> is_lit_bin(Es); -is_literal(_) -> false. +is_literal(Cerl) -> + cerl:is_literal(cerl:fold_literal(Cerl)). -spec is_literal_list([cerl:cerl()]) -> boolean(). is_literal_list(Es) -> lists:all(fun is_literal/1, Es). -is_lit_bin(Es) -> - lists:all(fun (#c_bitstr{val=E,size=S}) -> - is_literal(E) andalso is_literal(S) - end, Es). - %% Return the value of LitExpr. -spec literal_value(cerl:c_literal() | cerl:c_binary() | cerl:c_map() | cerl:c_cons() | cerl:c_tuple()) -> term(). -literal_value(#c_literal{val=V}) -> V; -literal_value(#c_binary{segments=Es}) -> - list_to_binary([literal_value_bin(Bit) || Bit <- Es]); -literal_value(#c_cons{hd=H,tl=T}) -> - [literal_value(H)|literal_value(T)]; -literal_value(#c_tuple{es=Es}) -> - list_to_tuple(literal_value_list(Es)); -literal_value(#c_map{arg=Cm,es=Cmps}) -> - M = literal_value(Cm), - lists:foldl(fun(#c_map_pair{ key=Ck, val=Cv },Mi) -> - K = literal_value(Ck), - V = literal_value(Cv), - maps:put(K,V,Mi) - end, M, Cmps). - -literal_value_list(Vals) -> [literal_value(V) || V <- Vals]. - -literal_value_bin(#c_bitstr{val=Val,size=Sz,unit=U,type=T,flags=Fs}) -> - %% We will only handle literals constructed by make_literal/1. - %% Could be made more general in the future if the need arises. - 8 = literal_value(Sz), - 1 = literal_value(U), - integer = literal_value(T), - [unsigned,big] = literal_value(Fs), - literal_value(Val). +literal_value(Cerl) -> + cerl:concrete(cerl:fold_literal(Cerl)). %% Make a suitable values structure, expr or values, depending on Expr. -spec make_values([cerl:cerl()] | cerl:cerl()) -> cerl:cerl(). |