You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by wi...@apache.org on 2020/01/13 19:42:14 UTC

[couchdb-mochiweb] 15/37: Remove compile(tuple_calls) from mochifmt

This is an automated email from the ASF dual-hosted git repository.

willholley pushed a commit to branch upstream
in repository https://gitbox.apache.org/repos/asf/couchdb-mochiweb.git

commit 9f82853b1eb8d8cfc30098f00559063382c1ff79
Author: Bob Ippolito <bo...@redivi.com>
AuthorDate: Sat Mar 9 20:28:47 2019 +0000

    Remove compile(tuple_calls) from mochifmt
---
 src/mochifmt.erl | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/mochifmt.erl b/src/mochifmt.erl
index 5a5ed45..1aa01c3 100644
--- a/src/mochifmt.erl
+++ b/src/mochifmt.erl
@@ -25,8 +25,6 @@
 -module(mochifmt).
 -author('bob@mochimedia.com').
 
--compile(tuple_calls).
-
 -export([format/2, format_field/2, convert_field/2, get_value/2, get_field/2]).
 -export([tokenize/1, format/3, get_field/3, format_field/3]).
 -export([bformat/2, bformat/3]).
@@ -76,8 +74,7 @@ get_field(Key, Args) ->
 %%      is used to implement formats such as {0.0}.
 get_field(Key, Args, Module) ->
     {Name, Next} = lists:splitwith(fun (C) -> C =/= $. end, Key),
-    Res = try Module:get_value(Name, Args)
-          catch error:undef -> get_value(Name, Args) end,
+    Res = mod_get_value(Name, Args, Module),
     case Next of
         "" ->
             Res;
@@ -85,6 +82,16 @@ get_field(Key, Args, Module) ->
             get_field(S1, Res, Module)
     end.
 
+mod_get_value(Name, Args, Module) ->
+    try tuple_apply(Module, get_value, [Name, Args])
+    catch error:undef -> get_value(Name, Args)
+    end.
+
+tuple_apply(Module, F, Args) when is_atom(Module) ->
+    erlang:apply(Module, F, Args);
+tuple_apply(Module, F, Args) when is_tuple(Module), is_atom(element(1, Module)) ->
+    erlang:apply(element(1, Module), F, Args ++ [Module]).
+
 %% @spec format(Format::string(), Args) -> iolist()
 %% @doc Format Args with Format.
 format(Format, Args) ->
@@ -204,11 +211,11 @@ format2([{format, {Key, Convert, Format0}} | Rest], Args, Module, Acc) ->
                 V1 = convert_field(V0, Convert),
                 format_field(V1, Format);
             _ ->
-                V0 = try Module:get_field(Key, Args)
+                V0 = try tuple_apply(Module, get_field, [Key, Args])
                      catch error:undef -> get_field(Key, Args, Module) end,
-                V1 = try Module:convert_field(V0, Convert)
+                V1 = try tuple_apply(Module, convert_field, [V0, Convert])
                      catch error:undef -> convert_field(V0, Convert) end,
-                try Module:format_field(V1, Format)
+                try tuple_apply(Module, format_field, [V1, Format])
                 catch error:undef -> format_field(V1, Format, Module) end
         end,
     format2(Rest, Args, Module, [V | Acc]).
@@ -436,9 +443,9 @@ std_test() ->
 records_test() ->
     M = mochifmt_records:new([{conversion, record_info(fields, conversion)}]),
     R = #conversion{length=long, precision=hard, sign=peace},
-    long = M:get_value("length", R),
-    hard = M:get_value("precision", R),
-    peace = M:get_value("sign", R),
+    long = mochifmt_records:get_value("length", R, M),
+    hard = mochifmt_records:get_value("precision", R, M),
+    peace = mochifmt_records:get_value("sign", R, M),
     <<"long hard">> = bformat("{length} {precision}", R, M),
     <<"long hard">> = bformat("{0.length} {0.precision}", [R], M),
     ok.