File 4181-unicode_util-gc-1.patch of Package erlang

From adfd75bfdb9724daa6cc2215d7ae84b99397e8de Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Thu, 2 May 2019 07:19:26 +0200
Subject: [PATCH] unicode_util gc/1

Could expand binary to list for to many elements.
Fix and add tests.
---
 lib/stdlib/test/unicode_util_SUITE.erl     | 10 +++++++++-
 lib/stdlib/uc_spec/gen_unicode_mod.escript | 14 +++++++-------
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/lib/stdlib/test/unicode_util_SUITE.erl b/lib/stdlib/test/unicode_util_SUITE.erl
index 044b4e5834..6f55f204f4 100644
--- a/lib/stdlib/test/unicode_util_SUITE.erl
+++ b/lib/stdlib/test/unicode_util_SUITE.erl
@@ -428,7 +428,15 @@ mode(deep_l, Bin) -> [unicode:characters_to_list(Bin)].
 fetch(Str, F) ->
     case F(Str) of
         [] -> [];
-        [CP|R] -> [CP|fetch(R,F)]
+        [CP|R] ->
+            %% If input is a binary R should be binary
+            if is_binary(Str) == false -> ok;
+               is_binary(R); R =:= [] -> ok;
+               true ->
+                    io:format("Char: ~tc Tail:~tP~n", [CP,R,10]),
+                    exit({bug, F})
+            end,
+            [CP|fetch(R,F)]
     end.
 
 %% *Test.txt file helpers
diff --git a/lib/stdlib/uc_spec/gen_unicode_mod.escript b/lib/stdlib/uc_spec/gen_unicode_mod.escript
index f560444619..de67b18afc 100644
--- a/lib/stdlib/uc_spec/gen_unicode_mod.escript
+++ b/lib/stdlib/uc_spec/gen_unicode_mod.escript
@@ -623,7 +623,7 @@ gen_gc(Fd, GBP) ->
     GenHangulT = fun(Range) -> io:format(Fd, "gc_1~s gc_h_T(R1,[CP]);\n", [gen_clause(Range)]) end,
     [GenHangulT(CP) || CP <- merge_ranges(maps:get(t,GBP))],
     io:put_chars(Fd, "%% Handle Hangul LV and LVT special, since they are large\n"),
-    io:put_chars(Fd, "gc_1([CP|_]=R0) when 44000 < CP, CP < 56000 -> gc_h_lv_lvt(R0, []);\n"),
+    io:put_chars(Fd, "gc_1([CP|_]=R0) when 44000 < CP, CP < 56000 -> gc_h_lv_lvt(R0, R0, []);\n"),
 
     io:put_chars(Fd, "\n%% Handle Regional\n"),
     GenRegional = fun(Range) -> io:format(Fd, "gc_1~s gc_regional(R1,CP);\n", [gen_clause(Range)]) end,
@@ -752,7 +752,7 @@ gen_gc(Fd, GBP) ->
     GenHangulL_2 = fun(Range) -> io:format(Fd, "~8c~s gc_h_V(R1,[CP|Acc]);\n",
                                            [$\s,gen_case_clause(Range)]) end,
     [GenHangulL_2(CP) || CP <- merge_ranges(maps:get(v,GBP))],
-    io:put_chars(Fd, "        R1 -> gc_h_lv_lvt(R1, Acc)\n    end.\n\n"),
+    io:put_chars(Fd, "        R1 -> gc_h_lv_lvt(R1, R0, Acc)\n    end.\n\n"),
 
     io:put_chars(Fd, "%% Handle Hangul V\n"),
     io:put_chars(Fd, "gc_h_V(R0, Acc) ->\n    case cp(R0) of\n"),
@@ -787,10 +787,10 @@ gen_gc(Fd, GBP) ->
     GenHangulLVT = fun(Range) -> io:format(Fd, "gc_h_lv_lvt~s gc_h_T(R1,[CP|Acc]);\n",
                                            [gen_clause2(Range)]) end,
     [GenHangulLVT(CP) || CP <- merge_ranges(maps:get(lvt,GBP))],
-    io:put_chars(Fd, "gc_h_lv_lvt([CP|R], []) -> gc_extend(cp(R), R, CP);\n"), %% From gc_1/1
+    io:put_chars(Fd, "gc_h_lv_lvt([CP|R1], _, []) -> gc_extend(cp(R1), R1, CP);\n"), %% From gc_1/1
     io:put_chars(Fd, "%% Also handles error tuples\n"),
-    io:put_chars(Fd, "gc_h_lv_lvt(R, [CP]) -> gc_extend(R, R, CP);\n"),
-    io:put_chars(Fd, "gc_h_lv_lvt(R, Acc) -> gc_extend2(R, R, Acc).\n\n"),
+    io:put_chars(Fd, "gc_h_lv_lvt(R1, R0, [CP]) -> gc_extend(R1, R0, CP);\n"),
+    io:put_chars(Fd, "gc_h_lv_lvt(R1, R0, Acc) -> gc_extend2(R1, R0, Acc).\n\n"),
     ok.
 
 gen_compose_pairs(Fd, ExclData, Data) ->
@@ -891,9 +891,9 @@ gen_clause({R0, R1}) ->
     io_lib:format("([CP|R1]=R0) when ~w =< CP, CP =< ~w ->", [R0,R1]).
 
 gen_clause2({R0, undefined}) ->
-    io_lib:format("([~w=CP|R1], Acc) ->", [R0]);
+    io_lib:format("([~w=CP|R1], R0, Acc) ->", [R0]);
 gen_clause2({R0, R1}) ->
-    io_lib:format("([CP|R1], Acc) when ~w =< CP, CP =< ~w ->", [R0,R1]).
+    io_lib:format("([CP|R1], R0, Acc) when ~w =< CP, CP =< ~w ->", [R0,R1]).
 
 gen_case_clause({R0, undefined}) ->
     io_lib:format("[~w=CP|R1] ->", [R0]);
-- 
2.16.4

openSUSE Build Service is sponsored by