From 9844f5012f40a4c188983e83e2cb66d36ee93ef0 Mon Sep 17 00:00:00 2001 From: Milton Mazzarri Date: Thu, 11 Aug 2016 01:08:30 -0500 Subject: [PATCH] Do not re-compile a compiled pattern for String.split/3 --- lib/elixir/lib/string.ex | 1 + lib/elixir/test/elixir/string_test.exs | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/lib/elixir/lib/string.ex b/lib/elixir/lib/string.ex index 2b6585493d9..9c2b931aec9 100644 --- a/lib/elixir/lib/string.ex +++ b/lib/elixir/lib/string.ex @@ -413,6 +413,7 @@ defmodule String do end defp maybe_compile_pattern(""), do: "" + defp maybe_compile_pattern(pattern) when is_tuple(pattern), do: pattern defp maybe_compile_pattern(pattern), do: :binary.compile_pattern(pattern) @doc """ diff --git a/lib/elixir/test/elixir/string_test.exs b/lib/elixir/test/elixir/string_test.exs index 44f6d45729b..ce238dcf715 100644 --- a/lib/elixir/test/elixir/string_test.exs +++ b/lib/elixir/test/elixir/string_test.exs @@ -82,6 +82,14 @@ defmodule StringTest do assert String.split("a,b", ~r{\.}) == ["a,b"] end + test "split with compiled pattern" do + pattern = :binary.compile_pattern("-") + + assert String.split("x-", pattern) == ["x", ""] + assert String.split("x-", pattern, parts: 2, trim: true) == ["x"] + assert String.split("x-x-", pattern, parts: 3, trim: true) == ["x", "x"] + end + test "splitter" do assert String.splitter("a,b,c", ",") |> Enum.to_list == ["a", "b", "c"] assert String.splitter("a,b", ".") |> Enum.to_list == ["a,b"]