File 2427-asn1ct_gen-Clean-up-handling-of-dispatch-generation.patch of Package erlang

From 390d197044d39c0805dd3060f0c58ae8b5458239 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Wed, 15 Feb 2017 07:37:53 +0100
Subject: [PATCH 7/7] asn1ct_gen: Clean up handling of dispatch generation

---
 lib/asn1/src/asn1ct_gen.erl | 39 ++++++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 19 deletions(-)

diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl
index 2fc85353e..9943bd056 100644
--- a/lib/asn1/src/asn1ct_gen.erl
+++ b/lib/asn1/src/asn1ct_gen.erl
@@ -747,7 +747,7 @@ pgen_dispatcher(Gen, Types) ->
 	       false -> "Data"
 	   end,
 
-    emit(["decode(Type,",Data,") ->",nl]),
+    emit(["decode(Type, ",Data,") ->",nl]),
     DecWrap =
 	case {Gen,ReturnRest} of
 	    {#gen{erule=ber},false} ->
@@ -782,17 +782,10 @@ pgen_dispatcher(Gen, Types) ->
     end,
 
     gen_decode_partial_incomplete(Gen),
+    gen_partial_inc_dispatcher(Gen),
 
-    case Gen of
-	#gen{erule=ber} ->
-	    gen_dispatcher(Types,"encode_disp","enc_",""),
-	    gen_dispatcher(Types,"decode_disp","dec_",""),
-	    gen_partial_inc_dispatcher();
-	#gen{} ->
-	    gen_dispatcher(Types,"encode_disp","enc_",""),
-	    gen_dispatcher(Types,"decode_disp","dec_","")
-    end,
-    emit([nl,nl]).
+    gen_dispatcher(Types, "encode_disp", "enc_"),
+    gen_dispatcher(Types, "decode_disp", "dec_").
 
 result_line(NoOkWrapper, Items) ->
     S = ["    "|case NoOkWrapper of
@@ -877,7 +870,7 @@ gen_decode_partial_incomplete(#gen{erule=ber}) ->
 gen_decode_partial_incomplete(#gen{}) ->
     ok.
 
-gen_partial_inc_dispatcher() ->
+gen_partial_inc_dispatcher(#gen{erule=ber}) ->
     case {asn1ct:read_config_data(partial_incomplete_decode),
 	  asn1ct:get_gen_state_field(inc_type_pattern)} of
 	{undefined,_} ->
@@ -887,7 +880,9 @@ gen_partial_inc_dispatcher() ->
 	{Data1,Data2} ->
 %	    io:format("partial_incomplete_decode: ~p~ninc_type_pattern: ~p~n",[Data,Data2]),
 	    gen_partial_inc_dispatcher(Data1, Data2, "")
-    end.
+    end;
+gen_partial_inc_dispatcher(#gen{}) ->
+    ok.
 
 gen_partial_inc_dispatcher([{FuncName,TopType,_Pattern}|Rest], TypePattern, Sep) ->
     TPattern =
@@ -911,12 +906,18 @@ gen_partial_inc_dispatcher([{FuncName,TopType,_Pattern}|Rest], TypePattern, Sep)
 gen_partial_inc_dispatcher([], _, _) ->
     emit([".",nl]).
 
-gen_dispatcher([F1,F2|T],FuncName,Prefix,ExtraArg) ->
-	emit([FuncName,"('",F1,"',Data) -> '",Prefix,F1,"'(Data",ExtraArg,")",";",nl]),
-	gen_dispatcher([F2|T],FuncName,Prefix,ExtraArg);
-gen_dispatcher([Flast|_T],FuncName,Prefix,ExtraArg) ->
-	emit([FuncName,"('",Flast,"',Data) -> '",Prefix,Flast,"'(Data",ExtraArg,")",";",nl]),
-	emit([FuncName,"(","Type",",_Data) -> exit({error,{asn1,{undefined_type,Type}}}).",nl,nl,nl]).
+gen_dispatcher(L, DispFunc, Prefix) ->
+    gen_dispatcher_1(L, DispFunc, Prefix),
+    emit([DispFunc,"(","Type",", _Data) ->"
+          " exit({error,{asn1,{undefined_type,Type}}}).",nl,nl]).
+
+gen_dispatcher_1([F|T], FuncName, Prefix) ->
+    Func = list_to_atom(lists:concat([Prefix,F])),
+    emit([FuncName,"(",{asis,F},", Data) -> ",
+          {asis,Func},"(Data)",";",nl]),
+    gen_dispatcher_1(T, FuncName, Prefix);
+gen_dispatcher_1([], _, _) ->
+    ok.
 
 pgen_info() ->
     emit(["info() ->",nl,
-- 
2.11.1

openSUSE Build Service is sponsored by