diff --git a/src/dynamicCompile/utKvsToBeam.erl b/src/dynamicCompile/utKvsToBeam.erl index 51429aa..828300e 100644 --- a/src/dynamicCompile/utKvsToBeam.erl +++ b/src/dynamicCompile/utKvsToBeam.erl @@ -4,29 +4,31 @@ load/2 ]). --spec load(atom(), [{term(), term()}]) -> ok. +%% 注意 map类型的数据不能当做key +-type key() :: atom() | binary() | bitstring() | float() | integer() | list() | tuple(). +-type value() :: atom() | binary() | bitstring() | float() | integer() | list() | tuple() | map(). + +-spec load(term(), [{key(), value()}]) -> ok. load(Module, KVs) -> Forms = forms(Module, KVs), - {ok, Module, Bin} = compile:forms(Forms, [debug_info]), + {ok, Module, Bin} = compile:forms(Forms), code:soft_purge(Module), - Filename = atom_to_list(Module) ++ ".erl", - {module, Module} = code:load_binary(Module, Filename, Bin), + {module, Module} = code:load_binary(Module, atom_to_list(Module), Bin), ok. forms(Module, KVs) -> - Mod = erl_syntax:attribute(erl_syntax:atom(module), - [erl_syntax:atom(Module)]), - ExportList = [erl_syntax:arity_qualifier(erl_syntax:atom(get), - erl_syntax:integer(1))], - Export = erl_syntax:attribute(erl_syntax:atom(export), - [erl_syntax:list(ExportList)]), - Function = erl_syntax:function(erl_syntax:atom(get), - lookup_clauses(KVs)), + %% -module(Module). + Mod = erl_syntax:attribute(erl_syntax:atom(module), [erl_syntax:atom(Module)]), + %% -export([get/0]). + ExportList = [erl_syntax:arity_qualifier(erl_syntax:atom(get), erl_syntax:integer(1))], + Export = erl_syntax:attribute(erl_syntax:atom(export), [erl_syntax:list(ExportList)]), + %% get(K) -> V + Function = erl_syntax:function(erl_syntax:atom(get), lookup_clauses(KVs, [])), [erl_syntax:revert(X) || X <- [Mod, Export, Function]]. lookup_clause(Key, Value) -> - Var = to_syntax(Key), - Body = to_syntax(Value), + Var = erl_syntax:abstract(Key), + Body = erl_syntax:abstract(Value), erl_syntax:clause([Var], [], [Body]). lookup_clause_anon() -> @@ -34,24 +36,7 @@ lookup_clause_anon() -> Body = erl_syntax:atom(undefined), erl_syntax:clause([Var], [], [Body]). -lookup_clauses(KVs) -> - lookup_clauses(KVs, []). - lookup_clauses([], Acc) -> lists:reverse(lists:flatten([lookup_clause_anon() | Acc])); lookup_clauses([{Key, Value} | T], Acc) -> lookup_clauses(T, [lookup_clause(Key, Value) | Acc]). - -to_syntax(Atom) when is_atom(Atom) -> - erl_syntax:atom(Atom); -to_syntax(Binary) when is_binary(Binary) -> - String = erl_syntax:string(binary_to_list(Binary)), - erl_syntax:binary([erl_syntax:binary_field(String)]); -to_syntax(Float) when is_float(Float) -> - erl_syntax:float(Float); -to_syntax(Integer) when is_integer(Integer) -> - erl_syntax:integer(Integer); -to_syntax(List) when is_list(List) -> - erl_syntax:list([to_syntax(X) || X <- List]); -to_syntax(Tuple) when is_tuple(Tuple) -> - erl_syntax:tuple([to_syntax(X) || X <- tuple_to_list(Tuple)]). diff --git a/src/testCase/utTestAtomics.erl b/src/testCase/utTestAtomics.erl index be20326..e8ab27d 100644 --- a/src/testCase/utTestAtomics.erl +++ b/src/testCase/utTestAtomics.erl @@ -49,7 +49,7 @@ ttt4(0) -> io:format("IMY************dic ~p~n",[atomics:get(persistent_term:get(ref), 1)]), ok; ttt4(N) -> - atomics:add(persistent_term:get(ref) , 1, 1), + atomics:add_get(persistent_term:get(ref) , 1, 1), ttt4(N - 1). tt5(N) -> diff --git a/src/testCase/utTestPerformance.erl b/src/testCase/utTestPerformance.erl index 1de9438..aa00989 100644 --- a/src/testCase/utTestPerformance.erl +++ b/src/testCase/utTestPerformance.erl @@ -159,3 +159,21 @@ cc7(0, F) -> cc7(N, _F) -> F = float(N), cc7(N - 1, F). + +s1(0, Fun) -> + ok; +s1(N, Fun) -> + ?MODULE:Fun(), + s1(N - 1, Fun). + +st1() -> + size(<<"fdfdfdd:fdffd:\rn\n:fdfd fd df df dfddfdf">>). + +st2() -> + byte_size(<<"fdfdfdd:fdffd:\rn\n:fdfd fd df df dfddfdf">>). + +st3() -> + iolist_size(<<"fdfdfdd:fdffd:\rn\n:fdfd fd df df d:fddfdf">>). + +st4() -> + size(<<"fdfdfdd:fdffd:\rn\n:fdfd fd df df dfddfdf">>). diff --git a/src/testCase/utTestTime.erl b/src/testCase/utTestTime.erl index 4cef0c6..3e18a9b 100644 --- a/src/testCase/utTestTime.erl +++ b/src/testCase/utTestTime.erl @@ -268,3 +268,12 @@ tk2() -> tk3() -> erlang:system_time(nanosecond). + +tk4() -> + make_ref(). + +tk5() -> + erlang:unique_integer([positive]) rem 16. + +tk6() -> + erlang:monotonic_time(second).